做蜘蛛池或站点运营时,日誌里经常出現大量带 "Baiduspider"、"Googlebot" 之類 UA 的請求。這些請求里有一部分是真正的搜尋蜘蛛,也有一部分是伪装成搜尋蜘蛛的采集器、掃描器。如果不加区分,就容易得出错誤结论:以為入口頁被大量抓取,實际只是第三方爬虫在刷日誌。
為什么不能只看 User-Agent
UA 是客戶端自己填寫的字符串,任何人都可以伪造。只按 UA 統計抓取量,通常會出現两種誤判:一是把伪装爬虫算成搜尋蜘蛛,高估抓取情况;二是把真實抓取混在噪声里,看不出入口頁是否真的被回訪。
所以判断逻辑一般是层层叠加的:UA → IP 归属 → 行為特征,三层都吻合才相對可信。
第一层:UA 字符串的基础篩選
- 看完整 UA,而不只是關鍵詞。真實搜尋蜘蛛的 UA 通常带有产品名、版本或說明連結。
- 注意大小寫與空格差异,伪装爬虫常寫成 "baiduspider"、"googlebot " 這類變体。
- 留意同一 IP 在短時間内频繁切換不同搜尋引擎的 UA,這基本可以判定為伪装。
第二层:IP 與反向 DNS 驗證
主流搜尋引擎一般會公開自家蜘蛛的 IP 段或提供驗證方式,可以用反向 DNS 做交叉驗證:
- 對日誌里的来源 IP 做反向解析,得到域名。
- 再對该域名做正向解析,看是否能解析回同一個 IP。
- 正反结果一致,且域名归属于對應搜尋引擎,可信度才較高。
需要注意的是,站点如果用了 CDN 或反向代理,日誌里记錄的可能是 CDN 节点 IP,而不是蜘蛛的真實 IP。這種情况下要先從請求头里取真實来源 IP,再做驗證。
第三层:行為特征
- 是否請求 robots.txt:正規蜘蛛通常會在一定周期内讀取 robots.txt,伪装爬虫往往直接抓内容頁。
- 抓取节奏:正規蜘蛛一般有相對稳定的並發和間隔,伪装爬虫常见高並發、几乎無間隔、集中在少數路径。
- 請求路径:伪装爬虫容易集中在文章頁、接口或參數化 URL,對入口頁這類連結頁兴趣不大。
- 請求头完整性:Accept、Accept-Encoding、Referer 等字段缺失或異常,也是常见信号。
常见的几個坑
- 只按 UA 建白名單,结果把伪装爬虫也放了進来。
- 因為反向 DNS 查询慢,就完全跳過驗證,導致後續統計全部失真。
- 直接把某個 IP 段整段封禁,可能誤伤 CDN 或正常用戶。
- 日誌没记錄响應時間、狀態碼、响應体大小,只看到訪問次數,排查时缺少關键信息。
辨別真假蜘蛛的目的不是"逮住伪装爬虫",而是让抓取資料可信。資料不可信时,任何關于入口頁效果的判断都只是猜测。
實操建议
- 日誌至少保留:時間、来源 IP、UA、請求路径、狀態碼、响應時間、响應体大小。
- 按 UA + IP 分组統計,而不是只按 UA 匯總。
- 對高频、行為異常的来源優先做限速,而不是直接封禁。
- 定期抽查已驗證的 IP 列表,搜尋引擎的 IP 段會變動。
- 把入口頁和内容頁分開統計,观察两類頁面的抓取比例變化。
各家搜尋引擎提供的驗證方式和 IP 說明並不相同,具体以官方文档為准。如果日誌里同时存在大量可疑請求和少量真實抓取,建议先解决資料清洗問题,再去讨论入口頁的狀態碼、更新频率和連結结构,得到的结论會可靠得多。