想批量拿关注 UP 主的新视频,逐个 UP 主、逐个视频调接口,几百次请求直接撞 412 风控;就算拿到数据,cookie 还会被 requests 二次编解码搞成"账号未登录"。这个仓库给的是聚合接口 + 手动原始 cookie 的稳妥打法。
| 逐个遍历 | 本仓库 |
|---|---|
| 拿 400 条视频要约 1020 次请求 | 聚合接口约 20 次翻页拿全 |
| 高频请求极易触发 412 | 单次翻页、间隔 ≥2s,风险低 |
Session.cookies.set() 导致 -101 |
Header 直传原始 %2C 编码 cookie |
| 字幕接口串台 | 用 x/player/wbi/v2 + wbi 签名 |
还在调 /x/feed/follow |
已废弃 404,换聚合端点 |
关注动态聚合接口 feed/all(type=video)
↓
每页 20 条,offset 游标翻页(间隔 ≥2s)
↓
取 bvid/title/play/danmaku 等字段
↓
缺 pubdate 时补调 /x/web-interface/view?bvid=
- 主力端点:
GET https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all - 翻页实测:20 页 / 400 条仍
has_more=True;约 20 次 vs 遍历约 1020 次 - 风控:请求间隔 ≥2s,遇 412 按 10/20/30s 退避
- cookie:SESSDATA 是核心(过期返回
-101 账号未登录),bili_jct 用于写操作
import requests
SESSDATA = '52819ffd%2C1801827161%2C...' # 保持原始 %2C 编码,勿让 Session 二次编码
raw_cookie = f'SESSDATA={SESSDATA}; bili_jct={BILI_JCT}; buvid3={BUVID3}; DedeUserID={DedeUserID}'
resp = requests.get(
'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all',
params={'type': 'video', 'page': 1},
headers={'Cookie': raw_cookie, 'User-Agent': 'Mozilla/5.0 ...',
'Referer': 'https://www.bilibili.com/'})更多实测见 references/feed-api-test-results.md 与 references/browser-console-fallback.md。
MIT
