Python高级应用程序设计

Python高级应用程序设计任务要求

用Python实现一个面向主题的网络爬虫程序,并完成以下内容:
(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台)

一、主题式网络爬虫设计方案(15分)

1.主题式网络爬虫名称

名称:爬取视频网站中的电影排名信息
2.主题式网络爬虫爬取的内容与数据特征分析

本次爬虫主要爬取各个视频网站中的电影排名以及评分
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

本次设计方案主要依靠request库对目标页面进行信息的爬取采集,再用BeautifulSoup对数据进行清洗,最后将结果打印出来。技术难点主要包括对数据的清洗以及对打印结果的排版。

二、主题页面的结构特征分析(15分)
1.主题页面的结构特征

以爱奇艺电影频道为例,url:https://www.iqiyi.com/dianying_new/i_list_paihangbang.html

2.Htmls页面解析

3.节点(标签)查找方法与遍历方法
(必要时画出节点树结构)
 查找方法find_all()
三、网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。
程序代码:

import requests
from bs4 import BeautifulSoup
#导入requests库 从bs4库中调用BeautifulSoup
#爬取爱奇艺电影频道目标的HTML页面
def getHTMLText(url):
    try:
        #用requests抓取网页信息,请求超时时间为60秒
        r = requests.get(url,timeout=60)
        #如果状态码不是200,则引发异常
        r.raise_for_status()
        #配置编码
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "爬取失败"

