抖音平台评论区分析专家
开发者:田頔
Overview
打开抖音视频或图文链接,无需登录即可抓取评论区全部顶层留言,并对评论内容做结构化分析(定位事发地、提炼观点、情感/关键词统计等)。
核心技巧:抖音网页版评论 API(/aweme/v1/web/comment/list/)在已加载页面的浏览器上下文中调用时不需要 X-Bogus / a_bogus 签名。使用 Playwright 打开页面以获得合法 cookie,再经 page.evaluate 发起同域 fetch(..., {credentials:'include'}) 即可取回 status_code:0 的真实评论。未登录(isLogin=false)也能取到顶层评论。
适用场景
- 用户提供抖音视频链接(含
douyin.com/video/<id>或短链v.douyin.com/...),要求下载、抓取、导出评论区留言。 - 要求分析评论内容:查找事发地具体地点、特定人物/事件、情感倾向、高频词、观点归纳。
- 任何需要抖音公开评论数据的研究、舆情、取证类任务。
工作流
步骤 1:提取视频 ID(aweme_id)
- 长链:
https://www.douyin.com/video/<aweme_id>直接取 19 位数字。 - 短链:
https://v.douyin.com/xxxx/需先解析 HTTP 重定向得到真实长链再提取。 - 图文/作品页:
/note/<id>、/user/<uid>等另走对应接口,本技能聚焦/video/。
步骤 2:抓取评论(核心脚本)
运行 scripts/fetch_douyin_comments.py:
python3 scripts/fetch_douyin_comments.py <aweme_id> --out comments_all.json --count 50
脚本内部流程:
- 用 Playwright(chromium, headless)加载视频页,绕过自动化检测
(--disable-blink-features=AutomationControlled+ 注入navigator.webdriver=undefined)。 - 在页面上下文内循环调用评论 API:
https://www.douyin.com/aweme/v1/web/comment/list/?aweme_id=<id>&cursor=<n>&count=50&aid=6383&device_platform=webapp&channel=channel_pc_web&version_name=7.0.0&version_code=70000 - 以返回体的
cursor字段作为下一页游标,has_more==1时继续,直到has_more==0。 - 累计结果写入
comments_all.json(结构见下)。
API 细节、字段含义、抗反爬参数见 references/douyin_api.md。
步骤 3:分析评论
运行 scripts/analyze_comments.py 或直接基于 comments_all.json 自定义分析:
python3 scripts/analyze_comments.py comments_all.json --task location
python3 scripts/analyze_comments.py comments_all.json --task stats
--task location:扫描地名关键词 + 语境词,区分"评论者 IP 省份"与"事发地陈述",输出疑似说明事发地的评论原文。--task stats:输出评论总数、IP 省份分布、点赞 Top、时间范围。
分析范式、误匹配黑名单、地点判定规则见 references/analysis_patterns.md。
输出数据结构(comments_all.json)
{
"aweme_id": "7703546701214222074",
"url": "https://www.douyin.com/video/7703546701214222074",
"count": 911,
"comments": [
{
"cid": "...",
"text": "评论正文",
"user": {"nickname": "昵称", "uid": "..."},
"ip_label": "辽宁", // 评论者 IP 归属省份,≠事发地
"digg_count": 61,
"create_time": 1793672955,
"reply_comment_total": 0
}
]
}
注意事项 / 常见坑
ip_label是评论者 IP 归属省份,不等于事发地。 分析"事发地点"时务必排除,仅当评论文本以语境词(事发、发生在、地点、现场、高速、国道…)指向某地时才视为事发地线索。- 地名正则易误匹配行业词:"揽旗/缆旗"的"旗"、"最省事"的"省"、"评论区"的"区"等。建立排除词表(见
references/analysis_patterns.md)。 - API
total含回复与过滤项:实际可取顶层评论数通常更少,以has_more==0时累计数为准。 - 仅抓顶层评论:嵌套回复(楼中楼)需用
/aweme/v1/web/comment/list/reply/接口以cid另抓;若任务要求"全部留言",额外补齐回复。 - 反爬:务必用
headless+ 关闭自动化特征 + 同源上下文调用,避免被风控拦截(返回 HTML 登录墙或空响应)。 - 稳定性:分页间隔加 0.3–0.5s 休眠;单页
count建议 20–50,过大会被截断。
Resources
scripts/fetch_douyin_comments.py— 评论抓取脚本(Playwright + 页面内 fetch)。scripts/analyze_comments.py— 评论分析脚本(地点定位 / 统计)。references/douyin_api.md— 评论 API 端点、参数、字段、抗反爬要点。references/analysis_patterns.md— 分析范式与误匹配黑名单、事发地判定规则。