这几天在听半拿铁 | 商业沉浮录的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 有趣案例!