某站视频总结,使用py-request无法通过api稳定抓取数据
首先,我先描述啊b拿ai总结的过程(如果有任何问题,请指出),抓相关包分析该过程,应该是先做了一个judge,通过judge的返回值来判断是否有请求。如果有请求,视频总结按钮变亮,点击后且获取到总结(这里包括了该视频不存在ai总结的状态)前,会返回一个包,表示在等待状态(这个是个人观点,没扒源码),继续请求api(该过程5s一次,通过抓包的wts算出)。在拿ai总结时,data中的code一直是1(应该是一个拿到总结前的等待状态,下文为了方便描述,就用“阻塞”这一说法)
已经做了judge确定有ai总结了,没带cookie(已经确定了不带cookie其实也能拿到总结),使用了代{过}{滤}理(无论是使用不同的代{过}{滤}理请求还是使用同一个代{过}{滤}理持续发送请求),api是这个
url=f"https://api.bilibili.com/x/webinterface/view/conclusion/get?bvid={bvid}&cid={cid}&up_mid{mid}&web_location=333.788&w_rid={w_rid}&wts={str(wts)}"🤔
并且通过输出的日志来看,能拿到总结的概率并不高,而且有奇怪的现象(开了多线程后,总有一定的时间多线程一起拿到总结,然后阻塞,然后再恢复,再阻塞,这里的代{过}{滤}理使用方式是一次一换,给每一个视频列表分配一个限时代{过}{滤}理来爬数据,也会出现这种情况)
使用py的requests来做抓取
对referer做随机,vd_source使用随机的uid处理得到
payload留白是模仿了 `postman` 中的写法,发现好用,没做修改
```
def get_url_summary(bvid, cid, mid, r_uid):
wts = int(time.time())
ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
hash_d = f'bvid={bvid}&cid={cid}&up_mid={mid}&web_location=333.788&wts={str(wts)}'
hash_c = "ea1db124af3c7062474693fa704f4ff8"
md5 = hashlib.md5()
md5.update((hash_d + hash_c).encode('utf-8'))
w_rid = md5.hexdigest()
url = (f"https://api.bilibili.com/x/web-interface/view/conclusion/get?"
f"bvid={bvid}&cid={cid}&up_mid={mid}&web_location=333.788"
f"&w_rid={w_rid}&wts={str(wts)}")
md5_a = hashlib.md5(bytes()).hexdigest()
headers = {
'user-agent': ua,
'referer': f"https://www.bilibili.com/video/{bvid}/?vd_source={md5_a}"
# 'cookie': cookie
}
payload = {}
return url, headers, payload
```
略去了判断部分的代码
```
url, headers, payload = get_url_summary(bvid, cid, url_mid, r_uid)
response = requests.request("GET", url, headers=headers, data=payload, proxies=proxies, timeout=10)
```
注:数据爬取只用于做数据分析 vegtbk 发表于 2024-10-18 11:22
带cookie的也有试过,单用户单线程一小会就拿不到了(拿到数据休眠2秒,没拿到休眠5秒)
https://github.com/lexiforest/curl_cffi
试试这个 多换几个浏览器指纹, 这个情况应该是典型的反爬了, 代{过}{滤}理池可能还不够 vegtbk 发表于 2024-10-18 11:01
这是返回数据,忘记贴这个了
我没有从里面发现明显的错误信息
我刚刚在b站测试了下, 纯用户情况下获取总结应该是100%成功的, 我建议带上cookie, 不用多线程再试试? 程序和界面一起观察, 看看有没有规律, 不过我估计还是反爬了, 可以试试带浏览器指纹的requests 感谢分享,以前用的集成的,现在知道原理了。 可以把返回内容打开看看, 是不是有错误内容 现在终于知道原理了 这个接口有速率限制吗 三滑稽甲苯 发表于 2024-10-18 09:42
这个接口有速率限制吗
没有发现有啥明显的速率限制,对于单个线程已经是模拟了上文提到的间隔5秒了 你很强。 BTFKM 发表于 2024-10-18 09:02
可以把返回内容打开看看, 是不是有错误内容
这是返回数据,忘记贴这个了:'(weeqw
我没有从里面发现明显的错误信息 BTFKM 发表于 2024-10-18 11:14
我刚刚在b站测试了下, 纯用户情况下获取总结应该是100%成功的, 我建议带上cookie, 不用多线程再试试? 程 ...
带cookie的也有试过,单用户单线程一小会就拿不到了(拿到数据休眠2秒,没拿到休眠5秒)
页:
[1]
2