admin 管理员组文章数量: 887021
一、实验目的
1.掌握网络爬虫及数据分析和处理方法
2.掌握python网络爬虫的各种模块
3.掌握数据可视化方法
二、实验内容
1.爬取腾讯视频电影信息
2.处理和保存爬取的数据
3.利用pyecharts将数据可视化
三、实验过程
- 获取网页源代码 腾讯视频电影信息网页的网址为https://v.qq/channel/movie
实现代码如下
运行之后可以看到网页的源代码如下
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/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/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!")
版权声明:本文标题:Python爬取腾讯视频电影信息 并进行数据可视化 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726450627h962127.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论