蜘蛛池知识

蜘蛛池里的真假蜘蛛:UA 能伪造,驗證该看哪些信号

蜘蛛池运营中,日誌里出現的搜尋引擎 UA 並不都是真蜘蛛。本文讲清為什么 UA 可以伪造、rDNS 與官方 IP 段怎么驗證、行為特征能參考到什么程度,以及怎样避免把采集器和掃描器算成蜘蛛量,让判断回归到目标頁抓取與索引上。

蜘蛛池知识

蜘蛛池里的真假蜘蛛:UA 能伪造,驗證该看哪些信号

在蜘蛛池的日誌里,看到一串带 Googlebot、Baiduspider、bingbot 的 UA,很容易让人以為蜘蛛来得很勤。但如果把這些訪問直接当成抓取效果,往往會得出偏乐观的结论。UA 只是一段可以随意改寫的請求头,采集器、掃描器、压力測試脚本都能把自己寫成搜尋引擎蜘蛛。

為什么日誌里會有“假蜘蛛”

伪造 UA 的成本几乎為零,只是一行配置的事。采集程序伪装成搜尋引擎蜘蛛,是為了绕開一些针對性的限制;掃描器往往随机挑一個常见 UA;還有一些预取、监控、代理服務的請求也會带着類似的标识。另一方面,真實蜘蛛的 UA 也在變化,移動端 UA、图片代理、版本更新後的新标识,都可能被不熟悉的人当成假的。

所以問题不在于“有没有假蜘蛛”,而在于你用什么依據去区分它們。只靠 UA 列表做匹配,等于把判断權交给了一個可以随意填寫的字段。

驗證真蜘蛛的几個信号

rDNS 反查與正向確認

以 Googlebot 為例,先對来訪 IP 做反向 DNS,得到形如 crawl-xx-xx-xx-xx.googlebot.com 的主机名,再對该主机名做正向解析,確認能回到同一個 IP。两步都對上,可信度才高。Bing、Yandex 等也有類似的驗證思路。

要注意,不是所有搜尋引擎都長期提供可反查的 rDNS,有些請求會從云主机 IP 段發出。所以 rDNS 通過可以加分,rDNS 不通過也不一定就是假的,需要结合官方公布的 IP 段一起看。

官方 IP 段列表

Google、Bing 等會公布蜘蛛使用的 IP 段,有 JSON、文本等格式。把日誌里的 IP 與這份列表比對,比看 UA 可靠得多。百度、搜狗等可以结合搜尋资源平台和官方文档获取說明。维護一份定期更新的 IP 段清單,是蜘蛛池日誌分析的基本功。

行為特征只能做參考

  • 真蜘蛛通常有抓取节流,不會在几秒内把入口頁並發打满;
  • Googlebot 渲染頁面时會請求部分 JS、CSS 资源,百度蜘蛛多數情况下主要取 HTML;
  • 真蜘蛛一般會請求 robots.txt,但 Google 會缓存该文件,不一定每次都讀;
  • 真蜘蛛的請求通常不带 referer,或者 referer 指向自身域名;
  • 伪造者往往只請求目标 URL,不加载頁面里的资源,也不管 robots 規則。

這些特征能帮你缩小范围,但單獨拿出任何一條都不够:有的真蜘蛛也不加载资源,有的采集器同样會抓取 robots.txt。

用搜尋资源平台交叉驗證

Google Search Console 的抓取統計、百度搜尋资源平台的抓取频次與抓取诊断,是官方给出的口径。当日誌統計與官方資料差得很多时,優先相信官方資料。第三方工具给出的“蜘蛛量”如果只依據 UA 判断,通常會偏高。

几個容易踩的誤判

  • 只看 UA 判断真假,所有統計都建立在一個可伪造的字段上;
  • 把掃描器、漏洞探测的高频請求当成蜘蛛,誤以為池子“被盯上了”;
  • 用入口頁的蜘蛛訪問量代替目标頁被抓取量,忽略两者之間還有連結和跳轉;
  • 因為少量假蜘蛛就大規模封 IP,结果誤伤真實蜘蛛的正常抓取。

實操上的建议

  1. 先把日誌做结构化處理,把 UA、IP、rDNS 结果、請求路径放進同一張表里看;
  2. 對 Googlebot、bingbot 這類可驗證的蜘蛛做嚴格校驗,驗證不通過的不計入蜘蛛量;
  3. 把“入口頁被訪問次數”和“目标頁被抓取次數”分開統計,评估效果以後者為主;
  4. 封禁策略從宽到嚴,先观察再處理,避免一上来就按 UA 拉黑;
  5. 每隔一段時間更新官方 IP 段清單,搜尋引擎的 IP 會有調整。
蜘蛛池的效果不是看日誌里出現了多少個蜘蛛 UA,而是看目标頁有没有被實际抓取、有没有進入索引。UA 只是线索,不是證據。

分辨真假蜘蛛,本质上是把判断依據從“可伪造的字段”換到“可驗證的字段”。日誌里的蜘蛛訪問量可以參考,但决定要不要調整池子、怎么調整的,應该是经過驗證的抓取資料,以及目标頁在搜尋引擎里的實际表現。