搜索抓取

抓取失败之后:蜘蛛会重试几次、多久之后再回来

蜘蛛遇到超时、5xx 和 404 时的处理方式并不相同:有的会进入退避重试,有的会被长期搁置。本文梳理临时失败与确定性失败的区别、主机级别降频带来的连带影响,以及页面修好之后如何让它更快回到抓取队列。

搜索抓取

抓取失败之后:蜘蛛会重试几次、多久之后再回来

蜘蛛每天要跑大量站点,遇到连接超时、502、DNS 抖动是再平常不过的事。对站点来说,真正需要关心的不是“有没有失败”,而是失败之后蜘蛛会怎么处理:这个 URL 是暂时跳过,还是被长期放到一边。

先分清两类失败

蜘蛛拿到的失败信息不同,后续动作完全不同。

  • 临时性失败:连接超时、5xx、TLS 握手失败、DNS 解析不到。这类通常会被标记为“稍后再试”,URL 仍然留在待抓队列里。
  • 确定性失败:404、410、明确的 4xx 拒绝。这类一般不会反复重试,抓取频率会快速归零。
  • 被拒绝:401、403、429。蜘蛛会把它理解为“现在不方便”,通常不会立刻放弃,但会明显降低试探频率。

重试是带退避的,不是马上再来一次

单个 URL 的重试间隔

同一条地址连续失败,蜘蛛会拉长重试间隔:几分钟、几小时、几天,甚至更久。间隔跟着失败次数增长,这就是退避。所以“刚才还报错,一分钟后就好了,为什么还不来抓”这种疑问,答案往往是重试窗口还没到。

主机级别的降频更值得警惕

如果同一台服务器上大量 URL 同时超时,蜘蛛判断的就不是“某个页面坏了”,而是“这个站点现在不稳定”,于是把整个域的抓取节奏调慢。这时候受影响的页面远不止出错的那几个,表现就是整体抓取量一起往下掉。

失败记录会保留多久

  • 临时失败:修复并返回正常的 200 后,基本在下一次正常调度窗口就能恢复,不需要额外操作。
  • 持续多轮的 5xx:恢复时间会被拉长,需要连续几次稳定成功的响应,才能把抓取节奏重新拉回来。
  • 404、410:不会因为“等一等”自己回来,只能通过链接或 Sitemap 重新把 URL 交出去。

修复之后怎么让它更快回来

  1. 先确认响应码确实是 200,而不是带错误提示内容的“伪 200”。
  2. 确认服务器、CDN 没有再对蜘蛛 UA 或蜘蛛 IP 段做特殊拦截。
  3. 用站内链接把修好的页面重新指向一次,让它处在可发现路径上。
  4. Sitemap 里保留该 URL 并更新 lastmod,不要删掉再加回来。
  5. 不要短时间内反复手工提交同一个地址,这不会加快重试,反而增加噪音。

容易被忽略的几种“假失败”

  • CDN 回源超时:源站日志里看不到这次请求,但蜘蛛拿到的是 5xx。
  • WAF 把蜘蛛 IP 段误判为异常流量,返回 403 或验证页。
  • HTTP/2 或 TLS 配置问题,只在部分线路或部分客户端上失败。
  • 站点在维护窗口统一返回 503,却没有给出明确的重试提示。

这些情况下源站“看起来没问题”,但抓取确实在掉,需要从 CDN、WAF 日志和蜘蛛侧返回码两头对照排查。

把稳定性当成抓取的一部分

抓取节奏本质上是蜘蛛对站点稳定性的判断。90% 的请求正常、10% 超时,和 100% 正常但响应偏慢,是两种不同的信号:前者更像“不可靠”,后者只是“慢”。宁可整体慢一点但稳定,也不要忽快忽慢、时不时抛错。

与其研究怎么让蜘蛛多来几次,不如先保证它每次来的时候,都能拿到一个干净的 200。

可以定期看一下服务器日志里蜘蛛请求的响应码分布,重点盯 5xx 和超时的占比。这个数字比抓取总量更能说明问题,也更容易在抓取量真正下滑之前先发现苗头。