从一份 robots.txt 说起:互联网爬虫的君子协定

145 阅读4分钟

这几天在听半拿铁 | 商业沉浮录的166期,里面提到了当年互联网大事件:百度VS360,涉及到爬虫的君子协定/robots.txt,那今天我们就来聊一聊这个协定😄。


做 Web 开发或者爬虫的各位道友,或多或少都知道robots.txt。它安静地躺在网站根目录,看起来不起眼,却在搜索引擎、爬虫生态里扮演着一个相当“微妙”的角色。

  • 没有强制力,却被大多数爬虫遵守;
  • 不是安全机制,却经常被误用为“防爬手段”。

📜 第一章:从君子协定到事实标准

robots.txt 的故事始于 1994 年。

那一年,互联网还处在萌芽阶段,搜索引擎的概念也才刚刚兴起。荷兰程序员 Martijn Koster 在开发早期的网络爬虫时,发现自己的爬虫无意中给一些服务器造成了巨大压力,甚至导致服务崩溃。

为了解决这个问题,他提出了一个非常朴素的想法:让网站所有者自己声明哪些路径不希望被爬取。这个提议很快得到了当时主流搜索引擎(如 WebCrawler)的支持,并迅速演变成一种"君子协定"(Gentleman's Agreement)。

尽管如此,由于 Google、Bing、百度等主流搜索引擎都严格遵守这一协议,robots.txt 逐渐成为了事实上的行业标准,并被写入了 RFC 9309(2022年发布),为其赋予了正式的"名分"。

⚙️ 第二章:robots.txt 的规则与语法

robots.txt 文件必须放置在网站的根目录下,例如 https://example.com/robots.txt。它的语法非常简洁,主要由以下几个部分组成:

1. User-agent

指定规则适用的爬虫。* 代表所有爬虫。

User-agent: *

2. Disallow

禁止爬取的路径。路径是区分大小写的。

Disallow: /admin/      # 禁止爬取 /admin/ 目录及其子内容
Disallow: /private.html # 禁止爬取特定文件
Disallow:              # 允许爬取整个网站(空值)

3. Allow (非标准但广泛支持)

Disallow 的大规则下,允许爬取某些特定路径。这在屏蔽整个目录但开放其中某个文件时非常有用。

User-agent: *
Disallow: /images/
Allow: /images/public/

4. Sitemap

告诉爬虫你的网站站点地图(Sitemap)在哪里,方便其更高效地索引。

Sitemap: https://example.com/sitemap.xml

一个完整的示例

User-agent: Baiduspider
Disallow: /secret/

User-agent: 360Spider
Disallow: /

User-agent: *
Disallow: /tmp/
Disallow: /cgi-bin/
Allow: /public/
Sitemap: https://myblog.com/sitemap.xml

解读

  • 百度爬虫 (Baiduspider) 不能爬 /secret/
  • 360爬虫 (360Spider) 被完全禁止访问。
  • 所有其他爬虫 (*) 不能爬 /tmp//cgi-bin/,但可以爬 /public/,并能通过 sitemap.xml 发现更多内容。

重要提醒:千万不要把 robots.txt 当作安全防护手段!敏感信息(如密码、API密钥)绝不能仅靠 Disallow 来保护,因为任何人都可以直接访问这个文件,看到你试图隐藏的路径。


🎭 第三章:那些年,robots.txt 引发的"战争"

robots.txt 虽然只是一个文本文件,但在商业竞争中却扮演过"武器"的角色。

📌 经典案例:百度 vs 360 搜索大战

时间回到 2012 年,360 推出自己的搜索引擎,为了快速建立索引,其爬虫大量抓取包括百度知道、百度贴吧在内的内容。作为反击,百度在其 robots.txt 中加入了如下规则:

User-agent: 360Spider
Disallow: /

这行代码的意思很明确:"360 的爬虫,请你哪儿也别去,整个网站都不欢迎你。"

此举直接导致 360 搜索无法正常索引百度系网站的内容,在当时引发了巨大的争议和讨论。这也成为 robots.txt 从技术协议演变为商业竞争工具的一个标志性事件。

📌 另一个趣闻:GitHub 的"彩蛋"

如果你访问 https://github.com/robots.txt,会发现里面有一条有趣的规则:

Disallow: /user/*/projects

以及对 Bingbot 的特殊处理。这体现了即使是全球最大的代码托管平台,也在用 robots.txt 精细地管理着不同爬虫的访问权限,以保护用户隐私和平台性能。


💡 结语:尊重规则,方能共建生态

robots.txt 是互联网早期"开放、协作、互信"精神的产物。作为一名开发者或安全人员,我们应当:

  • 作为网站所有者:合理配置 robots.txt,引导善意爬虫,保护服务器资源,但绝不依赖它来做安全控制。
  • 作为爬虫开发者:务必先检查目标网站的 robots.txt,尊重网站所有者的意愿,做一个"有礼貌"的数据采集者。

在这个数据驱动的时代,robots.txt 就像是一份无声的契约,维系着内容提供者与数据使用者之间的微妙平衡。理解它、善用它,是我们每个技术人应有的素养。


参考资料 & 延伸阅读


觉得还不错?欢迎点赞、收藏、关注!
也欢迎在评论区分享你遇到过的 robots.txt 有趣案例!