常见問题

日誌里自称搜尋蜘蛛的 UA 未必可信,一套基础校驗方法

訪問日誌里出現搜尋引擎 UA,並不代表一定就是真的搜尋蜘蛛。本文介绍反向 DNS 回查、官方 IP 段比對、行為特征观察三步校驗方法,帮助区分真蜘蛛與伪装爬虫,避免因誤判而错估蜘蛛池入口頁的抓取效果,也避免誤封真實抓取。

常见問题

日誌里自称搜尋蜘蛛的 UA 未必可信,一套基础校驗方法

做蜘蛛池和站点运营的人,几乎每天都會看訪問日誌。日誌里出現 Baiduspider、Googlebot、bingbot 之類的 UA 时,很多人的第一反應是“搜尋蜘蛛来了”。但 UA 只是一個 HTTP 請求头字段,任何人寫几行代碼就能伪造。僅凭 UA 判断,很容易把普通爬虫、采集程序甚至掃描工具当成搜尋蜘蛛,從而對抓取情况做出错誤判断。

為什么 UA 不能單獨作為判断依據

User-Agent 由客戶端自行填寫,服務端無法强制约束。常见的誤判有几種:

  • 采集工具直接照抄搜尋引擎 UA,日誌里看起来和真蜘蛛一模一样;
  • 安全掃描器為了降低被拦截概率,也會伪装成搜尋引擎;
  • 某些 CDN、监控、预渲染服務同样會带上類似 UA。

反過来也成立:真蜘蛛有时會使用移動版 UA 或带版本号後缀的 UA,如果只匹配固定字符串,反而會漏判。

第一步:反向 DNS 回查

主流搜尋引擎都支持用反向 DNS 驗證来源。做法是先拿訪問日誌里的 IP 做一次反向解析,看域名是否属于對應搜尋引擎的官方域;再把解析出来的域名做一次正向解析,確認能回到同一個 IP。

  • Baiduspider:反向解析结果一般落在 baidu.com 相關域下;
  • Googlebot:一般落在 googlebot.com 或 google.com 下;
  • Bingbot:一般落在 search.msn.com 相關域下。

两步都通過,才基本可以確認。只做反向解析、不做正向回查,仍然可能被伪造的 PTR 记錄骗過。可以用 host、dig -x、nslookup 等命令手工驗證,規模大时再考虑脚本批量處理。

第二步:看 IP 段归属

搜尋引擎官方通常會公布自己的爬虫 IP 段,以 JSON 或文本形式提供。把日誌 IP 和官方段做比對,比逐個反查更快。需要注意的是,IP 段會更新,最好定期重新拉取,不要用一份几年前的副本長期比對。

如果服務器前面有 CDN 或反向代理,日誌里记錄的可能是 CDN 节点 IP,而不是真實来源 IP。這时要先確認是否讀取了 X-Forwarded-For 之類的头部,否則校驗的對象就错了。

第三步:看行為特征

IP 和 DNS 都难以確認时,行為特征可以作為辅助參考:

  • 真蜘蛛通常有相對稳定的抓取节奏,請求間隔比較規律,不會在短時間内把全站打一遍;
  • 會讀取 robots.txt 並遵守其中的 Disallow 規則;
  • 請求头比較完整,一般會带 Accept、Accept-Encoding 等字段;
  • 不會主動提交表單、登入、点击广告,也不會掃描常见後台路径。

行為特征只能作為參考,不能單獨下结论,尤其是流量小的站点,样本太少时判断容易失真。

發現伪装爬虫之後怎么處理

先分清影响:如果只是普通抓取,占用带宽有限,可以直接忽略;如果频率高到影响服務器,再考虑處理。

  1. 在 WAF 或 Nginx 层按 IP、频率、UA 组合做限速;
  2. 對確認伪造搜尋引擎 UA 的 IP 單獨封禁,別誤伤真蜘蛛 IP 段;
  3. 保留一段時間的日誌,方便回溯封禁是否誤伤;
  4. 不要因為出現伪造 UA 就整体屏蔽搜尋引擎 UA,那样會连带把真蜘蛛挡在外面。

對蜘蛛池运营的實际意义

蜘蛛池的效果判断,很大程度上依赖日誌。如果把伪装爬虫当成搜尋蜘蛛,很容易得出“入口頁被抓了很多次”的结论,但目标 URL 迟迟不收錄;反過来,如果把真蜘蛛誤判為伪装,又可能封掉真正带来抓取的机會。所以校驗這一步值得做扎實,而不是只看 UA 字符串。

日誌是判断抓取情况的基础,但日誌里的 UA 只是线索之一。IP、DNS、行為三者交叉驗證,结论才更可靠。