蜘蛛池知识

蜘蛛池抓取鏈路排查:蜘蛛進了入口頁却不往下走,先看哪几處

蜘蛛池跑了一段時間,日誌里有蜘蛛来訪,但目标站的抓取量没變化,這種情况多半不是蜘蛛池没用,而是抓取鏈路中間断了。本文按入口頁、連結、跳轉、目标站四段拆開,给出一個可操作的排查顺序,帮你在加资源之前先找到真正的卡点。

蜘蛛池知识

蜘蛛池抓取鏈路排查:蜘蛛進了入口頁却不往下走,先看哪几處

很多人判断蜘蛛池有没有在跑,只看一件事:日誌里有没有蜘蛛。有来訪就放心了。但真正要看的是下一段——蜘蛛從入口頁出發之後,有没有繼續往目标站走。如果入口頁天天有蜘蛛,目标站的抓取量却纹丝不動,問题通常不在“蜘蛛池没用”,而在鏈路的某一环断了。

先分清两件事:来訪和传递

蜘蛛来訪只說明入口頁被發現了,連結传递才决定目标站能不能被顺带發現。這两件事的检查入口不一样:前者看入口站的訪問日誌,後者要看目标站的日誌里有没有出現對應的抓取记錄。如果只有前者没有後者,就可以按下面的顺序往下排。

第一處:入口頁自己是不是可抓的

這是最容易被忽略、也最容易修的一环。先確認三件事:

  • 狀態碼:入口頁返回 200。如果返回 301、302 或 404,蜘蛛會按規則處理,未必按你预想的方式繼續。
  • robots 與 meta:入口站自己的 robots.txt 没有把整站挡掉,頁面也没有 noindex。這两處只要中一個,蜘蛛来了也等于白来。
  • 响應時間:入口頁打開慢,蜘蛛可能在超时前就撤了。不要只看自己浏览器的速度,要看服務器端的首字节時間。

第二處:連結是不是真的能被爬到

入口頁面上看得见和爬得到是两回事。常见的情况有:

  • 連結是用 JS 渲染出来的,而蜘蛛拿到的是未渲染的 HTML;
  • 連結带 nofollow,或者被脚本拦截了預設跳轉;
  • 連結文本為空、图片連結缺 alt,或者被 CSS 层遮住,人点得到但结构上不明顯;
  • 锚点指向占位地址,實际跳轉靠脚本完成。

判断方法很直接:把入口頁的 HTML 源碼拉下来,用文本方式搜目标域名。源碼里搜不到,就別指望蜘蛛能顺着走過去。

第三處:跳轉方式决定了蜘蛛跟到第几跳

如果入口頁和目标站之間還有中間层,跳轉方式就格外重要。301 是明确可跟的;302 一般也會跟,但语义上不是永久迁移;JS 跳轉和 meta refresh 的可靠性明顯更低,多跳之後更容易断。中間层越多,每一跳都打折,最後能到目标站的抓取自然就少了。

第四處:目标站自己接不接得住

入口頁一切正常,也可能是目标站把蜘蛛挡在门外:目标站的 robots.txt、防火墙規則、CDN 的爬虫策略、频繁出現的 5xx,都會让蜘蛛拿到頁面却無法正常抓取。還有一種情况是目标站内容長期不變,蜘蛛来了几次發現没有新東西,来訪频率自然下降。這不是鏈路問题,是内容更新的問题。

一個可复用的排查顺序

  1. 在入口站日誌里確認蜘蛛确實来過,记錄時間與 UA;
  2. 同一時間段去目标站日誌里找,看有没有對應来源的抓取;
  3. 没有的话,回到入口頁,用源碼搜目标域名,確認連結存在;
  4. 確認連結存在後,检查跳轉類型和跳轉层數;
  5. 最後检查目标站的 robots、防火墙規則與响應狀態。
排查时別一次改好几處。一處一處改,每改一處观察几天日誌,才能知道是哪一步起了作用。

几個常见的判断誤区

第一,把蜘蛛来訪量当成效果指标。来訪量高但目标站抓取没變化,說明传递环节有問题,加再多入口站也只是在同一個断点上加量。第二,只看頁面能不能打開,不看源碼里有没有連結。第三,频繁調整入口頁结构和跳轉方式,導致日誌里几種情况混在一起,反而没法判断。

入口頁、連結、跳轉、目标站,這四段任何一段断了,後面的量都上不来。與其急着加资源,不如先把這几段的日誌對一遍,找到卡点再動手,通常比盲目扩容更省事。