抖音抓取不全的max_pages及cookies设置
抖音抓取不全的max_pages及cookies设置
0725版本在抓取少量作者页面内容时没有问题,待抓取某290个作品的主页时出现403报错,且仅呈现145个作品。
这其中包含两个问题:403报错是因为关键cookie缺失;未呈现全部作品则因为max_pages原来仅设置为8,就是翻8页,大概也就是145个作品。
先解决403报错的问题
403 错误通常意味着:
- Cookies 过期或关键 Cookie 缺失(如
ttwid、msToken) - 请求签名失效(X-Bogus 或 a-bogus 未正确生成)
- 请求频率过高触发了风控
🔧 解决方案
1. 更新 Cookies(最重要)
从浏览器重新获取完整的 Cookie 字符串,特别是确保以下关键字段存在且有效:
ttwidmsTokenodin_ttpassport_csrf_token
在 Chrome 中按 F12 → Application → Cookies → https://www.douyin.com,逐个检查这些字段是否存在。
复制所有 Cookie:在 Cookie 列表上方有一个过滤框,旁边有导出按钮;或者使用控制台输入(在输入此命令前,可能需要先输入allow pasting才能允许粘贴命令):
1 | document.cookie |
手动编辑 config.yml,将 document.cookie 输出的内容按格式填入
根据运行提示,Cookies中始终缺少msToken,这个字段极其关键——它是抖音 Web 端 API 的签名令牌,没有它几乎所有请求都会被拒绝。
而且,msToken 不是存储在 document.cookie 中的,它是通过 JavaScript 动态生成并存储在 localStorage 中的。
对于 msToken,可以用控制台生成(随机字符串法,可临时使用):
1 | // 在抖音页面控制台执行 |
获取真实 msToken 的方法:
在抖音页面控制台执行:
1 | // 查看 localStorage 中的真实 msToken |
如果返回 null,说明还没有生成。访问几个抖音页面后,它会自动生成。
再来修改config.yml文件(默认如下所示):
config.yml 文件存在严重的格式错误!YAML 对缩进和引号非常敏感。当前格式会导致解析失败。
🔧 修复后的正确 config.yml
用以下内容完全替换你的 config.yml:
1 | cookies: |
📋 还需要手动补充的 Cookie
文件中缺少以下关键字段(它们都是 httpOnly 的,需要从浏览器手动获取):
- 打开 Chrome,进入抖音并登录
F12→Application→Cookies→https://www.douyin.com- 逐一双击复制以下字段的 Value:
| 字段 | 必须 | 说明 |
|---|---|---|
ttwid |
✅ 必须 | 设备标识 |
odin_tt |
✅ 必须 | 用户标识 |
sessionid |
✅ 必须 | 会话ID |
sid_guard |
推荐 | 会话保护 |
将复制的值填入上面 config.yml 的对应位置(替换空引号 "")
在 YAML 中,字符串值无论是否带引号,效果是一样的。
1
2
3
4 # 以下三种写法完全等价:
ttwid: abc123
ttwid: "abc123"
ttwid: 'abc123'📋 YAML 中引号的规则
情况 是否需要引号 示例 纯数字和字母 ❌ 不需要 ttwid: abc123包含特殊字符(如 %、/、:)✅ 需要 odin_tt: "abc%2Fdef"以数字开头 ✅ 需要 sessionid: "123abc"包含空格 ✅ 需要 name: "hello world"
🔧 如何快速填充 config.yml
最简单的方法:用浏览器开发者工具复制
- 打开 Chrome,进入抖音并登录
- 按
F12→Application(应用程序)→Cookies→https://www.douyin.com- 在 Cookie 列表中,逐一双击以下字段的 Value 列,复制值:
字段 是否必须 如何获取 msToken✅ 必须 从 Cookie 列表复制,或在控制台执行特殊命令 ttwid✅ 必须 从 Cookie 列表复制 odin_tt✅ 必须 从 Cookie 列表复制 sessionid✅ 必须 从 Cookie 列表复制 sid_guard推荐 从 Cookie 列表复制 passport_csrf_token✅ 必须 从 Cookie 列表复制 passport_csrf_token_default可选 同上 passport_assist_user可选 同上 passport_auth_mix_state可选 同上 csrf_session_id可选 同上 UIFID可选 同上 s_v_web_id可选 同上 __ac_nonce可选 同上 __ac_signature可选 同上 核心必须项:
msToken、ttwid、odin_tt、sessionid、passport_csrf_token
🚀 最快填充方法
在抖音页面的控制台(F12 → Console)执行以下命令:
1
2
3
4
5
6
7
8
9
10
11
12
13 // 一次性复制所有关键 Cookie 为 JSON 格式
var keys = ['ttwid', 'odin_tt', 'sessionid', 'sid_guard', 'passport_csrf_token',
'passport_csrf_token_default', 'passport_assist_user',
'passport_auth_mix_state', 'csrf_session_id', 'UIFID',
's_v_web_id', '__ac_nonce', '__ac_signature'];
var result = {};
document.cookie.split(';').forEach(function(c) {
var parts = c.trim().split('=');
if (parts.length >= 2 && keys.indexOf(parts[0]) !== -1) {
result[parts[0]] = parts.slice(1).join('=');
}
});
console.log(JSON.stringify(result, null, 2));执行后会输出一个 JSON 格式的关键 Cookie 列表,你可以复制这些值填入
config.yml。
注意:尽管如上修改了config.yml文件的内容格式,运行程序后仍会变成如上图的原始格式,但没关系,运行正常,该填的参数都已经开始运作。
2. 增加延迟、减少页数
修改 __init__ 中的反风控参数:
1 | # 在 __init__ 中修改 |
此为反风控措施,实际上为了解决翻页和作者主页全部作品显示的问题,还要反过来增加这个数值。
3. 添加重试间隔
在 fetch_tab_data 的异常处理中增加更长的等待:
1 | except Exception as e: |
4. 检查 config.yml 中是否有 proxy
如果有代理可用,添加:
1 | proxy: "http://127.0.0.1:7890" |
再来解决多作品同时抓取(翻页)的问题
🔧 可能的原因和解决方案
max_pages 太小
你的设置是 max_pages = 5,每页约 18 条,最多获取 90 条。如果作者有 150 个作品,就会少 60 条。
解决: 临时增大 max_pages(注意风控):
1 | self.max_pages = 10 # 从 5 改为 10,实际上为了下载完整的290个作品,改成了16 |
增大翻页限制并改进翻页逻辑
在 __init__ 中修改:
1 | # 反风控参数 |
仍在0725基础上进行修改,完美解决上述两个问题!


