项目文件夹

文件
2026-07-13 12:29:17 +08:00

123 行
5.6 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# Adapter: douyin-session(抖音爬取)
`/cheat-retro``state.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.md``cheat-retro` 读这个文件 → 摘要写到 prediction 复盘段)。
调试产物(URL dump / 截图)写到 `.cheat-cache/douyin-session-debug/`,避免散落在 skill 源码目录。
## 安装(一次性)
```bash
# 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 自动调用,你不需要手动跑。但如果想手动测试:
```bash
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/7234567890123456789``aweme_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_creator``max_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**——不需要全装。