一句话是什么:找到一个新号源、判断它值不值得抓,旧法是「先入库 → 等 7 天抓取 → 看 DB 产出」才知道好坏——这套翻过车(把刚入库、评论还没抓进来的活号误判成死号)。新方法把这道判断闸门往前挪到入库前:用本机 f2(国内 IP 直连抖音)实拉候选号最新视频的真实评论,分钟级看清「现在还能不能挖到新评论 / 评论里有没有装修意向」,再决定入不入、入了优先抓谁。
0→1 怎么实现(五步闭环):
keywords-master.json 每天自动选 5 词(母表长什么样、例词见下方「选词母表长什么样」)。:9222,原始 CDP websocket 开搜索页滚动触发 discover/search 接口、取响应体里的 sec_uid。弃 playwright(Chrome149 上 connect_over_cdp 静默捞 0、时灵时不灵)。f2(httpx 签名)串行拉每个号最近视频的评论数 / 活跃度两个真信号:avg_comments(avgC) = 拉这个号最近 10 条视频、每条评论数取平均(实拉最多 20 条、取最近 10 条算整体均值;avgC7/avgC30 是这 10 条里落在近 7 天 / 30 天窗口内的子集)= 评论池多大 = 能挖多少潜客(例:一口的装修日记 avgC 40198);posts_30d(p30) = 近 30 天发了几条视频 = 还更不更新;p30=0 = 休眠号(历史火、现在不更、挖不动),高 avgC + p30=0 是典型「死矿」要剔。source_accounts(一律 tier0)→ 自动排 T+7 提醒 → 回写关键词产量 → 重生成监控页。2026-06-21 起入库不再标 tier1——高 avgC 是伪信号,tier1 只由 auto-tier1 cron 按「近 10 天真实产出高+中≥10」自动升。怎么批量化(脚本流水线,一条命令一步):
# ① 选词:母表自动选 5 词 pick-keywords # ② 捞作者:批量捞 ~100 作者(raw-CDP) harvest-search-authors # ③ 富化:f2 串行实拉(conc=1,不能并发) enrich-candidates # ④ 分桶:按标准自动分桶(自动入 / 人工确认 / 否决) source-mining-split # ⑤ 入库:批量写 source_accounts import-douyin-search # 收尾(自动):排 T+7 + keyword-yield-writeback 回写产量 + build-source-evolution 重生成监控页
新旧拉取法对比:
| 旧法(入库后验证) | 新法(入库前 f2 实拉) | |
|---|---|---|
| 闸门位置 | 入库 → 等 7 天抓取 → 看 DB 产出 | 入库前分钟级实拉真评论打分 |
| 栽过的坑 | ① 0 评论误判(老视频 + 24h 窗口) ② 名字分误杀(搜索源无 follower → 扣到 −5,如「一只芋圆仔」−5 实为 avgC 4 万矿) ③ DB 滞后当死号 | 入库前就看清活不活、在不在题 |
| 转热率 | 6/4 B2B 批量进(未实拉)0.3%(1/388) | f2 实拉验证 17%(30/178)= ~50 倍 |
| 采集口 | 东京 worker(被 WAF 封) | 本机 f2(国内 IP 直连;美国 IP 走 seed-ttwid 绕法) |
母表 = scripts/chanmama/keywords-master.json,6 维度 57 词的选词主表。每天 pick-keywords 跨维度自动挑 5 词,避免老盯一个维度。每词带产量字段(times_used / total_authors / total_new / total_imported / new_rate),跑完 keyword-yield-writeback 回写真实产出,越用越准——新率低又用过多次的词自动退役。
| 维度 | 词数 | 例词(真实母表) |
|---|---|---|
| 内容形式 | 12 | 装修日记 / 装修vlog / 装修记录 / 晒新家 / 我的家 / 晒家 … |
| 全屋定制 | 16 | 全屋定制 / 定制衣柜 / 橱柜定制 / 榻榻米定制 / 玄关柜 / 护墙板 … |
| 房屋类型 | 10 | 小户型改造 / 二手房翻新 / 出租屋改造 / 婚房装修 / 大平层装修 / 复式装修 … |
| 装修阶段 | 8 | 新房装修 / 毛坯改造 / 拆改 / 水电改造 / 硬装 / 软装搭配 … |
| 风格 | 7 | 奶油风装修 / 原木风装修 / 中古风装修 / 侘寂风装修 / 法式装修 / 新中式装修 … |
| 地域 | 4 | 成都装修 / 武汉装修 / 西安装修 / 郑州装修 |
total_new / total_authors = 本批捞到的作者里「不在 source_accounts 库」的比例。⚠️ 新率高 ≠ 可入库率高——「新」只是没入过库,能不能入还要过下方的 avgC 落库门(6/18「晒家」新率 0.92 但 total_imported=0 就是这原因)。新率 <20% 且用 ≥2 次的词自动退役。富化实拉出 avgC / p30 后,source-mining-split 按下表把候选自动分成三桶;自动入的一律 tier0(2026-06-21 起不再按 avgC top-N 标 tier1,那是伪信号;tier1 交给 auto-tier1 cron 按真实产出升)。阈值是代码里的硬判定(scripts/chanmama/source-mining-split.ts),不是人拍脑袋。
装修日记 / 晒家 / 晒新家 / 我家 / 新家 / 小户型 / 懒人 / 装修日常 / 住进 / 入住 / 改造 / 二房 / 顶楼 / 复式 / loft / 自装 / 装修中 / 装修ing / 新房 / 毛坯 / 户型 / 的家。同行号=命中排除正则:工厂 / 品牌 / 定制公司 / 建材 / 装饰公司 / 装企 / 招商 / 加盟 / 代理 / 厂家直 / 源头 / 批发 / 官方号(设计师个人不算同行)。SCRAPE_RECENT_COMMENT_HOURS=720;默认 24h 会把几天前视频的评论滤成 0、误判死号),每条视频取 f2 返回的评论(一页,不额外截断)——再喂 AI 打 0–100 分,按「号」汇总:高意向 = 该号这 3 条视频实拉评论里 ≥80 分的条数;可触达 = ≥60 分(高+中)的条数。是这个号3 条视频所有实拉评论的合计,不是某一条视频下的数。status≠contacted 的人数。同名不同义,别混。| 桶 | 判定条件(满足即归此桶,从上往下短路) | 处置 |
|---|---|---|
| 否决 reject | ① 同行号(号名命中上面的排除正则) ② avgC < 落库门:avgC=最近 10 条视频的评论数均值,门槛默认 150、2026-06-20 fanny 拍板下调到 60(配 --min-score 0 剔同行负分号)——这一条就是「落库门」本身,6/20 改的就是这个数字(150 太严:search 出的作者几乎全 total_imported=0,60 能捞回「正在装修」的活跃业主号)③ p30=0(近 30 天 0 条新视频)→ 没有新视频产出 = 评论池基本不再刷新(机械判定是「0 新视频」;「挖不到新评论」是据此推断,老视频只剩零星滴漏) ④ 实拉过但 0 可触达=该号评论拉到了、打分后 0 条 ≥60(是「拉到了但没买家意向」,不是拉不到、更不是 DM 没发出;拉不到的号不进打分表、走「未实拉」路径) | 不入 |
| 自动入 auto_import | 脉命中(号名含业主脉)且 已过 avgC 闸 + p30>0 且: · 实拉过的号(实拉 = 拉该号最近 3 条视频的评论、开 30 天时间窗)→ 高意向 ≥1 条 或 可触达 ≥3 条(即这 3 条视频评论里 ≥1 条 ≥80,或 ≥3 条 ≥60); · 没实拉打分的号 → 按「脉 + avgC」直接放行,不因缺打分数据被卡住。 | 直接写库 + 推 Lark 汇总卡(不静默) |
| 人工确认 need_confirm | 脉不明确(号名没命中业主脉)或 命中率边缘(脉命中但实拉过、可触达 1–2 条够不上自动入)——过了 avgC/p30 硬闸但脉或意向不够硬 | 推 Lark 卡 等人点头 |
| 升 tier1 ⚠️ 入库不再标 | 2026-06-21 起作废:以前入库时按 avgC top-N(默认 10)直接标 tier1,但「高 avgC ≠ 出货」是伪信号(已把近 5 天这么升的降回 tier0)。现在新号一律入库为 tier0,入库环节不标 tier1。tier1 只由每天 01:00 的 auto-tier1 cron 按真实产出升(tier0 号近 10 天高+中 ≥10,见 §02 / 监控页)。 | 入库 = tier0; tier1 等 cron 凭产出升 |
_pull-leads-for-scoring.py 的 KEEP 是写死的 5 个老号名白名单,只对名单内的号实拉;且撞限流会整步跳过。所以多数批次没有打分数据,分流实际是「名字脉 + avgC」两个信号在跑,「高意向/可触达」那套判据多数时候用不上。auto-tier1 cron 按真实产出升降——升:tier0 号近 10 天高+中 ≥10;降:tier1 号近 7 天高+中 =0。也就是 tier1 必须用真实出货挣来,不靠"评论多"这种伪信号。动态升降流水见 监控页。--from-split)下的正常值。原「目标 20 入库 / 10 tier1」已废(2026-07-17)——冲数量只能灌死号(6/10 的 40 号仅 7.6 中高/号、6/08 的 26 号仅 3/号),目标改为「入的号是活的」| 维度 | 现状 |
|---|---|
| 数据依据 入库前看哪几个数 | 三个硬数,全是 f2 实拉 + 入库后打分的真值: ① avg_comments(avgC) = 最近 10 条视频平均评论数,过落库门 ≥150(默认)/ ≥60(2026-06-20 起常态化);② posts_30d(p30) = 近 30 天发的视频数,必须 >0(=0 直接否决,僵尸号);③ 入库后意向打分:每条评论 AI 打 0–100,≥80 高 / ≥60 中 / ≥30 低,「高+中」数就是这个号的真实可触达产出。 |
| tier0·1 动态流转 如何升 tier1 / 降 tier0 | auto-tier1 cron 每天 01:00 升→降→淘汰(口径不相交不抖):· 升 tier1:tier0 活跃号,近 10 天「高+中」意向 ≥ 10 条 → 升进快车道(env AUTO_TIER1_WINDOW_DAYS=10 / AUTO_TIER1_MIN_HIMID=10);· 降 tier0:现有 active tier1,近 7 天「高+中」意向 = 0 条 → 降回常规(env AUTO_DEMOTE_TIER1_DAYS=7 / AUTO_DEMOTE_TIER1_MAX_OUTPUT=0);· 淘汰 inactive:tier0 号 >30 天没新视频 且 近 30 天 0 条高+中 → is_active=false 退出抓取池(env AUTO_INACTIVE_STALE_DAYS=30 / AUTO_INACTIVE_INTENT_DAYS=30)。(入库不再标 tier1:2026-06-21 起作废 avgC top-N 标 tier1,新号一律 tier0、凭上面的 cron 真实产出升。)→ 逐条升降明细见实时页流水。 |
| 怎么追踪 在哪看、跑什么命令 | ① 实时页 source-evolution:tier0/1 每日号数曲线 + 升降流水(含号名+原因+抖音链接)+ 快车道积压,每天自动刷;② 按批次查 7 天产出: TAG=<批次> python3 scripts/source-cohort-yield.py(带 9 天宽限期防误杀,满 T+7 跑);③ 累计成效: worker/.venv/bin/python scripts/_source-mining-effect-cumulative.py。 |
no_proxy="*" pnpm tsx scripts/cohort-table-rebuild.ts。--min-comments 卡的是 avg_comments=全期均值(历史值),不看号还活着没有。放宽阈值冲数量,灌进来的是「历史火过、现在死了」的号——2026-07-17 实测放宽口径会入一个 全期均评 3729、但已 2314 天(6 年)没发作品 的号。--from-split(分流白名单,带 posts_30d==0 + avgC30 双闸挡凉号),「每天入库 20」这个 KPI 已废——目标是「入的号是活的」,严格筛完 ~1-2 个/天是正常值。每批入库后【累计】产出(按批次,截至 2026-07-29 DB 实查 · 36 批次全量;🆕 标记仍在 9 天宽限期、产出待回流)。口径修正:本表原标「7 天累计」但取数脚本算的是 lifetime 累计,2026-07-17 已按实际口径改标「累计」。
| 批次 | 入库 | t1 | 有视频 | 视频 | 评论 | 高意向 | 高% | 中高 | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 5/30 | 16 | 2 | 16 | 289 | 2860 | 53 | 1.85% | 242 | 首批,一只芋圆仔 |
| 6/05 | 22 | 5 | 22 | 384 | 43449 | 435 | 1.00% | 5075 | 量产标杆:评论/中高最多(231 中高/号) |
| 6/06 | 9 | 3 | 9 | 293 | 1096 | 76 | 6.93% | 265 | 旧改/毛坯脉,高纯度(高% 最高) |
| 6/07 | 10 | 0 | 10 | 153 | 396 | 1 | 0.25% | 1 | 证伪:装修vlog 脉几乎 0 高意向 |
| 6/07-intent | 6 | 3 | 6 | 182 | 13922 | 286 | 2.05% | 1391 | ROI 之王:6 号出 1391 中高(232/号) |
| 6/08 | 26 | 0 | 24 | 611 | 2109 | 21 | 1.00% | 82 | 晒家/我的家保量批 → 3.2 中高/号,放量反噬 |
| 6/09 | 17 | 2 | 17 | 338 | 11187 | 284 | 2.54% | 686 | avgC≥80 放量批 |
| 6/10 | 40 | 3 | 39 | 471 | 5051 | 67 | 1.33% | 366 | 单批最多 40 号,但仅 9.2 中高/号 |
| 6/11 | 10 | 0 | 10 | 156 | 597 | 9 | 1.51% | 54 | — |
| 6/12 | 9 | 1 | 6 | 90 | 968 | 14 | 1.45% | 96 | 装修高脉号稀缺批 |
| 6/13 | 7 | 0 | 7 | 152 | 2275 | 20 | 0.88% | 44 | 全业主晒家号;US 隧道丢包批 |
| 6/14 | 5 | 1 | 5 | 62 | 901 | 21 | 2.33% | 73 | 隧道丢包批,小批占比不低 |
| 6/15 | 1 | 0 | 0 | 0 | 0 | 0 | – | 0 | 仅 1 号,无产出 |
| 6/17 | 11 | 0 | 9 | 196 | 366 | 1 | 0.27% | 9 | — |
| 6/18 | 10 | 1 | 10 | 190 | 1495 | 5 | 0.33% | 40 | — |
| 6/19 | 2 | 0 | 2 | 79 | 187 | 0 | 0.00% | 0 | 最弱批 2 号 |
| 6/20 | 14 | 0 | 12 | 145 | 118 | 0 | 0.00% | 0 | 14 号 0 中高 |
| 6/21 | 2 | 1 | 2 | 63 | 1633 | 5 | 0.31% | 30 | — |
| 6/22 | 18 | 1 | 16 | 147 | 1769 | 34 | 1.92% | 129 | tier0 入(入库不再标 t1);业主13+脉6 |
| 6/23 | 7 | 1 | 7 | 166 | 1790 | 39 | 2.18% | 204 | — |
| 6/24 | 2 | 0 | 2 | 61 | 19 | 1 | 5.26% | 1 | — |
| 6/25 | 4 | 0 | 4 | 74 | 0 | – | – | 0 | 有视频无评论 |
| 6/26 | 4 | 1 | 4 | 129 | 787 | 8 | 1.02% | 51 | — |
| 6/28 | 11 | 0 | 10 | 150 | 144 | 5 | 3.47% | 17 | — |
| 6/29 | 17 | 2 | 14 | 288 | 1790 | 19 | 1.06% | 145 | — |
| 7/01 | 10 | 1 | 10 | 138 | 207 | 11 | 5.31% | 36 | — |
| 7/02 | 1 | 0 | 1 | 9 | 2 | 0 | 0.00% | 1 | — |
| 7/03 | 26 | 0 | 24 | 276 | 69 | 0 | 0.00% | 1 | 26 号仅 1 中高(放量批再次归零) |
| 7/06 | 3 | 0 | 3 | 42 | 399 | 0 | 0.00% | 1 | — |
| 7/14 | 55 | 0 | 55 | 534 | 249 | 1 | 0.40% | 9 | 单批最多 55 号;出宽限期后仅 9 中高(0.16/号) |
| 7/15 🆕 | 12 | 0 | 12 | 130 | 180 | 0 | 0.00% | 0 | 评论已回流但 0 中高 |
| 7/17 | 2 | 0 | 2 | 31 | 520 | 2 | 0.38% | 8 | 首个走 --from-split 严筛的批次;宽限期已过,2 号全出中高 |
| 7/23 🆕 | 3 | 0 | 3 | 13 | 43 | 0 | 0.00% | 0 | 严筛批;worker 已开抓,产出待回流 |
| 7/24 🆕 | 2 | 0 | 2 | 18 | 67 | 0 | 0.00% | 3 | 彤彤的家 avgC30=408 / 南李夫妇 125;已出 3 条中高 |
| 7/27 🆕 | 7 | 1 | 7 | 62 | 459 | 7 | 1.53% | 13 | 新家日记 avgC30=532 / 苏苏 205;含人工确认 2,已升 1 个 tier1 |
| 7/29 🆕 | 4 | 0 | 0 | 0 | 0 | – | – | 0 | 入库当天(大岚的家 avgC30=261 / 小刘的家 140;含人工确认 2:坐洲的窝窝 87、三哥摆装修 225) |
| 合计 | 405 | 35 | 384 | 6659 | 114614 | 1601 | 1.40% | 10187 | 95% 号有视频;中高(≥60) 10187 / 8.89% |
口径:intent_score ≥80 高 / ≥60 中 / ≥30 低;中高=≥60(累计 9051 条 / 9.42%)。「可触达」列已去掉(原=高意向用户中 status≠contacted,是随发送进度漂移的动态值,放在按批次的历史成效表里会越看越旧;要看可触达去实时页)。🆕 批高意向为 0 是因仍在 GRACE_DAYS=9 宽限期、worker 还没抓够,不代表号差。逐批查 7 天口径:TAG=<批次> python3 scripts/source-cohort-yield.py;重算本表:no_proxy="*" pnpm tsx scripts/cohort-table-rebuild.ts(⚠️ 旧的 _source-mining-effect-cumulative.py 用原生 urllib,扛不住美国 IP → Supabase 的 SSL EOF 抖动,已两次跑挂)。
显眼号源 · 显眼脉(依据 = 上表 + cohort-yield 实测):
| 类型 | 谁 | 为什么显眼 |
|---|---|---|
| 显眼号源 | 一只芋圆仔 | 首批 10 条 leads,含唯一一条 85 分高意向,已升 tier1 |
| 曾师傅装修日记 | tier1,高意向占比 8% | |
| 大橘的家 | 动态法出,可触达 24.4%(超 tier1 基准) | |
| 老李兄弟装修日记 | 6/20 avgC 1127,调阈值当日升 tier1 | |
| 显眼脉 | 旧改 / 毛坯 | 纯度王 10.4%(评论少但全是真买家) |
| 个人装修日记 | 量价平衡(评论量大 + 出 tier1) |
p30=0 休眠号(历史火、现在挖不动)。| 方向 | 具体 |
|---|---|
| 上量解 | US 隧道丢包是本地 f2 的天花板 → 评估转 飞瓜 / 新抖平台导出 上量(稳定、不吃隧道丢包) |
| 落库门 | avgC 60 常态化(2026-06-20 起,从 ≥150 下调,捞回正在装修的活跃业主号) |
| tier 细分 | 4 档再切(T1≥16 / T2 / T3 / T4 休眠)parked——落地需先改 scrape 路由 cover 非 tier1 档(高危走 PR) |
| 动态法 | 「高评论动态」法是否脚本化重启(当前 PARKED、未常态化,见 §06) |
本页出现的专业词在这用人话解释一遍,例子全用真跑过的号。看正文遇到不懂的回这查。
母表(6 维度 57 词的选词主表)、6 维度例词表、新率定义已移到 §01 选词段,看 「选词母表长什么样」(含真实例词)。这里不重复。
方法(6/07 晚定型):不靠关键词搜索,直接找高评论的爆款视频 → 评估发布者主页是否业主号 → 入库。逻辑:评论爆的装修动态,评论区本身就是买家聚集地。
战绩:6/07 晚首战 ROI 王(6 号出 37 高意向,6.2/号,碾压关键词保量批 ~0.6/号)。
但近期(6/18–6/21)全走「关键词 search + f2 富化」track,动态法没再跑——大概率因未脚本化、靠人工。诚实说:验证过有效(ROI 最高),但没固化成每日流程,目前只跑关键词 track。是否脚本化重启见 §05。
| 词 | 大白话 + 例子 |
|---|---|
| 号源 | 要去抓评论、找客户的抖音账号。比如「一口的装修日记」。号源库 = source_accounts 表。 |
| f2 | 一个工具,让程序「伪装成正常浏览器」去问抖音要数据(评论数 / 视频列表)。靠它在本机直接拉真实数据(httpx 签名)。 |
| sec_uid | 抖音号的唯一身份证号(一串 MS4w...)。认号靠它不靠名字——名字会重复,sec_uid 不会。 |
| avgC (avg_comments) | 平均评论数:拉这个号最近 10 条视频、每条评论数取平均(实拉最多 20 条取近 10 条算;avgC7/avgC30 = 这 10 条里落在 7/30 天内的子集)= 评论池多大 = 能挖多少潜客。例:一口的装修日记 avgC 40198。 |
| p30 (posts_30d) | 近 30 天发了几条视频 = 活跃度。p30=0 = 休眠号(历史火、现在不更、挖不动),高 avgC + p30=0 是典型「死矿」。 |
| tier0 / tier1 | 抓取勤不勤的档位。tier1(高频)≈ 每小时抓一次(验证出高产 / 新鲜好号走快车道);tier0(常规)几小时抓一次。 |
| 快车道 (scrape_jobs priority) | 抓取队列优先级:pri0 高意向注入 / pri1 快车道增量 / pri3 tier1 整号 / pri5 tier0。数字越小越优先抓。 |
| 意向打分 | AI 给每条评论打分判断是不是真想买。「这是哪家定制的呀」「多少钱」= 高意向(真客户);「[赞]」= 无关。高意向评论 = 可触达 leads。 |
| cohort-yield | source-cohort-yield.py:按批次 TAG 查这批近 7 天真实产出(总评论 / 高意向 / 占比 / 可触达)。带 9 天宽限期防误杀。 |
| T+7 | 号入库后给 worker 7 天把评论抓全,第 7 天才查产出定好坏。入库即自动排 T+7 提醒。 |
| seed-ttwid | 美国 IP 富化时,注入登录态 ttwid 绕过抖音对匿名请求的 anon warmup 超时——美国 IP 直连 f2 的绕法。 |
| raw-CDP | 用原始 CDP websocket 遥控本机 Chrome,开搜索页滚动、抓 discover/search 接口响应体取 sec_uid。2026-06-19 起替代失灵的 playwright。 |
| 本地 / 国内 IP vs 东京 worker | 干活的 worker 在东京、被抖音 WAF 挡住拉不到数据;换本机(国内网络)去拉就能拿到。所以富化 / 实拉都在本机跑。 |
| 在题 / 偏题 泛流量 | 在题 = 评论真在聊装修(能出客户);偏题 / 泛流量 = 号很火但聊生活 / 美食 / 段子,挖不出装修客户。要的是在题号。 |
| 入库 / source_accounts | 把号写进号源库(数据库 source_accounts 表),worker 就开始定时抓它的评论。 |
| 限流 | 抖音发现你短时间问得太频繁就临时不给数据(返回空)。开并发猛拉会触发,得放慢 / 等冷却。限流 ≠ 封号。 |
| 串行 / 并发 (conc) | 串行 = 一个个排队(conc=1);并发 = 同时开几路。f2 富化必须串行——并发必崩 + 限流。 |