逆向爬虫31 某站刷播放
目标:利用爬虫模拟某站视频播放,增加视频的播放量
思考:正常用户是如何为视频增加播放量的?进入视频播放页,点击播放按钮,视频开始播放,就会增加一个播放量。
因此我们只需要模拟点击播放按钮时,浏览器对服务器发送的数据包就可以实现增加播放量。
抓包:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a11b9d77b16741b1869d02b2c4eaf404.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Liq5bCP6buR6YWx,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
上图是点击 开始播放
后立马停止播放,浏览器发出的8个数据包,分别是以下四种类型:
now
h5
web
heartbeat
思考:只是一点击 开始播放
就发出了这么多数据包,是否这些数据包都要模拟呢?由于我们之前爬过视频网站的电影,知道视频在 持续播放
时也会源源不断地和服务器进行数据交互,我们知道持续播放视频并不会给视频增加播放量,因此当我们点击 开始播放
时,会不会也存在 持续播放
时发送的数据包呢?抱着这个疑问清空数据包,再点击一次播放按钮,让视频持续播放
抓包:
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c3d36b0e4de40a694ca0e2c87a910d2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Liq5bCP6buR6YWx,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
上图是再次点击播放按钮,播放视频10几秒后抓到的数据包,分别是:
heartbeat
web
564529090.xxx.m4s
思考:其中m4s文件应该是视频文件,heartbeat和web分别是都在前面出现过,因此点击 开始播放
按钮发出数据包是
now
h5
问题:究竟是 now数据包
导致播放量增加,还是 h5数据包
导致播放量增加,还是 now和h5两个数据包
共同作用下导致播放量增加?一般爬虫遇到这类问题的时候,只能一个一个试来找到答案。这里为了快速接近问题的答案,直接把浏览器里的 请求头
和 载荷
填入 requests
中(写死的方式),来观察结果。
模拟发送now数据包
get_play_count() # 获取当前播放量
access_now() # 发送now数据包
sleep(3) # 延时3秒
get_play_count() # 获取当前播放量
""" 输出结果
当前播放量: 136
{"code":0,"message":"0","ttl":1,"data":{"now":1650896747}}
当前播放量: 136
"""
模拟发送h5数据包
get_play_count() # 获取当前播放量
access_h5() # 发送h5数据包
sleep(3) # 延时3秒
get_play_count() # 获取当前播放量
""" 输出结果
当前播放量: 136
{"code":0,"message":"0","ttl":1}
当前播放量: 137
"""
通过尝试发现是 h5数据包
导致播放量增加,因此接下来的目标就是模拟发送 h5数据包
。
处理h5数据包的载荷
aid: 810329371 每个视频不同
cid: 564529090 每个视频不同
bvid: XXXXXXXXXX 每个视频不同
part: 1
mid: 0
lv: 0
ftime: 1650890472 时间戳
stime: 1650897031 时间戳
jsonp: jsonp
type: 3
sub_type: 0
from_spmid: 333.337.search-card.all.click
auto_continued_play: 0
refer_url: https://search.bilibili.com/all?keyword=python
from_source: webtop_search
spm_id_from: 333.1007
bsource:
spmid: 333.788.0.0
只有 aid
cid
bvid
三个参数需要处理,经过查找发现它们就在页面源代码里,正则提取即可。