搜尋抓取

服務端错誤與抓取退避:蜘蛛遇到超时、5xx 之後會怎么走

蜘蛛抓取失敗並不都是一回事:连接超时、连接重置、5xx 在蜘蛛眼里含义不同,触發的退避强度和恢复速度也不一样。本文按失敗類型拆解蜘蛛的處理逻辑,說明降速通常有哪些表現,並给出抓取恢复需要满足的條件與日常该盯的指标。

搜尋抓取

服務端错誤與抓取退避:蜘蛛遇到超时、5xx 之後會怎么走

很多人盯蜘蛛日誌时只看“今天来了多少次”,很少看“哪些請求没成功”。實际上,蜘蛛對失敗的记忆比我們想象的長:一次超时、一段连續 5xx,都會让它重新评估這個站点的稳定性,進而影响接下来的抓取节奏。下面按失敗的類型、退避的表現、恢复的動作三個层面拆開讲。

一、先分清三種“抓不到”

日誌里的失敗往往被笼统记成“抓取異常”,但原因不同,蜘蛛的處理方式也不同。

  • 连接层失敗:连接超时、连接被重置、TLS 握手失敗。這類通常意味着網絡或服務器在前面就拒绝了請求,蜘蛛连响應头都没拿到。
  • 响應层失敗:500、502、503、504 等。服務器接了請求但没正常返回,蜘蛛能明确知道“這是你的問题”。
  • 内容层失敗:返回 200,但内容是错誤頁、空壳頁、驗證碼頁。蜘蛛未必能立刻识別,但反复抓到無效内容,同样會降低後續訪問的频率。

前两類會直接触發退避,第三類更隐蔽,往往要靠人工比對抓取内容才能發現。

二、超时和连接重置:先降速,再试探

蜘蛛在單次抓取里能容忍的等待時間是有限的。一旦某個 URL 连續超时,它通常不會当场重试很多次,而是把该主机标记為“暂时不稳定”。

表現上大概是這样的:原本一分钟来几十次的抓取,會降到個位數;抓取集中在首頁、栏目頁這類它已经確認可用的 URL;新 URL 的發現和抓取明顯變慢。连接重置比超时更麻烦,因為蜘蛛看到的是“连接被主動切断”,容易被理解成對方在拒绝訪問。

如果這種情况持續几個小时以上,退避的力度會加大,恢复也要更久。所以临时性的容量問题,越早處理越好。

5xx 的信号强度比超时更高

500 系列里,蜘蛛對 503 的容忍度相對高一些,因為 503 的意思是“我現在不可用,稍後再来”。如果配合合理的重试提示,蜘蛛通常會按提示推迟,而不是立刻判定站点质量差。反過来说,500、502、504 這類没有明确“稍後再来”含义的错誤,连續出現就容易让蜘蛛降低抓取频率。

需要提醒的是,服務器返回 5xx 时,頁面本身可能是好的——比如某個接口挂了、缓存服務连不上,導致整頁渲染失敗。對蜘蛛来说结果是一样的。

三、退避之後,抓取怎么恢复

退避不是永久的。把問题修好之後,蜘蛛會逐步恢复,但节奏通常比当初下降得慢,恢复需要几個條件同时成立。

  1. 错誤率真正降下来:不是“某一次成功了”,而是连續一段時間不再出現同類失敗。偶尔成功一次,蜘蛛可能只是碰巧赶上,不足以改變判断。
  2. 响應時間稳定:從几百毫秒到十几秒来回跳,即使都返回 200,也會被视作不稳定。
  3. 關键 URL 可用:首頁、主要栏目頁、Sitemap 這几處必须稳定。蜘蛛恢复抓取时,通常先從這些入口重新確認站点狀態。
  4. Sitemap 和内部連結保持正常:這是蜘蛛重新找到 URL 的主要路径。如果這段時間内鏈结构也變了,恢复會更慢。

四、日常该盯哪几個指标

  • 蜘蛛抓取的狀態碼分布:5xx 占比、429 占比、超时次數,按小时看比按天看更容易發現抖動。
  • 响應時間分位數:平均值好看不代表没事,P95、P99 偏高說明有部分請求在拖後腿。
  • 抓取 URL 的分布變化:如果抓取突然集中到少數几個頁面,往往是退避的前兆。
  • 新 URL 的首次抓取時間:這個值明顯拉長,說明蜘蛛的抓取节奏還没回到正常水平。
退避是蜘蛛的自我保護,不是惩罚。它不會因為你某天挂了十分钟就永久减少抓取,但如果服務器長期處于“时快时慢、偶尔 5xx”的狀態,抓取节奏就很难回到正常水平。與其研究怎么把蜘蛛引進来,不如先把响應時間和错誤率稳住。

最後补一句:蜘蛛池、外鏈引導這類手段能带来更多抓取請求,但它們解决的是“蜘蛛来不来”的問题,解决不了“来了能不能顺利抓完”的問题。服務器稳定性属于後者,而且優先級更高。