搜尋抓取

蜘蛛抓取前的第一道门槛:域名解析與连接建立

蜘蛛抓取一條 URL 之前,先要完成域名解析、连接建立與 TLS 握手。這些环节出問题时,訪問日誌里往往没有记錄,表現只是抓取频次下降或结果不一致。本文梳理解析、證书、CDN 與源站之間的常见断点,以及從日誌和資料中定位問题的方法。

搜尋抓取

蜘蛛抓取前的第一道门槛:域名解析與连接建立

抓取從解析域名開始

蜘蛛要抓一個 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、连接還是後端處理耗时。

如果確認是解析或證书問题,修复通常很快,恢复抓取却需要一段時間。蜘蛛會记住失敗的路径,短期内不會立刻回到原来的频次。

让抓取通道保持稳定

  1. DNS 记錄尽量简單,少用多层 CNAME,TTL 保持合理区間。
  2. 證书到期前完成續期,检查域名覆盖范围。
  3. 不要频繁更換源站 IP 或解析策略,给蜘蛛一段稳定的观察期。
  4. CDN、WAF 與源站對蜘蛛的策略保持一致,避免一层放行一层拦截。
  5. 把 DNS、證书、连通性纳入日常巡检,而不是等抓取量掉了再查。
抓取不只是内容层面的事,鏈路上的每一段都可能成為瓶颈。把基础设施当作抓取路径的一部分来看,很多問题會更容易定位。