抓取從解析域名開始
蜘蛛要抓一個 URL,第一步不是發 HTTP 請求,而是把域名解析成 IP。這一步通常很快,但一旦出問题,表現往往不是 404 或 500,而是抓取频次悄悄下降。訪問日誌里看不到记錄,却在抓取資料里出現拐点。
常见的情况包括:權威 DNS 响應慢、解析结果在多個 IP 之間来回切換、CNAME 鏈過長、TTL 設定過短導致频繁重查。蜘蛛通常有自己的 DNS 缓存,但如果每次解析结果都不一样,它可能在不同 IP 上得到不一致的响應,抓取行為也會變得不稳定。
连接建立與 TLS 握手
解析到 IP 之後是 TCP 连接,再往後是 TLS 握手。對 https 站点来说,證书是硬门槛:過期、域名不匹配、中間證书缺失,都可能導致抓取直接失敗。這類失敗通常不會落在源站訪問日誌里,因為請求根本没到達源站。
- 證书到期時間要提前安排續期,不要等到最後一天。
- 確認證书覆盖带 www 與不带 www 的域名,避免解析到了却握手不成功。
- SNI、ALPN、HTTP/2 的配置要和 CDN、源站保持一致。
- 如果只支持較老的低版本 TLS,部分抓取客戶端可能连不上。
CDN、WAF 與源站之間的那一段
很多时候域名解析到的是 CDN 邊缘节点,蜘蛛拿到的是邊缘返回的頁面。這一层如果有 WAF 規則、速率限制或人机校驗,蜘蛛可能被挡在门外,而你從源站日誌里什么也看不到。回源失敗、邊缘缓存異常、按地区返回不同内容,也會让同一批 URL 的抓取结果前後不一致。
還要注意 IPv4 與 IPv6 的差异。有些域名只對其中一種协议做了完整配置,蜘蛛走另一條路时可能超时或得到預設頁。定期用两種协议分別测一测,比較省事。
從日誌和資料里判断問题出在哪
DNS 失敗和连接失敗不會出現在訪問日誌中,所以不能只盯着 200 和 404 的比例。可以结合几個信号:
- 抓取總量在没有改版的情况下明顯下滑。
- 不同机房、不同解析 IP 的返回结果不一致。
- 用 curl --resolve 指定 IP 訪問,复現蜘蛛看到的结果。
- 看 TTFB 的构成,区分是 DNS、连接還是後端處理耗时。
如果確認是解析或證书問题,修复通常很快,恢复抓取却需要一段時間。蜘蛛會记住失敗的路径,短期内不會立刻回到原来的频次。
让抓取通道保持稳定
- DNS 记錄尽量简單,少用多层 CNAME,TTL 保持合理区間。
- 證书到期前完成續期,检查域名覆盖范围。
- 不要频繁更換源站 IP 或解析策略,给蜘蛛一段稳定的观察期。
- CDN、WAF 與源站對蜘蛛的策略保持一致,避免一层放行一层拦截。
- 把 DNS、證书、连通性纳入日常巡检,而不是等抓取量掉了再查。
抓取不只是内容层面的事,鏈路上的每一段都可能成為瓶颈。把基础设施当作抓取路径的一部分来看,很多問题會更容易定位。