一、主题式网络爬虫设计方案
1.主题式网络爬虫名称:
爬取爱奇艺电影排名
2.主题式网络爬虫爬取的内容与数据特征分析:主要爬取 爱奇艺热播电影评分
2.主题式网络爬虫爬取的内容与数据特征分析:主要爬取 爱奇艺热播电影评分
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
实现思路为先对网页源代码分析,用BeautifulSoup对数据进行清洗,最后通过进行数据可视化。技术难点主要包括对数据的清洗以及可视化。
二、主题页面的结构特征分析
1.主题页面的结构与特征分析
1.主题页面的结构与特征分析
2.Htmls页面解析
3.节点(标签)查找方法与遍历方法:find_all
三、网络爬虫程序设计
1.数据爬取与采集
#导入相关模块 import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt def getHTMLText(url): try: #用requests抓取网页信息,请求超时时间为60秒 r = requests.get(url,timeout=60) r.raise_for_status() #编码 r.encoding = r.apparent_encoding return r.text except: #判断爬取是否出错 return "爬取出错"
2.对数据进行清洗和处理
#解析电影名称 def getMovie(ulist,html): soup = BeautifulSoup(html,"html.parser") #find_all 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方法获取到电影评分 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])) # 写入excel文件 def savedata(html, filename,m,p1,p3): movies = [] for i in range(len(p1)): try: score = p1[i]+p3[i] movies.append([getMovie(m, html)[i], score]) except: "" pf = pd.DataFrame(movies, columns=["movie_name", "score"]) writer = pd.ExcelWriter(filename) pf.to_excel(writer, sheet_name="movies") writer.save() def main(): # 保存 filename = "电影评分.xlsx" # url地址 Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html" #创建一个数组m用来存放爬取到的电影名称 m = [] p1 = [] p2 = [] #P3将p1和p2的数据进行合并 p3 = [] html = getHTMLText(Url) m = getMovie(m, html) p1 = getPage1(p1, html) p2 = getPage2(p2, html) #将p1和p2的信息合并存储到p3 for i in range(len(p2)): p3.append(p2[i][1]) #打印所有爬取到的电影信息 printUnivList(m, p1, p3, len(m)) savedata(html, filename,m,p1,p3) main()
4.数据分析与可视化
import matplotlib.pyplot as plt plt.rcParams[\'font.sans-serif\']=[\'SimHei\'] #显示中文 plt.rcParams[\'axes.unicode_minus\']=False Type = [\'9分以上\', \'8分~9分\', \'7分~8分\', \'6分~7分\'] Data = [1, 8, 8, 1] plt.pie(Data ,labels=Type, autopct=\'%1.1f%%\') plt.axis(\'equal\') plt.title(\'各评分所占的比例\') plt.show() plt.bar([\'6分~7分\',\'7分~8分\',\'8分~9分\',\'9分以上\'], [1, 8, 8, 1], label="各评分所占比例") plt.legend() plt.show()
5.根据数据之间的关系,分析两个变量之间的相关系数,画出散点图,并建立变量之间的回归方程(一元或多元)
6..数据持久化
# 写入excel文件 def savedata(html, filename,m,p1,p3): movies = [] for i in range(len(p1)): try: score = p1[i]+p3[i] movies.append([getMovie(m, html)[i], score]) except: "" pf = pd.DataFrame(movies, columns=["movie_name", "score"]) writer = pd.ExcelWriter(filename) pf.to_excel(writer, sheet_name="movies") writer.save() def main(): # 保存 filename = "电影评分.xlsx" # url地址 Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html" #创建一个数组m用来存放爬取到的电影名称 m = [] p1 = [] p2 = [] #P3将p1和p2的数据进行合并 p3 = [] html = getHTMLText(Url) m = getMovie(m, html) p1 = getPage1(p1, html) p2 = getPage2(p2, html) #将p1和p2的信息合并存储到p3 for i in range(len(p2)): p3.append(p2[i][1]) #打印所有爬取到的电影信息 printUnivList(m, p1, p3, len(m)) # 数据持久化 savedata(html, filename,m,p1,p3) main()
7.将以上各部分的代码汇总,附上完整程序代码
#导入相关模块 import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt def getHTMLText(url): try: #用requests抓取网页信息,请求超时时间为60秒 r = requests.get(url,timeout=60) 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 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方法获取到电影评分 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])) # 写入excel文件 def savedata(html, filename,m,p1,p3): movies = [] for i in range(len(p1)): try: score = p1[i]+p3[i] movies.append([getMovie(m, html)[i], score]) except: "" pf = pd.DataFrame(movies, columns=["movie_name", "score"]) writer = pd.ExcelWriter(filename) pf.to_excel(writer, sheet_name="movies") writer.save() def main(): # 保存 filename = "电影评分.xlsx" # url地址 Url = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html" #创建一个数组m用来存放爬取到的电影名称 m = [] p1 = [] p2 = [] #P3将p1和p2的数据进行合并 p3 = [] html = getHTMLText(Url) m = getMovie(m, html) p1 = getPage1(p1, html) p2 = getPage2(p2, html) #将p1和p2的信息合并存储到p3 for i in range(len(p2)): p3.append(p2[i][1]) #打印所有爬取到的电影信息 printUnivList(m, p1, p3, len(m)) # 数据持久化 savedata(html, filename,m,p1,p3) main() import matplotlib.pyplot as plt plt.rcParams[\'font.sans-serif\']=[\'SimHei\'] #显示中文 plt.rcParams[\'axes.unicode_minus\']=False Type = [\'9分以上\', \'8分~9分\', \'7分~8分\', \'6分~7分\'] Data = [1, 8, 8, 1] plt.pie(Data ,labels=Type, autopct=\'%1.1f%%\') plt.axis(\'equal\') plt.title(\'各评分所占的比例\') plt.show() plt.bar([\'6分~7分\',\'7分~8分\',\'8分~9分\',\'9分以上\'], [1, 8, 8, 1], label="各评分所占比例") plt.legend() plt.show()
四、结论
1.经过对主题数据的分析与可视化,可以得到哪些结论?
可以直观的看到热播电影的评分情况
2.对本次程序设计任务完成的情况做一个简单的小结
在完成本次程序设计任务的过程中,巩固了以前学习的知识,学会了以前没有掌握的,对该课程也有了更大的兴趣。