蜘蛛進站抓取时,並不是每個 URL 都能顺利拿到内容。遇到响應慢的地址,它不會一直等下去,而是按自己的超时和重试規則處理。理解這套規則,能解释不少「頁面明明在线,却迟迟没被抓」的現象。
抓取請求有明确的時間上限
蜘蛛發起的每次請求,都带着一個等待上限。常见的時間节点大致分两段:
- 连接阶段:TCP 握手、TLS 协商如果長時間没有回應,請求會被直接判為失敗。
- 响應阶段:连上之後服務器迟迟不给首字节,或者内容传到一半卡住,同样會触發超时。
這两段里任何一段超时,本次抓取基本就算失敗。蜘蛛拿不到内容,也就無從解析頁面里的連結,這條路径在這一轮就断在這里。
超时之後,蜘蛛通常會做什么
第一次失敗並不等于放弃。常见的處理顺序大致如下:
- 同一次抓取内做有限次數的重试,間隔通常較短。
- 如果连續几次都失敗,把這個 URL 暂时标记為「不稳定」。
- 降低该目錄或该主机下 URL 的訪問频率,把額度挪给响應正常的地址。
- 過一段時間再试探性回訪,確認是偶發問题還是持續故障。
所以一次短时抖動影响有限,但如果某個目錄長期慢,蜘蛛會整体降低對它的兴趣。這不是惩罚,只是把有限资源用在能拿到内容的地方。
哪些表現容易被判成「慢」
- 首字节時間高:慢查询、接口串行調用、模板渲染阻塞都會推高 TTFB。
- 偶發 5xx:负载高时偶尔报错,往往比稳定返回错誤更容易招来反复重试。
- 内容截断:响應头寫了完整長度,實际传輸中断,蜘蛛可能只拿到半截頁面。
- 限速與拦截:返回 429 或挑战頁,蜘蛛看到的是「不可用」,而不是内容。
慢 URL 會拖累整條抓取路径
蜘蛛的抓取是有节奏的,一個慢請求會占用它對某個主机的並發額度。当列表頁、频道頁這類入口變慢时,從它們出發能被發現的新 URL 數量會同步下降。表面上看只是几個頁面慢,實际影响的是下游一整片路径的發現速度。
可以自查的几個点
- 用日誌或抓取工具統計蜘蛛請求的响應時間分布,重点看 P95、P99,而不是平均值。
- 確認超时是集中在少數模板,還是全站性。
- 检查服務器日誌里 5xx、429、连接中断的出現频率與時間段。
- 對确實耗时的接口類頁面,考虑静態化或缓存兜底,让蜘蛛至少能拿到可解析的 HTML。
- 把重要入口頁從重负载逻辑里拆出来,別让列表頁等着接口返回。
蜘蛛的耐心是有限资源。响應時間每降一档,同样的抓取額度就能多走几條路径。
小结
超时與重试是抓取环节里最容易被忽略的一环。頁面能打開不代表蜘蛛能顺利抓到;把响應時間、错誤率和连接稳定性控制住,URL 發現和内鏈路径的推進才有基础。