搜尋抓取

狀態碼是给蜘蛛的即时反馈:4xx、5xx 與超时怎样改變抓取安排

蜘蛛每次抓取都從看服務器怎么回答開始。成功、确定性失敗和临时失敗三類响應,會分別影响 URL 的保留、清理與再抓频率。本文梳理 404、410、403、5xx、429 與超时對抓取路径的實际作用,並给出按狀態碼自查日誌的思路。

搜尋抓取

狀態碼是给蜘蛛的即时反馈:4xx、5xx 與超时怎样改變抓取安排

蜘蛛抓取一個 URL 时,第一步不是解析内容,而是看服務器怎么回答。狀態碼是這次請求的结论,也是决定它下次還来不来、什么时候来、會不會顺着這個地址繼續走的輸入。很多抓取上的別扭,其實来自响應给错了信号。

三類响應,三種處理逻辑

從抓取調度的角度看,狀態碼大致可以分成三组:200 與可跟随的 301、302 属于第一组;404、410 属于确定性失敗;5xx、429 和超时属于临时失敗。蜘蛛對三者的處理完全不同:第一组繼續解析頁面、提取連結;第二组把 URL 标记為失效,逐步降低再抓频率;第三组保留 URL 的待抓狀態,隔一段時間重试,同时可能整体下調對该站点的抓取速度。

4xx:告诉蜘蛛這個地址不用再来

404 是最常见的确定性失效信号。頁面确實刪除了,返回 404 或 410 都合适;410 的语义更强,表示永久移除,部分蜘蛛會更快地清理。這里有两類常见誤用:

  • 頁面不存在却返回 200,配一句“抱歉,没有找到内容”。這類软 404 會让蜘蛛把空頁面当作正常内容處理,既占抓取预算,也让本该失效的 URL 長期留在队列里。
  • 把已刪除的頁面 301 到首頁。用戶侧看着有去處,但蜘蛛看到的是大量 URL 指向同一目标,跳轉關系變得模糊,首頁也會被以各種入口反复訪問。

403 和 401 指向權限問题。如果站点按 IP 或 UA 做了拦截,蜘蛛拿到的可能就是 403。這时它不會把 URL 判為失效,但抓取會一直不顺畅,反复尝试而不产生结果。

5xx:临时失敗,但代價會累积

500、502、503、504 表示服務器這次没有正常完成响應,蜘蛛通常按临时問题處理,保留 URL 並安排重试。問题在于重试不是無限的:同一批 URL 连續多次返回 5xx,蜘蛛會開始降低對该站点的整体抓取频率,恢复速度取决于後續响應有多稳定。計划内维護时,503 配合 Retry-After 头是比較明确的表達方式,比让請求長時間挂着更清楚。

429 與超时:不是坏了,而是太快了

429 表示請求频率超出服務器愿意接受的范围,它传递的是“慢一点”,而不是“這個地址有問题”,蜘蛛通常據此下調抓取速率。连接超时、讀超时、连接被重置在日誌里不一定体現為标准狀態碼,但效果類似:這轮抓取视為失敗,過一段時間再试。

如果超时集中出現在某些目錄或某類模板生成的頁面上,往往說明這些頁面在資料库查询或外部接口調用上卡住了,而不是整站不可用。定位到具体模板,比笼统地加服務器资源更有针對性。

维護窗口内的临时不可用,用 503 加 Retry-After;被压垮的接口,用 429 或明确的限流說明。都不要用長時間無响應的方式表達。

按狀態碼自查的几條路径

  1. 把服務器日誌按狀態碼分组統計,看 5xx 和 429 集中在哪些路径、哪些时段。
  2. 检查是否存在大量 404 返回 200 的情况,重点看站内搜尋頁、篩選頁、已刪除的内容頁。
  3. 抽查重定向鏈,確認刪除頁面不會被统一指向首頁或某個無關栏目頁。
  4. 观察 5xx 是否與流量高峰、批量任務、备份或密集訪問時間重叠。
  5. 如果站点有抓取統計面板,把其中的响應错誤趋势與服務器日誌對照,確認两者描述的是同一件事。

小结

蜘蛛對站点的判断是一点点累积的。稳定返回 200 的頁面容易被安排更規律的抓取,大量临时错誤則會拉低整個站点的抓取节奏。把狀態碼当成给蜘蛛的即时反馈,让每種结果都對應准确的语义,URL 發現的過程會顺畅得多。