回调给调度器的字段
CONTRACT.md §三 POST scheduling-url/v1/rules · 这些字段离开本服务后由调度器执行
| field字段 | value取值 | executed by谁执行 |
|---|---|---|
| domain域名 | news.example.tw | — |
| verdict判定结论 | csr | 调度器:正常入队 |
| verified_at判定确认时间 | 2026-08-11T09:20:04Z | 幂等键的一半 |
| wait_selector | .article-body | 下载器:等待策略第一档 |
| lang语种 | zh-Hant | 下载器透传进网页对象 |
| region | TW | 同上 |
| jurisdiction法域 | TW | 同上 |
| min_interval_ms最小请求间隔(毫秒) | 2000 | 调度器出队限速 + 下载器本地保险 |
| disallow_prefix_list | ["/admin", "/api/"] | 调度器执行,入队前与 lease 前各校验一次 |
| list_link_ratio | 0.05 | 调度器:判断能否靠纯 HTTP 提链接 |
| verdict_reason判定结论说明 | 五个样本 text_ratio 一致偏低,骨架特征命中 __NEXT_DATA__ | 自由文本,不参与任何分支 |
⚠️ min_interval_ms = max(crawl_delay, 语种默认值),本服务已经取过一次 max。调度器与下载器直接用,禁止再取一次 max。本域名 robots 的 Crawl-delay: 2 大于语种默认 1000ms,所以是 2000。
⚠️ disallow_prefix_list 必须回传。下载器不开 --obey-robots,执行者只有调度器。契约不传则 robots 的 Disallow 全系统无人执行。
⚠️ verified_at 是幂等键的一半(domain + verified_at),必须单调。调度器收到更旧的值应丢弃并返回 200。
⚠️ list_link_ratio 只取自列表页样本,与正文无关。极低说明该域名列表页链接靠 JS 注入,调度器不能靠纯 HTTP 提链接,必须等渲染后的 link_list。
判定依据
DEV-sampler.md §四 · 一次 /v1/render 调用同时拿到双取两侧,请求量减半
两个 ratio
| ratio | median中位数 | definition分子 / 分母 |
|---|---|---|
| text_ratio | 0.052 | raw_text_length / text_length。越低越 CSR,反直觉;分母为 0 时取 null |
| link_ratio | 0.095 | (link_count − js_injected_link_count) / link_count;分母为 0 时取 null |
| list_link_ratio | 0.050 | 同上,但只取自列表页样本 |
样本
| field字段 | value取值 |
|---|---|
| page_sample_count本域名采样页数 | 5 |
| 样本来源 | sitemap.xml |
| 列表页样本(单独采) | 1 |
| 骨架特征命中 | __NEXT_DATA__ |
⚠️ page_sample_count 是「这个域名采了几页」,不是调度器的 statistic_sample_count(滑动中位数里有几条样本)。两者曾被合并成同一个 sample_count,是本系统要防的事故本身 —— 一个是统计窗口宽度,一个是渲染成本单位,合并后调优会被误读成统计精度问题。
⚠️ 多样本合并取中位数而非平均值 —— 单个异常页不应带偏判定。样本间分歧极大时判 partial,记入 verdict_reason。
⚠️ 列表页单独采样,不参与 text_ratio 判定 —— 它链接多正文少会让 ratio 失真。但它的 link_ratio 有独立价值,即 list_link_ratio。
⚠️ 骨架特征只用于加速,不用于否定。不满足特征的域名仍走完整判定。
ratio 历史
sampler:ratio_history:{domain} · 复核比对用,按条数或时间裁剪
| verified_at判定确认时间 | trigger触发来源 | text_ratio | link_ratio | page_sample_count采样页数 | verdict判定结论 |
|---|---|---|---|---|---|
| 2026-08-11T09:20:04Z | 定期 | 0.052 | 0.095 | 5 | csr |
| 2026-07-14T02:38:51Z | 调度器 recheck | 0.061 | 0.102 | 5 | csr |
| 2026-07-02T03:44:16Z | 首次判定 | 0.058 | 0.098 | 5 | csr |
⚠️ 规则表里的 ratio 是 3~5 样本的中位数,不能直接与单页值比。复核要重新采样算中位数,否则一个异常页就能把结论翻过来。
⚠️ ratio 显著升高 = 改成了 SSR,回调 verdict=ssr;显著降低 = 更 CSR 或结构变了,更新数值并重推 wait_selector;渲染后为空 = 站点挂了或加了反爬,判 unknown 进待定池,不立即改判。
域名级 URL 规范化规则
DEV-sampler.md §五 · 与 wait_selector、disallow_prefix_list、min_interval_ms 同一所有者
| rule规则 | effect作用 |
|---|---|
| ?sort= 不影响内容 | 归入同一 canonical_group_hash |
| ?page= 不影响内容 | 同上 |
⚠️ 这些规则只用于归并、判断是否重复抓取,不改变 url_hash。url_hash 只由全局规范化那五条算出,全局层冻结、永不改动。这样规则变更只影响归并组,主键纹丝不动,全库永远不用重建。
⚠️ 全局规范化不碰任何业务 query。?id=123 这类路由参数一律保留 —— 很多 CSR 站路由依赖它。
相关
同一域名在其他表里的记录
| where位置 | key | actions操作 |
|---|---|---|
| robots 规则 | sampler:robots_rule:news.example.tw | 查看 |
| 判定任务 | 已完成即删,无记录 | 任务列表 |
| 提交复核 | POST /v1/domains,reason = recheck | 复核 |
| 域名列表 | sampler:domain_rule | 返回列表 |
⚠️ 调度器侧的 scheduler:domain_rule_replica 是本表的只读副本,写方在本服务。副本表名带 _replica 并注明只读,两者不可互相赋值。
⚠️ 本页不显示该域名的抓取量、健康状态、熔断原因。那些在调度器与下载器,契约里没有本服务读取它们的边。