搜尋抓取

蜘蛛来了却没抓走:從日誌分辨几類抓取失敗

抓取量下降不一定代表蜘蛛没来。服務器日誌里的超时、连接重置、5xx、403 以及返回内容異常,各自指向不同的問题。本文按狀態碼、URL 分布和時間线梳理排查顺序,並列出几項平时就该做好的准备。

搜尋抓取

蜘蛛来了却没抓走:從日誌分辨几類抓取失敗

抓取量下滑的时候,很多人的第一反應是“蜘蛛不来了”。但實际排查下来,更常见的情况是蜘蛛照常来訪,只是每次都没能把頁面完整拿走。這两種情况在抓取报表里看不出区別,在服務器日誌里却寫得很清楚。

把日誌里的失敗分成几類

服務器日誌能记錄的信息有限,但只要抓住時間、請求行、狀態碼、响應時間和返回字节數這几列,大部分問题都能定位。下面這几類失敗出現频率最高。

连接超时與响應超时

蜘蛛發起了請求,服務器迟迟没有回應,最终连接被中断。日誌里可能留下一個极長的响應時間,也可能什么都没记下来。這類情况通常指向服務器负载、後端接口阻塞或者資料库慢查询,而不是頁面本身的問题。

值得注意的是,超时是有成本的。蜘蛛在一個地址上等待越久,單位時間内能抓的頁面就越少。哪怕只影响一部分 URL,整体抓取节奏也會被拖慢。

连接被重置或提前断開

日誌里能看到請求進来了,但响應没有寫完。可能是應用進程被重啟、连接池耗尽、反向代理超时,也可能是頁面体积太大導致传輸中断。這類失敗不像 5xx 那样直白,容易被忽略。

5xx 與 4xx 的含义不同

  • 5xx 表示服務器這一侧出了問题,蜘蛛通常會稍後重试,短期不必惊慌,但持續出現就要查。
  • 4xx 中的 404 是内容层面的结果;403、401 則往往是權限或防護規則挡住了。本该公開的頁面返回 403,需要检查 WAF、CDN 或防盗鏈配置。
  • 429 属于主動限速,說明限速策略生效了,但也要確認阈值没有卡得太紧。

狀態碼正常但内容異常

狀態碼是 200,返回内容却只有几百字节,或者比正常頁面小很多,這通常意味着返回的是错誤頁、空模板或者被拦截後的提示頁。這類“假成功”不會進 5xx 統計,需要單獨筛出来看。

DNS 與 TLS 握手失敗

請求根本没到應用层,日誌里自然什么都没有。這類情况要從解析记錄、證书有效期、协议版本入手。證书過期或者配置了蜘蛛不支持的加密套件,表現就是抓取突然中断,而服務器日誌一切正常。

按什么顺序排查

  1. 先看日誌里蜘蛛的請求量有没有明顯變化,確認是“没来”還是“来了但失敗”。
  2. 按狀態碼分组統計,找出占比最高的那一類。
  3. 再按 URL 分组,看失敗是集中在某個目錄、某類模板,還是全站随机分布。
  4. 對照服務器监控,看失敗時間点是否和负载高峰、發布、重啟重合。
  5. 最後用命令行工具模拟一次請求,對比响應头和耗时是否與日誌一致。
排查时尽量按時間线比對:蜘蛛的失敗记錄、服務器监控曲线、發布记錄,三者對齐之後往往一眼就能看出因果。

几件平时就该做的事

  • 给抓取留出余量,不要让服務器在高峰期接近满载。
  • 頁面响應時間设一條内部告警线,超過就查,而不是等抓取量掉下来才回头看。
  • 證书、解析记錄這類到期型资源,提前安排續期提醒。
  • 体积過大的頁面适当拆分,减少單次传輸中断的概率。

抓取失敗大多不是單一原因,而是几個小問题叠加在一起。把日誌里能看到的失敗類型分開統計,比盯着一個總量數字要有用得多。