[Python]爬取腾讯视频弹幕

1、数据定位:

打开腾讯视频的电视剧(这里以《2019主持人大赛》为例),F12审查元素,默默的等待目标猎物出现,因为弹幕是播放时不断滚动出现,所以我们先假设它在JS下。
正片开始后,一群以“danmu"为开头的请求不断加载打破了短暂的平静,我们把这个疑似目标预览一下:在这里插入图片描述果然,弹幕内容赫然在列,对于我们分析有用的字段还有弹幕的ID,upcount(点赞数),opername(用户名)和uservip_degree(会员等级)。到这一步,我们先不纠结于这个JSON文件要如何伪装访问,如何解析,不妨先找规律

2、弹幕网址规律分析:

在找网址规律的时候,有一个小技巧,就是尝试暴力删掉目标网址中不影响最终结果的部分参数,再从最精简的网址中寻找规律。
拿我们第一个弹幕网址来说,原网址是这样的:
https://mfm.video.qq.com/danmu?otype=json&callback=jQuery191011119834709233978_1573883001085&target_id=4392478023%26vid%3Dr0032phh6d2&session_key=103697%2C2361%2C1573883002&timestamp=5325&_=1573883001101

在浏览器中打开是这样的:
在这里插入图片描述删到最后,我们把原网址精简成了下面的网址:

https://mfm.video.qq.com/danmu?otype=json&timestamp=5325&target_id=4392478023%26vid%3Dr0032phh6d2

我们把第二页网址也精简一下:

https://mfm.video.qq.com/danmu?otype=json&timestamp=5355&target_id=4392478023%26vid%3Dr0032phh6d2

对比很容易找到规律,从第一页到第二页,timestamp值从5325变到了5355,其他部分没有任何变化,我有一个大胆的猜测,这个timestamp值是控制页数的变量,并且是30秒更新一次弹幕。
那一级有多少页呢?整个过程,我们只需要构造步长为30的循环变量来替换timestamp参数就可以实现批量访问了,直到访问不到数据意味着视频结束了。

3、解析单页弹幕内容

以第一集第一页的弹幕为例,我们只进行简单的headers伪装,进行访问尝试:
OK,接下来遍历提取我们需要的关键数据:
在这里插入图片描述
要进行多页爬取,只需要在外层构造一个循环,以30为步长改变timestamp的变量即可。

4、不同集之间网址规律探究

单页、单集的规律都搞清楚了,那不同集之间的网址有什么规律呢?
发现是target_id值和%3D后面一串ID,而难点就在于他们之间没有像timestamp那样明显的规律可循,弹幕内容所在的网址本身又没有任何关于两个ID的信息,所以只能每次都打开浏览器找一下ID了。

发布了84 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_36254699/article/details/103098328