Python腾讯视频弹幕抓取实战

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

弹幕URL规律分析
将第二,三, 四个请求拿出来精简
对比很容易找到规律,从第一页到第二页,timestamp值从15变到了45,第二页到第三页从45到75, target_id不变。这个规律我们可以大胆猜测这个 timestamp 值是控制页数的,并且起始值是15每30秒更 新一次。 一集视频弹幕有多少页呢?如何获取最后一个timestamp的值?这里有个小技巧,先将视频拉倒最后观 察timestamp的值是多少,然后给timestamp一个远远超出最后这个值到浏览器请求,返回数据为count值 为0,说明弹幕已经加载完。
前缀ID-2
切换不同集观察URL变化,没有什么变化都是同一个URL。
但是我们发现每一集的请求都有一个参数变化 vecIdList,仔细一看这不就是我们的后缀ID ?(注意这里使用post请求,参数是json格式)
到这里我们已经可以获取到一个完整的target_id,所有的参数以及规律都摸清楚了,已经 跃跃欲试? 别急梳理下思路。
后缀ID-1
在浏览视频页面的时候,我们发现播放视频时在播放屏右边总会显示全部集数,点击对应的集数就 会进行相应的换集跳转,所以我们有理由相信target_id相关的东西就藏在其中。
后缀ID-2
浏览页面源代码的时候我们发现HTML源码里面有这样一段JS,包含了所有集的后缀ID,从里面 面去获取会更好 (注意F2是正常的已上线的集,F0可能是脏数据或者是没上线的所以我们只需要去F2的数据即可 获取到所有的后缀ID)
思路梳理

第一步:搞清楚单集内部弹幕网址的动态变化,只需要改变timestamp 的值即可循环爬取单集所有内容。

第二步:发现不同集之间有一个参数target_id 是变量,除了 %26vid%3D 一样外,没有规律,我们将其分成前缀ID和后缀ID。

第三步:任意一集网页中都能直接找到所有剧集的后缀ID,但无法获取 前缀ID。
前缀ID-1
遗憾的是前缀ID在页面里面并没有找到,既然页面上没有,那我们再转换下思路。页面上没有那么有可能是点击跳集 的时候才请求前缀ID。播放视频F12在不同集之间切换继续观察Network的请求, 每次切换不同集的时候有一个请求 regist 进入了我们得视线点击进去看果然里面有我们需要的前缀ID。
knowledge
《Python爬虫》
腾讯视频弹幕抓取实战
—黄贵锋
爬虫一般步骤

1.明确需求

2.寻找目标URL

3.确定参数与请求方式
4.发起请求
般 5.反爬与反反爬

6.处理响wk.baidu.com结果

7.数据的持久化
目标数据
以腾讯视频《天行九歌》为例,详细解析腾讯视频弹幕爬取的细节和难点, 相对于一般电影 或者电视剧评论,弹幕都是在特定剧情下观众随性发出来的,所以弹幕能够贴合剧情,进行 更多有意思的脑洞分析。

第四步:通过分析发现,要获取前缀ID需要通过后缀ID发送请求获取, 两个ID都获取到之后拼接成 target_id=前缀ID + %26vid%3D + 后缀ID
第五步:所有参数已经获取,URL规律已经搞清楚就可以写代码了
非常感谢 您的观看
数据定位
打开腾讯是视频《天行九歌》视频随便选取一集,观察我们需要抓取的弹幕,可以明显看出来弹幕 不是在视频上的而是浮动在视频上面,而且弹幕在视频播放之后才滚动加载,所以我们大概能得出 弹幕是JS异步加载的。 按F12审查元素, 观察Network是的请求,播放开始后出现了大量请求,除了大部分图片外我们发现 了一个比较特殊的请求 "danmu" ,打开这个请求后果然这就是我们要的弹幕数据。
不同集之间URL分析
第73集精简后的URL
第72集精简后的URL
对比不同集之间的URL发现target_id值是不一样的,猜测这个target_id决定的集数。timestamp 规律 之前已经找到,这里我们将精力投入到target_id中寻找它的规律,但我们研究了几集之后发target_id 除了 %26vid%3D 这一串其他的毫无规律。 那我们现在将 target_id 分成两半,我将它们称之为前缀ID,后缀ID。但从URL上面我们是找不到有用 线索了,这时候我们必须转换思路回到页面上来。
弹幕URL规律分析
在找网址规律的时候,有一个小技巧,就是尝试暴力删掉目标网址中不影响最终结果的部分参数,再从最 精简的网址中寻找规律。 我们观察请求参数的时候注意下Request Method。这里是get请求也就是可以直接在浏览器请求URL,看 能否能拿到数据。
开始暴力删除无关参数,URL?后面拼接的参数有 callback, target_id, session_key, timestamp, _。 网址最后一串数据好像是时间戳,删了试试 ,结果不变,是无关参数。 session_key到底影不影响呢? 不知道可以删除试试。 最后精简成下面这个URL,只有target_id, timestamp两个是必须参数
相关文档
最新文档