抓取不是從 GET 請求開始的
讨论蜘蛛抓取时,很多人盯着 HTTP 狀態碼和响應時間。但從蜘蛛决定訪問一個 URL 到真正拿到内容,中間還有一段容易被忽略的路:DNS 解析、TCP 连接、TLS 握手。任何一步失敗,蜘蛛看到的都不是 200,而是连接错誤、超时或者握手失敗。日誌里可能只留下一條“抓取失敗”,具体原因需要往前看。
對站点来说,這些环节属于基础设施层。它們不直接决定内容质量,却會影响蜘蛛能不能稳定地把 URL 抓完。
DNS 解析:第一步就可能卡住
蜘蛛在請求前要先把域名解析成 IP。解析時間過長、解析结果不稳定,或者不同地区返回不同 IP,都可能让抓取表現不一致。
常见問题包括:
- DNS 服務商响應慢,解析耗时波動大;
- TTL 設定過短,蜘蛛每次抓取都要重新解析;
- 多 IP 轮询时,個別 IP 已经不可用但仍在返回;
- 域名同时解析到 CDN 和源站,導致连接目标混乱。
這些問题的表現往往不是大面积失敗,而是零星超时、間歇性连接失敗。如果蜘蛛抓取量本身不大,這種波動很容易被当成偶發情况忽略。
TLS 握手:證书和协议版本都會影响抓取
現在大多數站点走 HTTPS。TCP 连接建立後,還要完成 TLS 握手。證书過期、證书鏈不完整、SNI 配置错誤、TLS 版本過舊,都會让蜘蛛在握手阶段断開。
有些站点在浏览器里訪問正常,是因為浏览器對某些問题有兼容或缓存机制;蜘蛛不一定有同样的容忍度。比如:
- 證书鏈缺少中間證书,部分客戶端直接失敗;
- 只支持較老的 TLS 版本,新爬虫可能無法协商;
- 多域名共用證书时,某個域名不在證书覆盖范围内;
- OCSP 装订或吊销检查超时,拖長握手時間。
建议定期检查證书有效期和鏈完整性,並保持服務端 TLS 配置處于受支持的主流版本。這不是為了“讨好蜘蛛”,而是让所有正常的 HTTP 客戶端都能稳定连接。
连接超时與连接复用
蜘蛛通常會复用连接,也就是在一個 TCP 连接上连續請求多個 URL。這样做能减少握手開销,但也對服務器的连接保持時間和並發處理提出要求。
如果服務器把空闲连接超时设得太短,蜘蛛刚准备發下一個請求,连接已经被關閉,它就要重新建连。反复如此,抓取节奏會明顯變慢。反過来,如果服務器長時間不回收连接,也可能占用资源。
比較稳妥的做法是:
- 让连接保持時間與站点實际抓取频率大致匹配;
- 不要在網關层随意注入過短的超时;
- 關注源站並發连接數,避免高峰期把蜘蛛請求排到队尾。
连接超时設定没有统一标准,關键是不要因為過短或過嚴,让正常的抓取請求在建立阶段就被切断。
這些损耗怎么排查
從服務器日誌和监控里,可以重点看几類信号:
- 连接失敗记錄:蜘蛛 IP 的請求是否在建立连接阶段就中断;
- TLS 错誤日誌:是否有握手失敗、證书告警;
- DNS 解析耗时:解析時間是否明顯高于日常水平;
- 连接复用率:同一蜘蛛是否频繁新建连接。
如果日誌只记錄了成功請求,這些前置失敗可能看不到。必要时可以在網關或负载均衡层保留连接错誤日誌,至少確認失敗發生在哪一步。
日常检查清單
- 證书有效期和證书鏈是否完整;
- DNS 解析是否稳定,TTL 是否合理;
- 多 IP 或多 CDN 节点是否存在不可用實例;
- 服務器连接超时和 keep-alive 設定是否過短;
- 高峰期源站是否出現连接排队或拒绝;
- 蜘蛛抓取日誌里是否出現集中性的连接错誤。
這些检查不能保證頁面一定被收錄,但能减少蜘蛛在“還没看到内容”之前就失敗的情况。抓取稳定是後續一切工作的前提。
抓取路径看起来是從 URL 到頁面,實际上前面還有一段基础设施路径。把 DNS、TLS 和连接阶段的损耗控制住,蜘蛛才有机會走到真正的内容面前。