
1. 抖音用户主页视频数据采集从抓包到字段落库的完整思路抖音用户主页的视频列表是很多做内容分析、账号监测、选题研究的人绕不开的一块公开数据。所谓“抖音用户主页视频数据爬虫”本质上就是模拟浏览器在用户主页上滚动加载时发出的那几次请求把返回 JSON 里的点赞、收藏、分享等互动字段解析出来再按视频维度整理成表格。它适合做运营分析、竞品观察、选题复盘的人也适合想练手接口分析的同学。我这次要讲的重点不是“怎么绕过什么”而是把公开数据的请求构造、分页游标、字段映射、结果校验这条链路讲清楚。很多人第一次抓抖音主页会卡在三个地方一是请求参数删不干净二是分页的max_cursor不知道怎么接三是拿到的字段名和页面显示对不上。下面按可复制的步骤走一遍最后给一份字段映射表和一次完整的校验动作。需要说明的是抖音主页接口返回的是公开可见的互动数据采集时请控制频率、遵守平台规则不要做高频批量请求。本文用到的请求转发与模型辅助解析能力可以通过 TaoToken 这类聚合入口来统一管理 Key后面会给出配置方式。2. TaoToken 前置准备统一管理请求与模型 Key在真正写采集脚本之前先把“请求出口”和“辅助解析”这两件事准备好。抖音主页接口对请求头、Cookie 比较敏感调试阶段经常需要反复改参数、看返回结构同时你可能还想让模型帮你把返回的 JSON 字段快速翻译成中文含义。这两件事都可以通过一个统一的 API 入口来做省得每个工具单独配一遍 Key。TaoToken 的定位是聚合式的 API 接入层官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。它的作用是让你用一套 Key 去调用不同模型同时在控制台里看调用量。对于本文这种“采集 字段解析 结果校验”的流程你可以把模型调用放在字段含义确认和异常返回分析这两个环节。具体操作上先到控制台创建 Key控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite创建完 Key 之后如果你只是想先验证模型能不能通可以直接用模型对话页面试一句模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite如果你打算长期做采集 Agent 辅助分析建议直接看 Coding Plan把额度规划好Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入文档在这里配置 Base URL 和 Model ID 时对照着填接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你用的是 Claude Code 这类命令行工具做辅助脚本生成可以参考ClaudeCodeAnthropichttps://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite这里要强调一点TaoToken 是 API 聚合入口不是让你去替代编辑器或采集工具本身。采集逻辑还是在你自己的脚本里TaoToken 负责的是模型调用这一层。把 Key 管好之后下面进入真正的请求构造环节。3. 可复制配置请求参数、分页游标与字段映射先讲请求构造。抖音用户主页的视频列表请求是一个 POST 请求核心参数里只有sec_user_id是需要从主页 URL 里提取的其余像count、max_cursor、device_platform这些都可以固定或按规则递增。sec_user_id一般出现在用户主页链接里形如https://www.douyin.com/user/MS4wLjABAAAA...后面那串就是。下面是一份可复制的请求配置用 JSON 表示你可以直接塞进脚本的 payload 里{ device_platform: webapp, aid: 6383, channel: channel_pc_web, sec_user_id: MS4wLjABAAAAxxxxxxxxxxxxxxxx, max_cursor: 0, count: 20, publish_video_strategy_type: 2, version_code: 170400, version_name: 17.4.0, cookie_enabled: true, platform: PC, downlink: 10 }请求头里最关键的是User-Agent和RefererReferer要指向该用户主页。count你设成 100 也没用接口实际返回条数由服务端控制真正决定翻页的是max_cursor。第一次请求max_cursor传 0返回体里会带一个max_cursor字段这个值就是下一次请求要传的游标同时返回体里还有has_more为 1 表示还能继续翻为 0 表示到底了。分页判断逻辑可以写成这样max_cursor 0 while True: payload[max_cursor] max_cursor resp session.post(api_url, paramspayload, headersheaders) data resp.json() for item in data.get(aweme_list, []): parse_item(item) if data.get(has_more) ! 1: break max_cursor data.get(max_cursor)字段映射是很多人对不上的地方。接口返回的aweme_list里每条视频的互动数据在statistics对象下。对照表如下页面显示接口字段路径含义点赞数statistics.digg_count点赞总量收藏数statistics.collect_count收藏总量分享数statistics.share_count分享总量评论数statistics.comment_count评论总量播放数statistics.play_count播放总量视频标题desc文案描述视频IDaweme_id唯一标识发布时间create_time时间戳如果你用模型辅助确认字段含义可以在 TaoToken 的模型对话里贴一段返回 JSON让它帮你标注每个字段。配置模型时三件套要写全Base URL 填https://taotoken.net/apiKey 填你在控制台创建的 KeyModel ID 按文档里列出的填。这三样缺一个都会报 401。4. 验证请求与成功结果一次完整抓取与校验配置好之后跑一次完整抓取来验证。下面是一段可运行的示例用requests发请求用pandas落表import requests import pandas as pd import time api_url https://www.douyin.com/aweme/v1/web/aweme/post/ headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), Referer: https://www.douyin.com/user/MS4wLjABAAAAxxxxxxxxxxxxxxxx } payload { device_platform: webapp, aid: 6383, channel: channel_pc_web, sec_user_id: MS4wLjABAAAAxxxxxxxxxxxxxxxx, max_cursor: 0, count: 20, publish_video_strategy_type: 2, version_code: 170400, version_name: 17.4.0, cookie_enabled: True, platform: PC, downlink: 10 } rows [] max_cursor 0 while True: payload[max_cursor] max_cursor resp requests.post(api_url, paramspayload, headersheaders) data resp.json() for item in data.get(aweme_list, []): stat item.get(statistics, {}) rows.append({ aweme_id: item.get(aweme_id), desc: item.get(desc), digg_count: stat.get(digg_count), collect_count: stat.get(collect_count), share_count: stat.get(share_count), comment_count: stat.get(comment_count), create_time: item.get(create_time) }) if data.get(has_more) ! 1: break max_cursor data.get(max_cursor) time.sleep(1) df pd.DataFrame(rows) df.to_excel(douyin_homepage.xlsx, indexFalse) print(f共抓取 {len(df)} 条视频)跑通之后你会看到类似输出共抓取 47 条视频同时目录下生成douyin_homepage.xlsx。打开表格第一列是视频 ID第二列是文案后面依次是点赞、收藏、分享、评论、发布时间。校验动作很简单随便挑一条视频打开它的主页对比页面显示的点赞数和表格里的digg_count是否一致。如果一致说明字段映射没错如果差很多多半是statistics路径取错了或者你拿到的是缓存数据。再校验分页看表格里视频数量是否大于单页count。如果只有 20 条说明has_more判断或max_cursor赋值有问题。正常情况下翻页会一直持续到has_more为 0。5. 常见报错排查401、local proxy failed、reading choices、OAuth采集过程中最容易撞上的几类报错这里逐个对照。401 未授权如果你在调用模型辅助解析时看到 401基本是 Key 没填对或 Base URL 写错。检查三件套Base URL 是否为https://taotoken.net/apiKey 是否从控制台复制完整Model ID 是否和文档一致。采集脚本本身的 401 则通常是 Cookie 过期重新登录拿一次 Cookie 即可。local proxy failed这个报错一般出现在你本地配了代理但代理没起来或者请求库读到了系统代理设置。检查环境变量HTTP_PROXY、HTTPS_PROXY是否指向了一个不可用的地址。如果你没主动配代理把这两个变量清空再试。reading choices 报错这类错误通常出现在解析返回体时代码假设返回一定是 JSON但实际拿到的是 HTML 或空内容。加一层判断if resp.status_code ! 200 or not resp.text.strip(): print(返回异常跳过) continue try: data resp.json() except Exception as e: print(JSON 解析失败:, e) continueOAuth 相关报错如果你用 Claude Code 或类似工具接入遇到 OAuth 报错说明认证流程没走完。参考 ClaudeCodeAnthropic 页面里的配置说明把 Base URL、Key、Model ID 三件套补齐。OAuth 报错和 API Key 报错是两套机制别混着查。另外Cookie 过期是抖音采集里最烦的问题。手动复制 Cookie 只能撑一小段时间批量采集时建议用自动化浏览器工具比如 DrissionPage在登录后自动读取 Cookie再交给请求库使用。这样每次跑之前先触发一次登录态刷新能大幅降低 401 出现的频率。6. 语义一致 CTA把采集流程沉淀成可复用能力走到这里你已经完成了从请求构造、分页处理、字段映射到结果校验的完整链路。接下来如果想让这套流程更稳可以把模型调用接进来做两件事一是自动把异常返回的 JSON 丢给模型分析原因二是把字段含义确认这一步做成固定提示词减少人工对照。模型调用统一走 TaoToken 的 API 入口Base URL 用https://taotoken.net/apiKey 在控制台创建。排障和接入相关的文档在这里API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你只是想先验证模型能不能通用模型对话页面最快模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite长期做编码和 Agent 辅助采集的话Coding Plan 更合适Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite最后给一个实用技巧把sec_user_id提取、Cookie 刷新、分页抓取、字段落表这四步拆成独立函数每次只改需要改的那一步。这样下次换一个博主你只需要换sec_user_id和Referer其余逻辑不用动。采集频率控制在每次请求间隔 1 秒以上既稳又不容易触发风控。