常见問题

入口頁被正常抓取,目标站却被 WAF 拦下:抓取断点怎么排查

入口頁日誌正常、目标 URL 却没有抓取记錄,很多时候不是連結结构的問题,而是目标站的 WAF 把搜尋蜘蛛拦住了。本文讲清楚如何從返回碼、响應体积和時間分布判断拦截,常见的触發條件有哪些,以及在放行和绕過之間该怎么取舍。

常见問题

入口頁被正常抓取,目标站却被 WAF 拦下:抓取断点怎么排查

做蜘蛛池时经常遇到一種情况:入口頁日誌里能看到搜尋蜘蛛来抓,返回碼也正常,但目标 URL 在日誌里始终没有出現,偶尔出現一次還是 403 或者一段驗證碼頁面。很多人第一反應是入口頁没做好,實际上問题往往出在目标站這一侧的拦截上。

先分清:目标站到底返回了什么

入口頁被正常抓取,只說明“發現連結”這一步没問题;搜尋蜘蛛能不能進入目标 URL,取决于目标 URL 那一次請求的响應。排查时不要只看有没有被抓,要看那一條請求的返回碼、响應体积和响應内容。

  • 403 / 406:最常见,通常是 WAF 按 UA、IP 或請求特征直接拒绝。
  • 429:短時間請求频率超限,多见于同一来源抓得太密。
  • 503:可能是站点過载保護,也可能是拦截系統返回的伪装頁。
  • 200 但内容很小:返回的是驗證頁面或空壳,日誌上看着正常,實际没拿到内容。

WAF 常见的触發條件

  • 只放行浏览器 UA,把不認识的 UA 一律当作攻击流量拦截。
  • IP 策略過嚴,把机房 IP 段整段拉黑。
  • 單個来源短時間内訪問次數過多,触發频率規則。
  • 開啟了 JS 挑战或 Cookie 校驗,而搜尋蜘蛛不會执行這些。
  • 按地区限制訪問,抓取来源地不在允许范围内。
  • 入口頁集中指向同一目标站,被识別為異常来源。

怎么從日誌里確認是拦截,而不是別的問题

  1. 按目标 URL 過滤日誌,看返回碼的分布,而不是只看請求總量。
  2. 對比 UA,看搜尋蜘蛛的請求是否稳定對應同一個返回碼。
  3. 看响應体积,几十字节的 200 基本可以判定是拦截頁。
  4. 看時間分布,如果只在某個時間段被拦,多半是频率規則在起作用。
  5. 用普通浏览器打開同一 URL 做對照,確認服務本身是否正常。

如果浏览器訪問正常、只有搜尋蜘蛛被拦,基本可以确定是拦截策略的問题;如果浏览器也異常,先查站点自身和 CDN 节点,而不是繼續折腾入口頁。

處理思路:優先让目标站放行,而不是想办法绕過

合理做法是在目标站侧調整策略:把已知搜尋引擎的抓取来源加入白名單,或者關閉针對正常爬虫的 JS 挑战;降低入口頁到同一目标站的連結密度,避免短時間内集中触發频率規則;检查 CDN 與 WAF 的規則顺序,確認没有互相覆盖。

不建议通過伪造 UA 或频繁更換来源去绕過拦截。這種做法既不能让目标 URL 稳定被抓到,還可能让目标站把整個来源段拉黑,後續更难恢复。

有一種情况看起来像拦截,其實不是

目标站自己返回 5xx、DNS 解析異常、CDN 节点回源失敗,都會让搜尋蜘蛛拿不到内容,表現和拦截很像。排查顺序建议是:先確認服務可用性,再確認拦截規則,最後才回头检查入口頁和連結结构。

總的来说,入口頁负责“被發現”,目标站负责“被抓到”。当發現正常、抓取失敗时,把注意力從入口頁移到目标站的响應记錄上,通常能更快找到真正的原因。