吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 852|回复: 11
收起左侧

[新手问题] 某站视频总结,使用py-request无法通过api稳定抓取数据

[复制链接]
vegtbk 发表于 2024-10-18 01:26

首先,我先描述啊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([int(x) for x in str(r_uid)])).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)

注:数据爬取只用于做数据分析

截屏2024-10-18 01.15.43.png
截屏2024-10-18 01.12.29.png
截屏2024-10-18 01.11.32.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

BTFKM 发表于 2024-10-18 11:28
vegtbk 发表于 2024-10-18 11:22
带cookie的也有试过,单用户单线程一小会就拿不到了(拿到数据休眠2秒,没拿到休眠5秒)

https://github.com/lexiforest/curl_cffi

试试这个 多换几个浏览器指纹, 这个情况应该是典型的反爬了, 代{过}{滤}理池可能还不够

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
vegtbk + 1 + 1 我很赞同!

查看全部评分

BTFKM 发表于 2024-10-18 11:14
vegtbk 发表于 2024-10-18 11:01
这是返回数据,忘记贴这个了
我没有从里面发现明显的错误信息

我刚刚在b站测试了下, 纯用户情况下获取总结应该是100%成功的, 我建议带上cookie, 不用多线程再试试? 程序和界面一起观察, 看看有没有规律, 不过我估计还是反爬了, 可以试试带浏览器指纹的requests
cuimen 发表于 2024-10-18 08:49
感谢分享,以前用的集成的,现在知道原理了。
BTFKM 发表于 2024-10-18 09:02
可以把返回内容打开看看, 是不是有错误内容
CoinsBtc 发表于 2024-10-18 09:09
现在终于知道原理了
三滑稽甲苯 发表于 2024-10-18 09:42
这个接口有速率限制吗
 楼主| vegtbk 发表于 2024-10-18 10:59
三滑稽甲苯 发表于 2024-10-18 09:42
这个接口有速率限制吗

没有发现有啥明显的速率限制,对于单个线程已经是模拟了上文提到的间隔5秒了
Do_zh 发表于 2024-10-18 10:59
你很强。
 楼主| vegtbk 发表于 2024-10-18 11:01
BTFKM 发表于 2024-10-18 09:02
可以把返回内容打开看看, 是不是有错误内容

这是返回数据,忘记贴这个了
我没有从里面发现明显的错误信息
截屏2024-10-18 11.00.43.png
 楼主| vegtbk 发表于 2024-10-18 11:22
BTFKM 发表于 2024-10-18 11:14
我刚刚在b站测试了下, 纯用户情况下获取总结应该是100%成功的, 我建议带上cookie, 不用多线程再试试? 程 ...

带cookie的也有试过,单用户单线程一小会就拿不到了(拿到数据休眠2秒,没拿到休眠5秒)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 18:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表