admin 管理员组

文章数量: 887021

一、实验目的

1.掌握网络爬虫及数据分析和处理方法
2.掌握python网络爬虫的各种模块
3.掌握数据可视化方法

二、实验内容

1.爬取腾讯视频电影信息
2.处理和保存爬取的数据
3.利用pyecharts将数据可视化

三、实验过程

  1. 获取网页源代码 腾讯视频电影信息网页的网址为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. 遇到的问题

(1)在利用beautifulSoup提取信息时,运行出现错误,显示如下图所示:

上网查阅之后,显示是因为在提取时长、简介、和评分时,用了find_all()方法,用这个方法返回了一个ResultSet结果集,应该使用find()方法来提取这些标签。
(2)在爬取到所用信息后,时长会有很多空格,为了显示美观,我用了.strip()方法来处理掉首尾的空格。
(3)在用柱形图表示数据时,柱形图的纵坐标不会显示影片名,而是显示数字,后来发现是因为echarts版本的问题,安装jupyter-echarts-pypkg的0.1.1版本就可以了。
(4)在安装需要用到的各种模块时,发现利用pip install直接安装容易出现错误,很难安装成功,这种情况下,可以先在官网下载所需模块的whl文件,然后pip install whl文件的名称就可以了。

  1. 总结收获

经过这次的实验,我对于网络爬虫有了深刻的了解,这次的实验我主要用的是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!")
       



本文标签: 腾讯 数据 电影 视频 信息