ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

robots.txt 不是门禁:RFC 9309 规则、缓存与 Python 爬虫的 10 个边界

robots.txt 不是门禁:RFC 9309 规则、缓存与 Python 爬虫的 10 个边界 robots.txt 不是门禁RFC 9309 规则、缓存与 Python 爬虫的 10 个边界爬虫启动前经常有人问“robots.txt 能不能爬”。更准确的说法是它是站点公开给自动客户端的访问约定不是登录鉴权也不是防火墙。RFC 9309 将 Robots Exclusion Protocol 定义为服务方控制爬虫访问 URI 的规则并明确这些规则不是访问授权。本文用离线合成的 robots.txt 做 5 项检查重点讲清 user-agent 分组、Allow/Disallow 的最长匹配、文件不可用和缓存边界。没有访问任何真实站点也没有据此推断某个站点的抓取许可。1. 文件放在哪里RFC 9309 要求规则位于服务顶层、全小写的/robots.txt内容使用 UTF-8 和text/plain。例如https://example.test/robots.txt规则只对对应 authority 生效。example.test/robots.txt的规则不能直接套到api.example.test也不能把一个站点的 robots 文件当成所有域名的统一配置。2. user-agent 是分组匹配一个最小文件可以这样写User-agent: * Disallow: /private Disallow: /tmp/ Allow: /private/public User-agent: DemoBot Disallow: / Allow: /public*是通配组更具体的 user-agent 组需要按实现和协议规则选择。不要看到“有一条 Allow”就全站放行也不要把User-agent: DemoBot当成 HTTP 身份认证。它只是爬虫声明自己使用的标识。3. 最长匹配决定具体路径对/private/public/x/private/public比/private更长所以 Allow 规则覆盖较短的 Disallow对/private/a没有更长的 Allow仍然禁止。实际实现需要保留原始路径和命中的规则方便解释一条 URL 为什么被放行或拒绝。Python 标准库urllib.robotparser可以快速处理基础 Disallow但本机 Python 3.13.13 实验显示它没有按 RFC 9309 的 Allow 例外得到预期结果同一个文件里/private/public仍被判为禁止。因此不能只看 API 名称就宣称“完全兼容 RFC”如果业务依赖 Allow 和最长匹配应选经过核验的实现或明确编写并测试规则引擎。4. 本地 5 项实验保存为robots_demo.py运行环境是 macOS arm64、Python 3.13.13。实验同时保留标准库结果和一个仅针对上述固定规则的最长匹配实现stdlib_private_blockPASS rfc_longest_match_allowPASS rfc_longest_match_blockPASS rfc_tmp_blockPASS stdlib_allow_gap_documentedPASS checks5 stdlib_allow_gapurllib.robotparser on this Python ignores Allow; use a standards-aware parser or implement the rule deliberately environment{python: 3.13.13, platform: macOS-27.2-arm64-arm-64bit-Mach-O}最后一项不是“标准库正确通过”而是把差异明确记录下来防止把库的行为误称为协议行为。5. 获取失败时不能写成“允许”RFC 9309 区分成功、重定向、不可用、不可达和解析错误。成功下载后应遵守可解析规则重定向应按规范处理文件暂时不可达时是否沿用缓存需要和错误策略一起设计。协议还建议缓存 robots.txt 不超过 24 小时除非文件不可达。工程上至少记录请求 URL、状态码、最终 URL、响应编码、抓取时间、缓存命中与命中的规则。把超时、DNS 失败或 5xx 直接当成“没有限制”会造成意外访问把所有异常都永久当成“全站禁止”又会让恢复困难。根据你的合规策略选择 fail-closed 或人工复核不能伪造一个“官方默认值”。6. robots.txt 不是安全措施RFC 9309 明确指出robots.txt 不是访问控制。文件本身公开写进其中的路径也会被发现。需要保护内容时仍要使用鉴权、签名 URL、网络策略或服务端授权不要把密钥目录、备份路径当作“写进 Disallow 就安全”。参考RFC 9309 Robots Exclusion Protocol。本文由 AI 辅助整理示例数据为合成内容实验结果为本机实际运行结果。
返回列表