#获取电影名称
def getMovie(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #用find_all方法从HTML页面中所有的p标签,从中获取到电影的名称
    for p in soup.find_all("p","site-piclist_info_title"):
        ulist.append(p.a.string)
    return ulist

#获取电影评分
def getPage1(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #用find_all方法从HTML页面中所有的div标签,从中获取到电影的评分
    for div in soup.find_all("div","site-title_score"):
        ulist.append(div.span.strong.string)
    return ulist

def getPage2(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    u = []
    for div in soup.find_all("div","site-title_score"):
        ulist.append(list(div.span))
    return ulist

#打印电影信息函数
def printUnivList(ulist1,ulist2,ulist3,num):
    print("{:^50}".format("电影名称及评分"))
    for i in range(num):
        print("{:^45}\t\t{}{}".format(ulist1[i],ulist2[i],ulist3[i]))

#填入要请求的服务器地址URL
Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html"
#创建一个数组m用来存放爬取到的电影名称
m = []
#创建2个数组分别存储电影评分的个位部分的数值以及小数点后的数值
p1 = []
p2 = []
#创建一个数组P3将p1和p2的数据进行合并处理
p3 = []
#获取到HTML页面信息
html = getHTMLText(Url)
#获取到电影名称
getMovie(m,html)
#获取到电影评分
getPage1(p1,html)
getPage2(p2,html)
#将p1和p2的信息合并存储到p3
for i in range(len(p2)):
     p3.append(p2[i][1])
#打印所有爬取到的电影信息
printUnivList(m,p1,p3,len(m))

运行结果:

1.数据爬取与采集

使用request库进行爬取数据

#爬取爱奇艺电影频道目标的HTML页面
def getHTMLText(url):
    try:
        #用requests抓取网页信息,请求超时时间为60秒
        r = requests.get(url,timeout=60)
        #如果状态码不是200,则引发异常
        r.raise_for_status()
        #配置编码
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "爬取失败"

2.对数据进行清洗和处理

用BeautifulSoup 库进行数据清洗

#获取电影名称
def getMovie(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #用find_all方法从HTML页面中所有的p标签,从中获取到电影的名称
    for p in soup.find_all("p","site-piclist_info_title"):
        ulist.append(p.a.string)
    return ulist

#获取电影评分
def getPage1(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    #用find_all方法从HTML页面中所有的div标签,从中获取到电影的评分
    for div in soup.find_all("div","site-title_score"):
        ulist.append(div.span.strong.string)
    return ulist

def getPage2(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    u = []
    for div in soup.find_all("div","site-title_score"):
        ulist.append(list(div.span))
    return ulist

#打印电影信息函数
def printUnivList(ulist1,ulist2,ulist3,num):
    print("{:^50}".format("电影名称及评分"))
    for i in range(num):
        print("{:^45}\t\t{}{}".format(ulist1[i],ulist2[i],ulist3[i]))

#填入要请求的服务器地址URL
Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html"
#创建一个数组m用来存放爬取到的电影名称
m = []
#创建2个数组分别存储电影评分的个位部分的数值以及小数点后的数值
p1 = []
p2 = []
#创建一个数组P3将p1和p2的数据进行合并处理
p3 = []
#获取到HTML页面信息
html = getHTMLText(Url)
#获取到电影名称
getMovie(m,html)
#获取到电影评分
getPage1(p1,html)
getPage2(p2,html)
#将p1和p2的信息合并存储到p3
for i in range(len(p2)):
     p3.append(p2[i][1])
#打印所有爬取到的电影信息
printUnivList(m,p1,p3,len(m))

3.文本分析(可选):jieba分词、wordcloud可视化

#encoding=utf-8
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
file_object = open(r‘C:\Users\lenovo\Desktop\琐屑\a‘)
#不要把open放在try中,以防止打开失败,那么就不用关闭了
try:
    file_context = file_object.read() #file_context是一个string,读取完后,就失去了对test.txt的文件引用
finally:
    file_object.close()
#print(file_context)
seg_list = jieba.cut_for_search(file_context)# 搜索引擎模式
#print(list(seg_list))
#print(" ".join(seg_list))
# 设置词云
wc = WordCloud(
# 设置背景颜色
background_color="black",
# 设置最大显示的词云数
max_words=2000,
# 这种字体都在电脑字体中,一般路径
font_path=‘C:\Windows\Fonts\simfang.ttf‘,
height=1200, width=1600,
# 设置字体最大值
max_font_size=100,
# 设置有多少种随机生成状态,即有多少种配色方案
random_state=30, )
myword = wc.generate(" ".join(seg_list))  # 生成词云
# 展示词云图
plt.imshow(myword)
plt.axis("off")
plt.show()
wc.to_file(‘C://Users//123//Desktop//p.png‘)  # 把词云保存下

结果图:

4.数据分析与可视化
(例如:数据柱形图、直方图、散点图、盒图、分布图、数据回归分析等)

5.数据持久化

四、结论(10分)
1.经过对主题数据的分析与可视化,可以得到哪些结论?

通过对主题数据的分析与可视化,可以得到电影的排名信息以及各自的评分
2.对本次程序设计任务完成的情况做一个简单的小结。

通过这次任务,基本实现把想要的数据爬取下来,以及对其进行数据清洗及分析。

这次实验同样存在不足之处,爬取下来的数据排版问题没有得到好的解决

原文地址:https://www.cnblogs.com/BoYCB/p/11962015.html

时间: 2024-08-29 18:00:23

Python高级应用程序设计的相关文章

Python高级应用程序设计任务

Python高级应用程序设计任务要求 用Python实现一个面向主题的网络爬虫程序,并完成以下内容:(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台) 一.主题式网络爬虫设计方案(15分) 1.主题式网络爬虫名称 新浪微博热点话题爬虫.2.主题式网络爬虫爬取的内容与数据特征分析 爬取新浪热点话题跟阅读量.3.主题式网络爬虫设计方案概述(包括实现思路与技术难点) 先爬取页面的HTML,然后使用正则表达式爬取话题跟阅读量,再存在文件中. 二.主题页面的结构特征分析(15分)1.主

Python 高级应用程序设计任务

一.主题式网络爬虫设计方案 1.主题式网络爬虫的名称 1.1链家网站的爬取 2,主题式网络爬虫的内容与数据特征分析 2.1爬虫的内容 房源信息的名称,小区名称,价格,楼层,代理人,单价,发布时间. 2.2 数据特征分析 2.2.1对楼层做一个词云并可视化 2.2.2对发布时间做一个折线图 3,主题式网络爬虫设计方案概述(包括实现思路和技术难点) 3.1实现思路 创建一个get的类,定义get_alldata()方法用来获取网页上的全部信息,get_detail()方法用来对整数数据的进一步加工和

Python高级应用程序设计任务要求

1.案例内容简介 易车网新车信息的爬取 内容步骤: 爬取,解析(动态requests+ajax/selenium),清洗,持久化(mysql),可视化(seaborn) 2.案例分析与设计 (1) 系统框架 整个框架分为六个模块:爬虫调度器.URL管理器.HTML下载器.HTML解析器.数据存储器.数据可视化 (2) 数据库设计 用于记录奥迪汽车信息 表ad_data id Int 自增主键 name Varchar(255) 汽车名称 time_to_market Varchar(255) 上

Python高级应用程序设计任务要求(主题链家二手车)

内容简介 链家二手房成交信息(福州) 本文主要使用了multiprocessing模块创建多个进程对象,使用Queue将多个进程联系在一起,也就是线程之间的通信多个对链家的二手房进行数据的爬取,处理,存储等操作. 结构:主从模式: 主控制节点 从爬虫节点 分析与设计 系统主要核心有两大调度器 1.控制调度器 主要负责管理三个进程:一:负责将地址传递给爬虫节点,二:负责读取爬虫节点返回的数据,三:负责将数据提取进程中提交的数据进行数据持久化 2.爬虫调度器 爬虫节点主要是包括两个功能,下载html

三.python高级

三.python高级 1.元类 1.1 Python 中类方法.类实例方法.静态方法有何区别? 类方法:是类对象的方法,在定义时需要在上方使用@classmethod进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用: 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为 self,指代对象本身: 静态方法:是一个任意函数,在其上方使用@staticmethod进行装饰,可以用对象直接调用, 静态方法实际上跟该类没有太大关系 2.内存管理与垃圾回收机制 2.1 Python

面试题--python高级

第三章Python 高级 一.元类 1.Python 中类方法.类实例方法.静态方法有何区别?(2018-3-30-lxy) 类方法:是类对象的方法,在定义时需要在上方使用"@classmethod"进行装饰,形参为cls, 表示类对象,类对象和实例对象都可调用: 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为self,指代对象本身: 静态方法:是一个任意函数,在其上方使用"@staticmethod"进行装饰,可以用对象直接调用, 静态方法实际上跟

python高级编程之(类级):子类内建类型

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #类级 #在2.2中,提出了类型(type0与类(class)统一(请访问:https://www.python.org/download/releases/2.2.3/descintro(可能已经不存在了))-这使内建类型的子类化成为可能,并且添加一个新内建类型object #用于所有内建类的公共祖先 #展示一个名为distinctdict类的代码,与平常的dic

51CTO学院Python高级自动化开发工程师微职位学员自我介绍

51CTO学院Python高级自动化开发工程师微职位 自我介绍及学习宣言 亲爱的小伙伴:欢迎大家报名51CTO学院&老男孩Alex Python高级自动化开发工程师微职位学习,跟随alex.武sir学习屌炸天的python技术,成就技术大牛之梦.为了督促大家一直积极认真努力的学习,请各位同学在跟帖写出你的自我介绍.学习宣言,不忘初心,一直跟着老师一步一个脚印,扎扎实实学本领. 跟帖格式:我是xxx,我参加了51CTO学院&老男孩Alex Python高级自动化开发工程师微职位学习,从201

python高级编程:有用的设计模式2

# -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一个代价昂贵或者远程的资源提供了一个非直接访问的机制 在客户和主意之间,如图.它用来优化对高代价主题的访问,比如,在前一章中描述的memoize装饰器可以被认为是一个代理 ,它还可以用提供到一个主题智能访问,例如,大的视频文件可以封闭在代理中,以避免在用户仅仅请教其标题时就将文件载入到内存中 urllib2出给