搜索抓取

服务器抖动与抓取中断:蜘蛛遇到 5xx 和超时后会怎么回来

蜘蛛遇到服务器 5xx、超时或抓取中断后会怎么处理?本文梳理错误信号之间的区别、蜘蛛降频与重试的一般逻辑、故障恢复期的排查顺序,以及用限速、缓存和监控减少抓取中断的常见做法。

搜索抓取

服务器抖动与抓取中断:蜘蛛遇到 5xx 和超时后会怎么回来

5xx 和超时,蜘蛛看到的是两种信号

500、502、503、504 这类状态码,是服务器明确告诉蜘蛛“我这边出了问题”;而超时是指服务器在蜘蛛设定的等待时间内没有给出任何响应,蜘蛛拿到的是“没有回应”,不是一个明确的错误码。两者共同点是:这次抓取没有取到内容,一次抓取机会被消耗掉了。

区别在于后续判断。503 通常被理解为“暂时不可用”,如果带上 Retry-After,蜘蛛可能按提示稍后再来;但如果一个地址长期返回 503,又看不到任何恢复迹象,它也可能被当成持续不可用处理。超时则更容易被归到网络或服务器响应能力的问题上,排查方向偏向源站性能和链路稳定性。

出错之后,蜘蛛通常不会立刻放弃

单次失败往往先进入重试流程,间隔逐步拉长。如果同一目录、同一 IP 下大量 URL 连续失败,蜘蛛更可能降低整站的抓取频率,而不是逐个反复重试。这也是为什么一次持续数小时的故障,影响面通常大于“几条 URL 抓失败”。

短期影响

  • 待抓队列里的 URL 被推迟,新页面被发现的时间变晚;
  • 已有页面的回访间隔被拉长,内容更新不能被及时看到;
  • 抓取额度花在失败请求上,有效抓取量下降。

需要留意的滞后效应

持续的 5xx 或超时,会让蜘蛛对站点稳定性形成判断。故障结束后,抓取频率的回升往往滞后于服务器恢复正常的时间。换句话说,服务器一好,抓取并不一定立刻回到原来的样子。

故障恢复期可以做的事

  1. 先看日志确认错误类型分布:错误集中在某个目录、某个 IP,还是全站?集中型问题通常更好定位。
  2. 区分故障来源:源站超时、数据库慢查询、缓存击穿、上游回源失败,处理方式完全不同。
  3. 恢复后对比数据:观察故障前后同一时段的蜘蛛请求数、状态码比例、被抓取 URL 数量是否回到正常水位。
  4. 更新 Sitemap 中的 lastmod:这能给蜘蛛一个“这批页面有变化”的提示,但能否立即抓取仍取决于蜘蛛自己的安排。
  5. 不要急着用大量 404 或跳转清理坏链,先确认这些 URL 是否还有访问价值。

把稳定性做成可预期的事

抓取中断大多不是突然发生的,而是容量、超时设置和监控缺失一点点累积的结果。

  • 给蜘蛛请求和用户请求设置合理超时,避免慢请求占满工作进程;
  • 对需要查库、动态生成的页面加缓存,减少后端压力;
  • 限制单 IP 并发,避免一次抓取高峰把源站打满;
  • 为可降级的模块准备静态兜底,宁可返回不完整但可用的页面;
  • 把 5xx 比例、响应时间分位数纳入日常监控,而不是等抓取量下滑才发现。
抓取中断不会直接决定页面是否被收录,但它会推迟蜘蛛看到内容的时间。对更新频繁的站点来说,这段时间差往往就是流量差。

怎么判断“已经恢复”

可以从三件事上看:日志里 200 状态码的比例是否回到正常,新发布的 URL 是否重新进入抓取队列,以及抓取深度、抓取 URL 总数是否回到故障前水平。如果一两周后抓取量仍然偏低,再从内链结构、Sitemap 覆盖范围、robots 规则等方向逐项排查,而不是反复提交同一批地址。