爬虫来抓直接被拒的站点接近一成,先查 robots 还是查服务配置
近一成站点把爬虫请求挡成拒绝状态码,排查时应当先看服务器配置再看 robots 文件,因为两者作用机制不同:robots 文件是礼貌性指引,写得再严也不会让请求返回拒绝码;一旦抓取方拿到的是被拒状态,拦截一定发生在服务层或规则层,改 robots 不会改变结果。
当天口径里的流量与拒绝比例
2026-10-30 打开原文核对到的一组流量分布是:抓取请求里 Googlebot 占 23.80%,另一家元标签类代理占 13.28%,两家做模型训练与检索的代理分别是 13.23% 与 8.05%;同一份统计里被以 403 拒绝的比例是 7.9%,接近一成。这组数字说明两件事:被拦的不是零星站点,而是一档常态;拦截发生在服务层,所以表现形式是状态码而不是指引生效。
先看清楚一点:拒绝码是被访问方返回的,指引是对方自愿遵守的。排查顺序弄反,会出现改完 robots 文件之后流量依旧的假象。
三层拒绝各自的特征
| 拦截层 | 典型返回 | 可观察特征 | 先确认什么 |
|---|---|---|---|
| robots 指引层 | 正常状态码,请求不发生 | 抓取记录里没有对应路径的访问 | 路径是否写在禁止段里 |
| 规则与防护层 | 拒绝状态码或验证页 | 同一地址浏览器可达、代理被抓 | 代理标识是否在黑名单里 |
| 地址重写层 | 拒绝或找不到 | 带参数地址正常、静态地址被抓 | 伪静态规则对哪类请求生效 |
按状态码分层的自查顺序
第一步是把抓取日志按状态码分组:先看有多少请求落到拒绝码,再看这些请求集中在哪些路径与前缀。集中在少数前缀的,通常是规则层的定向拦截;分散全站且与代理标识有关的,往往是防护层按代理名单做的批量拦截。
安企内容管理系统(AnQiCMS)这类自建程序里,robots 文件与地址重写规则是两个独立入口:前者控制哪些路径不建议抓,后者决定同一段内容以什么地址形态被访问。伪静态规则改动容易顺带影响抓取路径,排查时不要忽略这一层。
改完之后怎么验证
按代理分组留验证记录是最省事的做法。分别记录检索类代理与训练类代理各自的请求量与返回码分布,改完一层再测一层。改动一次只动一层:同时改 robots 段、防护名单与重写规则,结果无法归因,下一次遇到同样问题还是猜。
如果确实要拦某类代理,让拦截动作与目的对齐:只想减少内容被采集,用指引加干扰码这类内容层手段更可控;要彻底拒绝访问,才在服务层返回拒绝码,并预留回退位置。
常见问题
问:只改 robots 文件能不能挡住训练类代理? 答:不能保证。指引靠对方自愿遵守,返回拒绝码才是服务层强制结果。
问:浏览器访问正常,代理却拿到拒绝码,问题在哪层? 答:优先看规则与防护层是否按代理标识做了区分,这是最常见的原因。
问:改了重写规则后抓取量下降,怎么定位? 答:对比静态地址与带参数地址的返回码分布,若只有静态地址被抓,重写规则是嫌疑点。