CRS 内部控制台

robots 规则sampler:robots_rule

首次采样时用 should_render = false 获取。这解决了调度器的循环依赖。

它解开了一个循环依赖

DEV-sampler.md §六

调度器需要 crawl_delaydisallow_prefix_list,但它自己不抓 robots。本服务在首次采样时顺带取回并解析,随判定结果一起回调 —— 循环就断开了。

field字段produced产出executed by谁执行
min_interval_ms最小请求间隔(毫秒)= max(crawl_delay, 语种默认值)调度器出队限速 + 下载器本地保险
disallow_prefix_list原样回传,不做任何加工调度器,入队前与 lease 前各校验一次

⚠️ 下载器不开 --obey-robots,执行者只有调度器。这一环断了,全系统就没人遵守 robots 了。下载器开了反而会造成两处判定不一致,表现为静默失败。

⚠️ min_interval_ms 在本服务已经取过一次 max。调度器与下载器直接用,禁止再取一次 max,外部消费方同样禁止。

两份 robots 不可互相替代

CONVENTION.md 第四条 · 必须标 ⚠️ 的易混字段

where位置field字段 owner所有者nature性质
sampler:robots_rulecontent采样器 当前规则,复核时会刷新
网页对象robots_snapshot下载器 抓取时刻的同期证据,永不刷新
导出项robots_rule_content采样器 上面第一行的副本,名字必须区别于第二行

⚠️ 导出字段名是 robots_rule_content不是 robots_snapshot。导出的是可刷新的规则副本,借用证据字段的名字会让合规论证本身塌掉 —— 半年后对方改 robots 来追责,要拿出的是抓取时刻那一份,不是现在这一份。

⚠️ 三者不可互相替代,名字也不可互借。这是全系统最容易被「反正都是 robots」合并掉的一处。

已解析的规则

sampler:robots_rule:{domain} → {content, fetched_at, crawl_delay, disallow_prefix_list} · 唯一写入方 采样器

domain域名 crawl_delay抓取延迟(秒) 语种默认(毫秒) min_interval_ms取 max 后(毫秒) disallow_prefix_list禁止前缀条数 fetched_at获取时间 actions操作
news.example.tw210002000 22026-08-11T09:19:12Z 规则
docs.example.cnnull10001000 12026-08-09T14:02:04Z 规则
shop.example.jp515005000 42026-08-13T05:46:20Z 规则
corp.example.hknull10001000 02026-08-02T19:30:51Z 规则
blocked.example.eu110001000 72026-08-10T11:25:04Z 待定

⚠️ crawl_delaynull 表示 robots 里没有这条指令,不是 0。此时 min_interval_ms 直接取语种默认值。

⚠️ 第三行 crawl_delay = 5 秒大于语种默认 1500ms,取 max 得 5000ms。方向不能反 —— 取 min 就等于不遵守对方的声明。

⚠️ 最后一行 disallow_prefix_list 有 7 条且覆盖了采样路径,判为 undetermined_reason = robots_disallowed,进待定池。合规留痕,不再尝试。

⚠️ crawl_delayetag / rel / lang 同属「镜像外部标准的字段」,照抄标准拼写,不展开。改了就与标准对不上,读的人反而要在两套名字之间做映射。

sitemap 地址没有具名字段

待补项 · 属采样器内部表,不动契约

sampler:robots_rule 只存 content / fetched_at / crawl_delay / disallow_prefix_list 四项。robots 里的 Sitemap: 指令藏在 content 里,没被单独取出来,所以域名列表上的 sitemap 地址那一列现在是空的。

question要过的关constraint约束
名字里有缩写吗不是外部标准名、也不在白名单,就展开。sitemap 是 robots 指令原名,属例外一,可照抄
数组还是单值robots 可以有多条 Sitemap:数组一律带 _list 后缀
这个名字在别处被占了吗不得与网页对象的 robots_snapshot 混,也不得与调度器的 URL 发现来源混
属任务还是结果填不进表名后缀那张表,说明放错地方了。它属 _rule,与 robots 同表
要不要改契约不要。它是采样器内部表的字段,不出现在任何跨服务 payload 里

⚠️ 该不该有这个字段,是 DEV-sampler.md 的管辖范围,不是本页能定的CONVENTION.md 只管它叫什么。

刷新

复核时同步刷新 robots

trigger触发action动作
首次采样should_render = false 取 robots.txt,解析后写表
复核同步刷新,新的 min_interval_msdisallow_prefix_list/v1/rules 回调下发

⚠️ 刷新只改 sampler:robots_rule不回头改任何已入库网页对象的 robots_snapshot。那是历史证据,改了就不成其为证据。

⚠️ 取 robots 走 POST crs.tongsou.com/v1/rendershould_render = false。它不是一条抓取路径,只发 HTTP、不进渲染队列,但走同一条限速路径