Files

Adapter: douyin-session(抖音爬取)

/cheat-retrostate.data_collection=adapter + platform=douyin 时自动调用。

来源:照搬自参考博主项目(私有)的 crawler.py / review.py / renderer.py——已在中文观点视频博主账号上跑了 25+ 视频验证。


这个 adapter 是干嘛的

抖音视频页是强 JS 渲染 + XHR 加载评论 + 反爬严重——不带浏览器引擎和登录态的方案(比如 Claude 的 WebFetch、Python requests)拿不到任何数据。

douyin-session 用 Playwright + 持久化 Chromium context 模拟真实浏览器:

  • 你首次扫码登录抖音创作者中心,cookie 存在你的内容项目根目录 .auth/
  • 之后每次抓取直接复用 cookie,不用重新登录
  • 拦截抖音前端的 XHR responses 直接抓数据接口的 JSON(不解析 HTML)
  • 抓 3 类数据:视频列表 / 详细数据(完播 / 转粉率)/ 评论

输出写到你的内容项目 videos/<...>/report.mdcheat-retro 读这个文件 → 摘要写到 prediction 复盘段)。 调试产物(URL dump / 截图)写到 .cheat-cache/douyin-session-debug/,避免散落在 skill 源码目录。

安装(一次性)

# 1. 进你的内容项目根目录
cd ~/my-channel

# 2. 建虚拟环境(强烈建议——Playwright + Chromium 几百 MB,别污染 system Python
python3 -m venv .venv
source .venv/bin/activate

# 3. 装 Playwright
pip install playwright>=1.44

# 4. 装 Chromium(首次必须)
playwright install chromium

# 5. 首次扫码登录抖音创作者中心
ADAPTER=$(find ~/.claude/skills -name "douyin-session" -type d 2>/dev/null | head -1)
# 如找不到(可能 adapter 不在全局),用源码路径:
# ADAPTER="$HOME/Desktop/cheat-test/cheat-on-content/adapters/perf-data/douyin-session"
python "$ADAPTER/crawler.py" login
# → 弹出 Chromium 窗口,扫码登录创作者中心
# → 登录成功后窗口自动关闭,cookie 存在 当前目录/.auth/

用法

cheat-retro 自动调用,你不需要手动跑。但如果想手动测试:

cd ~/my-channel
source .venv/bin/activate

# 列最近视频(看登录态有没有失效)
python "$ADAPTER/crawler.py" list

# 抓特定视频
python "$ADAPTER/review.py" video <aweme_id> <video_folder>/script.md

# 输出在 当前目录/videos/<日期>_<title>/report.md

怎么拿到 aweme_id

抖音视频 URL 形态:

  • https://www.douyin.com/video/7234567890123456789aweme_id = 7234567890123456789(直接在 URL 路径里)
  • https://v.douyin.com/abc123 → 短链需要 resolvecheat-publish 自动做)

cheat-publish 会在登记发布时把 aweme_id 存到 prediction header(如能 resolve)。cheat-retro 启动时直接读这个字段。

report.md 输出格式

renderer.py 生成。包含:

  • 视频元信息(标题、发布时间、时长)
  • 数据快照(播放、点赞、评论、转发、收藏 + 派生比率:赞播比 / 评播比 / 分播比)
  • 完播率 / 3s 留存(如能抓到)
  • Top 20 评论(按赞数排序,含评论文本 + 赞数)
  • 评论关键词聚类(renderer 自动做,可选)

失败模式(按概率从高到低)

症状 原因 处理
ensure_login 超时 cookie 过期或抖音强制 reauth 重新跑 python crawler.py login
_parse_video_list 返回空 抖音改了接口字段——结构性变化 .debug/creator_urls.txt 抓到的 URL,更新 crawler.py 的字段兜底
_parse_video_list 视频列表不全 翻页没抓到——网络慢或反爬触发 调高 crawler.py 里的 await asyncio.sleep(...) 时长
Chromium 崩溃 / 卡死 通常是机器内存不足 关闭其他 Chromium 进程;playwright install chromium --force 重装
评论抓取慢(>5min 评论页 XHR 多次滚动触发——慢网络 调小 fetch_comments_creatormax_pages,或换更稳的网络

关键现实:抖音接口结构每隔几个月会变一次。这个 adapter 需要持续维护——如果有一天它突然失败,第一步是去看 视频分析 项目最新的 crawler.py 看有没有新版本。

稳定性等级

★★ — Playwright 方案能扛比纯 HTTP 强得多的反爬,但仍受抖音前端改版影响。建议每月手动跑一次 crawler.py list 验证健康。

风险提示

  • 冷启动用户慎装Playwright + Chromium 体积大(~500MB),新人容易劝退
  • TOS 风险:用自己的 cookie 抓自己后台数据是个人用途;别滥用
  • 不要把 .auth/ 提交到 git:cookie 里有你的会话凭据,泄露 = 他人能登录你的抖音账号
  • .cheat-cache/douyin-session-debug/ 也不应提交到 git:里面可能含调试截图和接口 URL dump

文件清单

adapters/perf-data/douyin-session/
├── README.md           # 本文件
├── requirements.txt    # playwright>=1.44
├── crawler.py          # 抓取核心(视频列表 / 详细数据 / 评论)
├── review.py           # CLI 入口(交互式或 video <aweme_id> 模式)
├── renderer.py         # 把抓回的 JSON 渲染成 report.md
└── run.sh              # cheat-retro 调用的 wrapper

与其他 adapter 的关系

  • youtube-data-api(待)— YouTube 用官方 API,不需要 Playwright,更轻
  • bilibili-stat(待)— B 站官方 stat 接口公开,也不需要 Playwright
  • xhs-explore — 小红书,已实现(同样走 Playwright 被动拦截路线,照搬自本 adapter)

如果你做多平台内容,只装你实际用的 adapter——不需要全装。