很多人看蜘蛛池入口页的日志时,习惯只看 200 那一部分——蜘蛛来过、页面被读了,就觉得没问题。但真正会让入口页慢慢“掉线”的,往往是那些没被抓成功的记录:连接超时、连接被重置、DNS 解析失败、5xx 响应。这类失败积累到一定比例,蜘蛛的访问频率会自己降下来,而恢复的速度通常比下降慢得多。
先分清“没来”和“来了没抓成”
这两件事的排查方向完全不同。没来,说明蜘蛛根本不知道这个 URL,问题可能出在入口没有可爬通路、robots 拦截,或者上游外链还没被抓到。来了没抓成,说明蜘蛛已经找到入口,但网络或服务端在某一层断了。本文只讨论后者,因为它通常和站点自身的运维状态直接相关,也更容易验证。
连接层的三类常见失败
DNS 解析失败或解析超时
日志里表现为连接还没建立就结束了,抓取端报的是“无法解析主机”。常见原因包括:新增的解析记录还没生效、NS 服务器不稳定、解析服务商限流,以及同时配了多条互相冲突的记录。建议接入后至少确认一遍不同线路下的解析结果,TTL 不要设得过长,改完解析留出足够的生效观察窗口再判断。
连接超时与连接被拒
超时通常是服务器处理不过来,或者中间链路丢包;连接被拒则更干脆,端口没有监听、安全组没放行、防护策略直接拒绝,都会出现这个结果。入口页如果做了限速或并发控制,需要确认限制作用在“同一时间放多少蜘蛛进来”,而不是把正常请求也一并拒掉。
连接被重置
请求发出后立刻中断,很多时候和防护层有关:WAF 规则过严、TLS 握手特征被判为异常、同一 IP 上并发过高。这类失败最容易被忽视,因为服务端日志里可能什么都没留下,只能从访问日志中“请求开始但没有响应”看出来。遇到这种情况,先临时放宽规则做对照测试,比反复猜测有效。
响应层的失败同样要看
- 5xx:多为回源失败、后端进程崩溃、CDN 回源超时。它是服务端问题,但会直接影响蜘蛛对入口页的信任度。
- 403 / 429:前者多半是权限或防护规则,后者是频率限制。反复出现,等于在告诉蜘蛛“这里不欢迎你”。
- “假的 200”:错误页、空页面、跳转页全部返回 200,日志看着一片正常,实际抓到的内容没有意义。
抓取失败率高的入口页,蜘蛛不会立刻放弃,而是先降低频率试探。等你发现问题时,它往往已经很久没认真来过了。
复盘的基本做法
- 按小时聚合失败记录,看是全天均匀分布,还是集中在某个时间段。
- 把失败记录按入口域名、服务器 IP、线路分组,判断是个别节点还是整体问题。
- 对照最近的改动时间点:上 CDN、换证书、加防护规则、改 Nginx 配置,都是高发原因。
- 确认失败的请求是不是真蜘蛛,伪蜘蛛造成的失败不必纳入复盘范围。
- 问题修复后持续观察重访频率,不要只看当天有没有恢复。
几个容易踩的坑
- 只统计成功请求,把失败当成噪音直接过滤掉。
- 一发现失败就急着换域名、换 IP,把真正的问题掩盖过去。
- 在蜘蛛访问的高峰时段做大批量配置变更。
- 用 200 包装错误页面,短期日志好看,长期抓取质量越来越差。
处理顺序建议
先保证解析和网络链路稳定,再检查服务器资源与后端进程,然后才是防护规则的放行与白名单调整。域名替换应当是最后的手段,而不是第一反应。绝大多数抓取失败都是工程问题,能从日志里定位到具体环节,就不需要靠猜。