赞
踩
一、实验目的
1.掌握网络爬虫及数据分析和处理方法
2.掌握python网络爬虫的各种模块
3.掌握数据可视化方法
二、实验内容
1.爬取腾讯视频电影信息
2.处理和保存爬取的数据
3.利用pyecharts将数据可视化
三、实验过程
实现代码如下
运行之后可以看到网页的源代码如下
2.分析网页,提取数据。
我选择的是影片名、链接、时长、简介、评分这些信息。
代码如下
运行结果如下图
3.用html文件保存爬取到的数据。这里用到了html的相关知识
代码如下
运行之后会在相对路径生成一个data.html文件,打开之后如下图所示 点击链接会跳转到影片播放界面
4.数据可视化。利用pyecharts图表库生成图表。确定影片名和评分这些数据可以用来可视化,生成电影评分排行榜(柱状图),将数据的基础信息放进一个list,引入pyecharts库。
关键代码如下图
运行之后会在相对路径下生成一个bar.html 打开之后结果如下图
四、实验知识学习
pyecharts 是一个用于生成 Echarts 图表的类库。Echarts是百度开源的一个数据可视化 JS 库。ECharts是一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的Canvas类库ZRender,提供直观、生动、可交互、可高度个性化定制的数据可视化图表。ECharts提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap,多维数据可视化的平行坐标,还有用于BI的漏斗图、仪表盘,并且支持图与图之间的混搭。
五、实验总结
(1)在利用beautifulSoup提取信息时,运行出现错误,显示如下图所示:
上网查阅之后,显示是因为在提取时长、简介、和评分时,用了find_all()方法,用这个方法返回了一个ResultSet结果集,应该使用find()方法来提取这些标签。
(2)在爬取到所用信息后,时长会有很多空格,为了显示美观,我用了.strip()方法来处理掉首尾的空格。
(3)在用柱形图表示数据时,柱形图的纵坐标不会显示影片名,而是显示数字,后来发现是因为echarts版本的问题,安装jupyter-echarts-pypkg的0.1.1版本就可以了。
(4)在安装需要用到的各种模块时,发现利用pip install直接安装容易出现错误,很难安装成功,这种情况下,可以先在官网下载所需模块的whl文件,然后pip install whl文件的名称就可以了。
经过这次的实验,我对于网络爬虫有了深刻的了解,这次的实验我主要用的是beautifulSoup和pyecharts库,利用这些,我成功爬取了网页数据并对数据进行可视化分析,以图表的形式展现出爬取的信息。
六、代码
import requests from bs4 import BeautifulSoup from pyecharts import Page,Bar url = "https://v.qq.com/channel/movie" response = requests.get(url) #print(response.content.decode('utf-8')) html = response.content.decode('utf-8') #初始化BeautifulSoup soup = BeautifulSoup(html,'lxml') #找到包含所有影片的div all_movie = soup.find('div',class_='mod_bd cf _quickopen _quickopen_duration') html_file = open('data.html','w',encoding='utf-8') html_file.write(""" <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>腾讯视频首播影院电影信息</title> <link href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <h2 class="text-center">腾讯视频首播影院电影信息</h2> <table class="table table-striped table-hover mx-auto text-center"> <thead> <tr> <th>影片名</th> <th>链接</th> <th>时长</th> <th>简介</th> <th>评分</th> </tr> </thead> <tbody> """) all_movie_info=[] for each_movie in all_movie.find_all('div',class_='list_item'): all_a_tag = each_movie.find_all('a') movie_name = all_a_tag[1].text movie_href = all_a_tag[0]['href'] movie_time = each_movie.find('div',class_='figure_caption').text.strip() movie_intro = each_movie.find('div',class_='figure_desc').text movie_score = each_movie.find('div',class_='figure_score').text #print('名字:{},链接:{},时长:{},简介:{},评分:{}'.format( #movie_name,movie_href,movie_time,movie_intro,movie_score)) all_movie_info.append({'name':movie_name,'score':movie_score}) all_name = [i['name'] for i in all_movie_info] all_score = [i['score'] for i in all_movie_info] score_rank_bar = Bar('电影评分排行榜') score_rank_bar.add('',all_name,all_score,is_convert=True,is_label_show=True,label_pos='right') score_rank_bar.render('bar.html') html_file.write(""" <tr> <td>{}</td> <td><a href="{}">{}</a></td> <td>{}</td> <td>{}</td> <td>{}</td> </tr> """.format(movie_name,movie_href,movie_href,movie_time, movie_intro, movie_score)) html_file.write(""" </tbody> </table> </body> </html> """) html_file.close() print("write_finished!")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。