robots.txt 解析器

粘贴一份 robots.txt,按 RFC 9309(机器人排除协议,2022 年标准化)规定的方式像爬虫一样读它:user-agent 组、Allow/Disallow 规则、站点地图与未知指令,全部一览无余 —— 另附常见错误的体检(空的 Disallow 行、未知指令、超大文件)。匹配器则回答真正的问题:粘贴一个 user agent 和一个路径,立刻得到允许/禁止的判定,以及做出该决定的那条确切规则 —— 最长匹配、通配符 *、结尾锚点 $ 与组合并,全部严格按标准实现。一切都在你的浏览器里运行。
还没有解析任何东西。在上方粘贴一份 robots.txt 并点击解析文件,或者载入一个示例。
匹配器作用于上方输入框里当前的文本(无需先点解析)。user agent 的匹配方式由 RFC 9309 定义:文件里的 User-agent 值必须是你在此输入内容的大小写不敏感子串 —— 比如输入 ExampleBot/1.0 就能匹配声明为 ExampleBot 的组。路径可以直接填完整 URL。
User agent(填真实 UA 串也行) 路径,或完整 URL
还没有判定。点击测试权限。
如何取回你的文件: 打开https://your-domain.example/robots.txt 在浏览器里全选、复制,粘贴到这里 —— 或者curl -s https://your-domain.example/robots.txt 在终端里跑。本页面自己绝不抓取任何东西:它只读取你粘贴的内容。想检查传输该文件的响应头,请把它们交给HTTP 响应头解析器.
自测
用 RFC 9309 参考向量重跑解析器与匹配器:最长匹配优先(包括 allow 胜过 disallow 的同长并列与深路径情形),组合并,* 组回退、路径与 user agent 的大小写敏感性、通配符、$ 锚点、对/robots.txt 的隐式允许、百分号编码归一化、站点地图提取,以及反向路径。不会向任何地方发送数据。
什么是 robots.txt?
一句话:robots.txt 是放在站点根目录的纯文本文件,告诉守规矩的爬虫哪些路径可以抓取 —— 这是一项自愿的约定,2022 年被标准化为 RFC 9309,所有主流爬虫都遵守它。
文件的形状

文件由一连串记录组成。一个组以一行或多行 User-agent 开头,随后是作用于这些爬虫的 Allow 与 Disallow 规则。规则之后再出现新的 User-agent 行就开始一个新组;连续多行 User-agent 共享同一个组(一个爬虫有两个名字时就需要这样)。Sitemap 这类独立记录可以出现在任何位置。# 在一行的任何位置都开始注释。字段名大小写不敏感;路径大小写敏感。

行含义
User-agent: foobot下面的规则作用于名字包含 foobot 的爬虫(大小写不敏感)
User-agent: *下面的规则作用于所有没有更具体组的爬虫
Disallow: /private/不要抓取以 /private/ 开头的路径
Allow: /private/public/对这些路径而言是压过上面禁止项的例外(最长匹配)
Disallow:什么都不禁止 —— 经典的"允许一切"写法
Sitemap: https://…/sitemap.xml你的站点地图的位置;爬虫可以收集多份
Crawl-delay: 30不在 RFC 9309 内 —— 遗留扩展;主流爬虫要么忽略要么自行解读
判定是怎么得出的(RFC 9309 §2.2.2)

1. 找到 User-agent 值是该爬虫名字子串的组;所有匹配的组会合并。若没有,使用 * 组;连该组也没有,则一切允许。2. 用每条规则测试该路径:匹配基于前缀、大小写敏感,* 与 $ 作为通配符生效。3. 最长的匹配规则胜出;长度相同时 Allow 压过 Disallow。没有任何规则匹配即允许。而且无论规则怎么写,/robots.txt 本身都被隐式允许——不然爬虫就读不到这些规则了。

常见错误
  • 以为 robots.txt 能挡住访问。它只是对守规矩爬虫的请求,不是一堵墙:恶意采集器完全无视它,它对浏览器能打开什么也没有任何影响。真正的防护请用身份验证;只为引导搜索引擎时,robots.txt 才是合适的工具。
  • 指望 Disallow: / 能把页面从搜索结果里删掉。它阻止的是抓取,不是索引:只要别的页面链向你,搜索引擎仍可能列出这个 URL(不带摘要)。删除页面的工具是 noindex meta 标签或响应头。
  • 靠行序而不是靠长度。最先匹配的规则并不会赢 —— 赢的是最具体(最长)的那条。靠重排行来"修"行为是无效操作;想赢就把规则写得更长。
  • 封禁 CSS 和 JS。过去流行禁止 /*.css$ 与 /*.js$ 的"优化";如今渲染器需要这些文件才能像访客一样看到页面,半渲染的页面排名可能更差。
  • 把一整段文字当成文档。组内的注释行没问题,但第一条 User-agent 行之前没打 # 的一段散文是解析错误,宽松的解析器也可能被它弄糊涂。
常见问题

所有爬虫都支持 Allow、* 和 $ 吗?主流的都支持,RFC 9309 也把三者全部标准化。一些较小或较老的爬虫只认 Disallow,并把 * 当字面字符 —— 能把规则写简单就写简单,这是理由之一。

空的 Disallow: 是什么意思?"什么都不禁止" —— 该组显式允许一切。它通常出现在有人改模板时删了路径却留下指令;体检会把这种行标出来。

文件可以多大?RFC 9309 要求解析器至少能处理 500 KiB;超过之后爬虫可以停止读取并把余下内容当作禁止。尽量远小于这个值;如果文件已经臃肿,该想想抓取控制是不是应该放到页面响应头里。

为什么匹配器说 /robots.txt 在 Disallow: / 下也是允许的?因为标准白纸黑字这样写:robots 文件本身被隐式允许。Python 的 urllib.robotparser 等实现并没有实现这个特例 —— 这正是本页自测记录下来的现实解析器之间的细微分歧之一。

Disallow 的路径区分大小写吗?区分。/Private/ 和 /private/ 是两条路径。字段名 disallow 可以任意大小写,但值必须与 URL 完全一致。