20172304 实验四python综合实践报告
姓名:段志轩
学号:20172304
指导教师:王志强
课程:Python程序设计
实验时间:2020年5月13日至2020年6月14日
实验分析
本次是使用python来进行软件开发,python是一个有很多库的软件,提供了很多集成式的方法,可以很方便地实现很多操作。在本次实验的伊始,不自量力地想尝试游戏开发,在网上找到了一个植物大战僵尸的python源码,不过其内容较为繁琐,于是最后没有进行学习。后来又想尝试进行象棋游戏的开发。找到了一份象棋的c++源码,想要进行学习,最后败在了c++的格式上。最后还是回归了python应用最广泛的方面————爬虫。我将目光投向了b站。bilibili目前拥有动画、番剧、国创、音乐、舞蹈、游戏、科技、生活、娱乐、鬼畜、时尚等分区,并开设直播、游戏中心、周边等业务板块,是目前国内最大的二次元综合娱乐社区平台。于是就决定八一八b站的数据。
实验设计
本次实验扒取的数据主要是b站的视频排行榜上的100个视频的相关数据。主要数据有视频AV号,视频BV号,弹幕id,作者id,作者名称,投币数,视频时长,播放量,综合评分,视频标题,重放次数等。还有就是将视频对应的弹幕扒取下来并进行简单的分析(弹幕随秒数分布图),以及弹幕组成的词云图等等。
实验实现
1.首先当然是是找到数据的来源,打开哔哩哔哩网址,点击搜索榜。
2.按下Fn+F12,进入浏览器的控制台。
3.当然,此时其内部只是一片空白,此时还需要进行刷新来重新加载数据,按下F5,你会发现新世界。
4.再点击全站标签,在Filter中输入json,你会发现名为ranking?rid=0&day=3&type=1&arc_type=0&jsonp=jsonp&callback=__jp0的一个东西,点击它,并在新生成的窗口中选择preview标签,将所有隐藏的子标签打开。你会发现所有视频的信息。
5.初步的目的就达成了,获得了可以用来爬取b站全站排行榜的网址:https://api.bilibili.com/x/web-interface/ranking?rid=0&day=3&type=1&arc_type=0
6.初步进行功能实现。
这段代码比较简单主要就是通过给定的网址获取json字符串,headers的作用主要是为了欺骗浏览器以达到伪装自己是从浏览器发出的请求。方法最后返回的是对应的json。
def get_json():
"""
从指定的url中通过requests请求携带请求头和请求体获取网页中的信息,
:return:
"""
url = 'https://api.bilibili.com/x/web-interface/ranking?rid=0&day=3&type=1&arc_type=0'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
}
res = requests.get(url,headers=headers,timeout=3)
res.raise_for_status()
res.encoding = 'zh'
page_data = res.json()
print('请求响应结果:'