1. 一个不把robots.txt当回事的爬虫项目,是怎么被迫下线的
我做过很多种采集任务,从资讯站的列表页到行业网站的 PDF 文件,从单机脚本到分布式调度。早期我觉得 robots.txt 就是个摆设,无非是运维写给搜索引擎看的一份声明,我自己的 User-Agent 换个不常见的名字,谁会真的来查。直到有一次,我负责的一个采集任务上线不到半天,对方运维就带着完整请求日志找上门来。日志里时间戳、请求路径、响应码全都在,User-Agent 一行一行写得清清楚楚。那一刻我才意识到,网络爬虫库与 robots.txt规则之间从来不是“技术能不能实现”的关系,而是“这套数据你能不能用得安心”的关系。
这篇内容我想结合自己的实际经历,把 robots.txt 的语法细节、主流爬虫库对它的支持方式、如何把它写进请求链路,以及最近大家在热搜里提到的“怎么让 AI 绕过 robots.txt”这类问题一次性讲透。如果你是刚接触爬虫的小白,可以直接收获一套可落地的判断方法;如果你已经写了不少采集脚本,这几个容易踩的细节也许能帮你省下跟站点方扯皮的功夫。
先说我当年的教训。那个项目要做的是定时同步一个垂直网站的公告数据,量不大,但使用了并发请求,每个页面还顺手把静态资源也拉到了本地。起初只盯着页面能不能打开、会不会被封 IP,完全没有去看那台服务器的 robots.txt 到底写了什么。结果对方的运维人员通过访问日志识别出我们的爬虫后,先是一封措辞客气的提醒邮件,随后直接加了访问限制。等我们再去核对时才发现,robots.txt 里对一个二级目录明确写了 Disallow,而我的任务清单里恰好包含了那个目录下的几十个文件。
robots.txt 全称是 Robots Exclusion Protocol,2022 年已经有了 RFC 9309 这样的正式参考文档。它的作用是在站点运行方和自动访问程序之间建立一种公开约定:哪些路径允许被抓、哪些不允许、希望用多快的频率访问。但请注意,它本质上不是防火墙,也没有办法从技术上阻止任何请求。它更像家门口贴着的一张“非请勿入”的纸条,正人君子路过会尊重,心存侥幸的人依然可以无视。问题是,现实中很多数据纠纷、账号封禁甚至服务协议违约,最初的源头都是这一份看起来不起眼的文本文件。
所以我的建议是,把 robots.txt 当成采集项目的基础设施来对待,而不是可有可无的“道德约束”。它决定了你能在多大尺度上使用这批数据,也决定了当对方问起来时,你能不能坦然说出“我们是严格按照你的规则抓的”。在这个前提下,再来谈爬虫库、并发数、解析效率,才有意义。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. robots.txt语法拆解:别让 Allow、Disallow 的匹配逻辑坑了你
robots.txt 的核心语法并不复杂,但实际使用中特别容易在路径匹配上产生误解。先看一个标准的示例文件:
code复制User-agent: MyCrawler
Disallow: /admin/
Disallow: /api/v1/private
Allow: /public/
Crawl-delay: 5
Sitemap: https://example.com/sitemap.xml
这里 User-agent 行声明的是给哪个爬虫看的规则,MyCrawler 是爬虫在产品标识中使用的名称。接下来 Disallow 表示禁止访问的路径前缀,Allow 表示允许访问的路径前缀。Crawl-delay 是部分爬虫支持的访问间隔建议,单位是秒。Sitemap 则是给爬虫提供全站链接清单的入口,它不归属到具体某个 User-Agent 的规则组里。
2.1 User-Agent 的匹配方式
UA 匹配遵循几个原则:大小写不敏感,而且只要当前爬虫的 UA 中包含某个 token,就会认为该规则适用于它。例如我的请求头是:
code复制User-Agent: MyCrawler/1.0 (+https://example.com/contact)
那么 robots.txt 里的 User-Agent: mycrawler 可以命中它。如果站点没有为 MyCrawler 单独设置规则组,爬虫通常会落到 User-Agent: * 这个通配组上。也就是说,所有没有被单独点名的爬虫,都默认参考星号组的配置。
这里有个细节值得注意:某个爬虫到底使用哪一组规则,主流做法是匹配“最具体”的 UA token。如果站点里同时存在 Googlebot 和 * 两组规则,Googlebot 就按 Googlebot 那组执行;我自己叫 MyCrawler,就按 * 那组执行。所以编写机器人时,一定要给自己一个稳定、可识别的 UA,不要随手用浏览器 UA 去伪装。
2.2 路径匹配优先级
路径匹配最容易出错的地方在于:Disallow 后面的路径是一个“前缀”,而不是一个必须完整相等的目录。举个例子:
| robots.txt 规则 | 页面 URL | 是否禁止 |
| ---
