短视频评论区挖真需求
把一个对标短视频的评论区变成需求侧选题矿:抓评论 → 抽问句/痛点句 → 分桶 → 拆需求 → 出选题。
一、先干三件事(别跳)
- 解析链接拿 aweme_id(抖音):
curl -s -L -A "<iPhone UA>" "https://v.douyin.com/<短码>/"看url_effective,从中抠/share/video/<aweme_id>/。 - 先探一眼量(ies 老接口,只用来看总数,不能翻页):
https://www.iesdouyin.com/web/api/v2/comment/list/?aweme_id=<id>&count=10&cursor=0→total是真评论总数。
⚠️ 该接口 cursor 传任何值都返回同一批 10 条热门评论,绝不推进,只当探路,别拿它当数据源。 - 抓全量(唯一跑通的路子,见下)。
二、抖音抓全量(核心)
Playwright + 页内 fetch 分页。页内原生 fetch 不需要 a_bogus 签名(curl 裸调必被拦),浏览器上下文的 ttwid 就够。
NODE_PATH="C:/Users/40280/.workbuddy/binaries/node/versions/22.22.2/node_modules/@playwright/cli/node_modules" \
node scripts/_douyin_paginate.js <aweme_id> 200 # 每页5条,200页≈1000条,约3~4分钟
# 产出 _dy_paginated_<id>.json(items: text/digg_count/create_time/ip_label/user/replies)
模块路径坑:npm ls -g 只有 @playwright/cli,playwright-core 在它下面的 node_modules,NODE_PATH 要指到那一层;chromium 已装在 %LOCALAPPDATA%\ms-playwright(chromium-1226)。
坑:agent-browser open <ies分享页> 会挂死不动,别用。
B 站另有 _mine_video_url.py(工作目录 Claw),无 SESSDATA 只能拿前 3 条评论,需向用户要登录态或改抓多视频凑量。
二·五、整号拉通(多视频,2026-10-04 实测跑通)
单条视频只能看到「谁在喊」,整号拉通才能看到「谁能反复喊」。 需求是否普遍,唯一判据是跨视频覆盖数。
# 1) 从任一视频页拿作者 sec_uid + 拉该号视频列表 → _dy_user_videos.json(按 aid 去重,翻页别漏)
node scripts/_dy_user_videos.js <源视频aweme_id> 40
# 2) 按评论数降序批量抓(断点续跑,写 _dy_pool.json,按 cid 去重,每跑完一个视频立即落盘)
node scripts/_dy_batch_paginate.js 20 12 # top20 视频 × 每视频≤240条,约 3.5 分钟
# 3) 爆款加挖(done 表会被跳过,深挖要用这个)
node scripts/_dy_deep.js "<aid1,aid2,aid3>" 70 # 实测三个爆款加挖 3353 条
坑位(都实测过):
- 视频列表必须按 aweme_id 去重:aweme/post 接口翻页会重复返回,out.length 会假翻倍(实测 40 里只有 20 条真货)。
- sec_uid 拿不到别硬刚 window._ROUTER_DATA:loaderData 结构会变,深度 walk 失败。直接用 document.querySelectorAll('a[href*="/user/"]') 取 href,必须过滤掉 /user/self(那是拿到的假值)。
- 评论接口 count=20 比 count=5 划算:页数减少 4 倍,速度差 3 倍。sort_type=3 按时间、sort_type=2 按热度,批量用 3 更均匀。
- cursor 推进用 (j.cursor||0)+cs.length,配合「本页空/has_more=false 就停」,别死循环。
三、抽需求
python scripts/_dy_mine.py # 单视频版:问句/痛点句 + 10 桶
python scripts/_dy_cross_mine_v2.py # 整号版:需求信号过滤 + 19 桶 + 跨视频覆盖数 → _dy_need_result.json
v2 的口径(重要,别退化成 v1):
1. 先分三类:真需求(问句/痛点自述/求资源)|高赞长文二创|回声感慨("说得太好/学习了/老师",4447 条占 83%,不是需求)。
2. 只在真需求里分桶,桶没覆盖到的进「未归类」——未归类要回头看,那里常藏新桶。
3. 打分 score = 词频 × (1+log10(1+累计赞)),同时输出「跨视频数」。出现在 ≥6 个视频的需求才配排系列。
4. 报告里把「⑨投资理财/怕踩坑」这类数据高分但不属老刘赛道的桶明确标为不排产,别被分带跑。
生成报告:python scripts/_gen_dy_report.py(把分桶数据 + 手写选题映射拼成 md)。
三·五、高层归类分析(把 19 个机械桶聚成选题大类,2026-10-04 固化)
机械分桶只是底层,真正指导内容生产的是「选题大类」。这一步把 _dy_cross_mine_v2.py 的 19 个桶(桶名即语义标签,稳定可靠)按 _need_taxonomy.json 的 bucket_hints 聚合为高层大类,并补反向信号 / 雷区 / 金矿 / 使用建议。
python scripts/_classify_needs.py [_dy_need_result.json] [_need_taxonomy.json]
# 产出 _dy_classify_result.md(大类总览 + 详情 + 反向信号 + 雷区 + 金矿 + 使用建议)
固化的大类(基于姜胡说整号验证,用户按自己赛道改 taxonomy 即可):
| 大类 | 映射的桶(片段) | 老刘赛道内? | 用途 |
|---|---|---|---|
| A 启动门槛 | 不会做/不知拍什么、年龄学历没人帮、我该做什么、条件不够、情况特殊、不敢露脸 | ✅ | 实体老板人设直接打 |
| B 时间稀缺 | 没时间/挤不出时间 | ✅ | 凌晨5点开播活案例 |
| C AI 工具焦虑 | AI给的不能用、选哪个AI、AI要花钱 | ✅ | 你 WorkBuddy 重度用户主场 |
| D 执行断层 | 道理都懂但做不到、内容太烧脑 | ✅ | 知识卡片增值飞轮正好打 |
| E 变现焦虑 | 钱从哪来/怎么变现、投资理财 | ⚠️划红线 | 用1000铁粉替代投资暴富,不碰负债翻身 |
| F 流量焦虑 | 发了没人看/流量低 | ✅ | 结合直播实操 |
| G 求带/求教程 | 求带/求教程、已动手、专栏在哪 | ✅ | 对应小报童+星球转化,结尾不引流 |
- 反向信号:⑬ 反驳/质疑桶单独成节,做选题时预判并正面回应。
- 雷区:taxonomy 的
red_flags(投资/理财/暴富/翻身/负债翻身/买课等)扫评论,命中即标「不排产」。 - 金矿:未归类里高赞(♡≥20)且不匹配任何大类的原话,常是对标没接住的空白需求。
- taxonomy 是可调配置(不写死):改
bucket_hints/keywords/in_track即可适配不同赛道;若_dy_cross_mine_v2.py改了桶名,需同步更新bucket_hints。
四、出报告(别只丢数据)
按这份骨架写 md(结论先行):
1. 样本与数据可信度(视频元信息、抓取方式、样本量、排序偏差声明、未归类里"复述型评论不算需求")
2. 需求全景表(桶 / 条数 / 代表原话 / 能不能接)
3. 真需求逐条拆(原话 → 需求本质 → 真实卡点 → 老刘的出法)
4. 评论区自撕的反向信号(信任打折、反驳、执行力自嘲)
5. 10 个可直接拍的选题(开场第一句就写好,标注对应需求桶与出口)
6. 局限与下一步
落库:写 vault IMA知识库/老刘扯蛋·内容弹药库/选题库/YYYY-MM-DD_<标题>.md,再推 GetNote(tags≤4,batch-add 归档 topic):
python scripts/_push_getnote_dy.py "<vault 里那份 md 绝对路径>" "选题挖矿,对标评论区,需求" EJl7k1j0
⚠️ 推之前必看标题提取:_push_getnote_dy.py 用 raw.split("---",2) 认 frontmatter,而 md 表格里的 |---|---| 会被误当分隔符 → 标题变 None、且查重失效重复建条。已修成「frontmatter 没就 fallback 到文件名(去日期前缀)」。改脚本时别退回去。
五、红线(老刘内容铁律,出选题时必须过)
- 不写背景:选题钩子开场直接上干货,不写身份铺垫/苦情经历。
- 第一人称只用于自己实操:别人的经历(观众自述、对标博主、连线嘉宾)只能署名转述,不能写成"我"。
- 结尾不引导:正文说完即止,不引流直播间、不往星球主题引。
- 观众自述的数据("3 年 750 粉")只当需求信号,不当事实引用,报告里要标注未核实。
- 报告里必须写清样本偏差(抓的是高赞区,长尾真实吐槽被稀释)。
六、判据自证
任何一步没输出 = 没跑,必须自证:抓到几条(items 长度)、问句几条、真需求候选几条。整号版还要自证跨视频覆盖数(每个桶出现在几个视频的评论区)。fail-safe:抓不全就写 is_partial 并说明"只拿到 X/Y",绝不伪造或拿老接口那 10 条充数。
报告末尾固定写「这次没做的」(没抓子评论、爆款长尾没抓全、只翻出 20 条视频等),不粉饰。
七、平台边界(2026-10-04 实测结论,照着抓前先看清)
- 抖音:唯一跑通「丢链接自动抓全量」的平台。页内 fetch + 浏览器 ttwid 即够,无需 a_bogus。
- B站:无登录态每视频仅前 3 条评论(
_mine_video_url.py,工作目录 Claw),需 SESSDATA 才能扩量;非主力源。 - 视频号(微信):
https://weixin.qq.com/sph/xxx跳转channels.weixin.qq.com/finder-preview,预览页不渲染评论区(末尾"可扫码前往微信观看此内容");评论接口get_comment_list实测返回 401permission verification failed,需微信登录态 + 签名,无头浏览器无 cookie 爬不了。自动抓视频号评论 = 不可行(同日实测两条不同链接均 401,墙与视频 ID 无关,是平台级权限)。 - 但分析引擎数据源无关:把视频号评论手动复制成文本,喂
scripts/_weixin_mine.py(独立适配器,结构与_dy_mine.py一致,吃_comments_input.txt:每行一条、可带赞数: 内容前缀)即可复用全部抽需求/分桶/打分逻辑。卡的是「自动抓取」,不是「分析」。 - 判据:丢链接就自动跑 = 仅抖音;视频号 = 要么手动喂评论文本,要么提供微信登录态 cookie(风险高、易失效、涉及账号,不推荐)。