搜索抓取

响应慢与超时:蜘蛛抓取时在等你多久

蜘蛛抓取一个页面,时间主要花在连接建立、TTFB 和正文传输三段。响应慢或超时不一定会立刻出问题,但会持续拉低抓取节奏,牵连同一主机下的其他 URL。本文拆解各环节耗时、超时与断连之后蜘蛛的处理逻辑,以及如何用日志定位慢响应、按优先级做优化。

搜索抓取

响应慢与超时:蜘蛛抓取时在等你多久

蜘蛛抓取一个 URL,从建立连接到拿到 HTML,中间要跨过网络、服务器排队、应用处理和数据库查询几道环节。任何一环变慢,单次抓取的耗时都会变长;慢到超过蜘蛛的等待阈值,这次抓取就直接作废。

一次抓取的耗时都花在哪

从蜘蛛的视角看,时间大致分三段:连接建立(DNS、TCP、TLS)、等待首字节(TTFB)、接收正文。前两段偏网络和服务器层,第三段取决于页面体积和带宽。真正容易被忽略的是 TTFB,它包含服务器排队和应用生成页面的全部时间。

  • 连接阶段慢:多半是线路、DNS 解析或证书握手的问题。
  • TTFB 高:常见于后端查询慢、锁等待、模板渲染重、缓存未命中。
  • 传输阶段慢:HTML 体积大、下载资源多、出口带宽被占满。

超时与断连之后会发生什么

蜘蛛对单次请求有等待上限,超过就不再等。连接被中断、返回不完整的 HTML,通常不会记成一次有效抓取,而是算一次失败。失败次数多了,常见后果是:

  • 该 URL 的抓取频率被下调,回爬间隔拉长。
  • 同目录、同主机的其他 URL 也会受牵连,整体节奏放缓。
  • 如果失败集中在某台机器或某个接口,相关页面可能长期停在旧快照。

要注意,慢和挂是两种不同的信号。持续返回 200 但每次都要十几秒,比偶发一次 503 更容易拖垮整体抓取效率,因为它不会触发明显的告警。

慢响应如何拉低整站抓取量

蜘蛛的抓取同时受并发和配额约束。假设同一时间能开 N 个连接,单页耗时从 0.3 秒变成 3 秒,相同时间内能抓完的 URL 就少了一个数量级。表现上就是:日志里蜘蛛来得挺勤,但每天覆盖的 URL 数一直上不去,深处页面迟迟进不了队列。

反过来,响应稳定在几百毫秒,即使站点规模不小,蜘蛛也更容易把有限的容量用在发现和确认新 URL 上,而不是反复重试同一批慢页面。

怎么观察自己的响应表现

  1. 按蜘蛛 UA 过滤访问日志,统计响应时间分布,别只看平均值,重点看 P95、P99。
  2. 把 5xx、超时、连接重置单独计数,和时间点对齐,看是否集中在某个时段或某台机器。
  3. 区分动态页和静态页,很多站点慢的是列表页和搜索页,首页反而很快。
  4. 核对 CDN 回源比例,回源率高的时段 TTFB 通常同步变差。

可落地的处理顺序

不必一上来就做大改造,按影响面排优先级更划算:

  • 先降超时率:找出连续报错的接口,能修就修,修不了的先让它返回明确的状态码,而不是一直挂着。
  • 再压 TTFB:补缓存、给慢查询加索引、把重渲染的页面做静态化或预生成。
  • 控制并发:蜘蛛和真实用户抢同一批资源时,给抓取留出通道,避免高峰互相拖慢。
  • 管住 5xx:短时间大量 5xx 会被当成站点不稳定,回爬节奏恢复起来比降下去慢得多。

不管是靠内链、Sitemap 还是其他方式做 URL 发现,最终都要落到服务器能在合理时间内把页面交出去这一步。发现得再快,交付跟不上,抓取量也不会增长。

抓取效率的下限往往不是“蜘蛛愿不愿意来”,而是“服务器能不能及时把页面交出去”。稳定性先立住,URL 发现和内链优化才有意义。