在蜘蛛池的日誌里,看到一串带 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,结果誤伤真實蜘蛛的正常抓取。
實操上的建议
- 先把日誌做结构化處理,把 UA、IP、rDNS 结果、請求路径放進同一張表里看;
- 對 Googlebot、bingbot 這類可驗證的蜘蛛做嚴格校驗,驗證不通過的不計入蜘蛛量;
- 把“入口頁被訪問次數”和“目标頁被抓取次數”分開統計,评估效果以後者為主;
- 封禁策略從宽到嚴,先观察再處理,避免一上来就按 UA 拉黑;
- 每隔一段時間更新官方 IP 段清單,搜尋引擎的 IP 會有調整。
蜘蛛池的效果不是看日誌里出現了多少個蜘蛛 UA,而是看目标頁有没有被實际抓取、有没有進入索引。UA 只是线索,不是證據。
分辨真假蜘蛛,本质上是把判断依據從“可伪造的字段”換到“可驗證的字段”。日誌里的蜘蛛訪問量可以參考,但决定要不要調整池子、怎么調整的,應该是经過驗證的抓取資料,以及目标頁在搜尋引擎里的實际表現。