robots.txt 引导抓取,但不授予或禁止访问
robots.txt 向实现 Robots Exclusion Protocol 的自动客户端传达抓取规则,可以减少对昂贵或无用路径的遍历,但服务器不会因此自动按照文件内容拦截请求。RFC 9309 明确区分这些规则与访问授权。应把它当作面向合作爬虫的公开接口,真正能否读取受保护资源,仍由认证和授权机制决定。配置中写了禁止抓取,不等于服务器已经建立了权限边界。 对准目标爬虫与实际路径 标准文件位于相应方案和 authority 的 /robots.txt,放在应用子目录下的同名文件,不会自动成为整个源站的策略。User-agent 分组标识规则面向的爬虫产品,通配分组按协议为其他代理提供适用规则。路径规则针对请求目标匹配,大小写不同可能产生不同结果。路由变化时应重新检查具体 URL,不能只看规则文字仍然像原来的样子。 文件应以 UTF-8 纯文本形式提供,并明确实际响应。宽泛的静态站回退规则,可能在 robots 路径返回二百和首页内容;这只证明 HTTP 已经交付,不能证明爬虫取得了预期策略。复杂的 Allow、Disallow 组合、转义和通配模式,需要对照协议及真实爬虫实现验证。一个简单解析器案例不能替整个规则集合证明所有边界行为正确。 坏掉的样子 在 robots.txt 中列出私有路径,并不会隐藏路径;公开的规则文件反而可能告诉别人它在哪里。客户端可以完全不读策略就直接请求,合作爬虫自己作出的不抓取决定,也不会转化为源站上的访问规则。确实需要限制的内容,应在请求授权的位置执行限制;Disallow 行不能替代账号权限或其他实际访问检查。公开规则和私有资源的保护条件必须分开维护。 抓取与收录也是不同问题。Google 文档说明,被禁止抓取的 URL 仍可能因为其他来源的链接出现在搜索结果里。如果爬虫无法读取页面,也可能看不到页面上希望它执行的 noindex 指令。公开内容需要按目标选择合适的收录控制,私有内容则要使用真实访问限制。不能认为阻止内容下载,就会自动移除所有已存在的搜索记录或外部引用。 策略获取失败同样有不同语义。RFC 9309 允许爬虫在文件不可用时访问资源,例如收到四开头的 HTTP 响应;如果服务器或网络错误导致文件无法到达,例如五开头的响应,爬虫起初必须假定完全禁止。规范还定义了长期失败与缓存副本的处理。部署坏了 robots 文件,可能改变抓取行为,不应只把它当成少了一份装饰性文本。 ...