蜘蛛池知识

蜘蛛池日誌里的真假蜘蛛:UA 能伪造,抓取量也會注水

日誌里带 bot 字样的請求未必是搜尋引擎蜘蛛,UA 是可以随手伪造的。本文讲如何用反向解析、IP 段比對和訪問行為三重驗證来识別真假蜘蛛,以及日誌分层清洗的思路,避免抓取量注水影响對入口頁效果的判断。

蜘蛛池知识

蜘蛛池日誌里的真假蜘蛛:UA 能伪造,抓取量也會注水

做蜘蛛池的人大多會看日誌,但日誌里的“蜘蛛”未必都是蜘蛛。UA 是客戶端自己填的一行字符串,改起来没有任何门槛。如果不加驗證就把這些訪問当成抓取量,很容易得出「入口铺得不错、蜘蛛来得挺勤」的错觉,進而做出错誤的調整。

為什么真假蜘蛛要分開看

把真假蜘蛛混在一起統計,至少有三個坏處:

  • 判断失真:抓取量被注水,看不出入口頁真正的抓取情况,優化方向會跑偏。
  • 资源浪費:為了應對虚假請求去扩容、換 IP、加服務器,成本花在無效的地方。
  • 風險誤判:某些采集脚本會高频抓取入口頁,表現和真蜘蛛混在一起,異常很难被發現。

只看 UA 是最常见的誤区

很多人判断蜘蛛的方式是 UA 里包含 spider、bot、Baiduspider 之類的字样。問题是,合法的蜘蛛會這么寫,随便寫個脚本的人也可以這么寫。反過来,真蜘蛛的 UA 有时也會带版本号、平台标识等後缀,用關键字一刀切同样會漏判。

更稳妥的思路是:UA 只作為初筛,真正决定要不要計入統計的是来源 IP 與訪問行為。

三重驗證:反解、IP 段、行為

反向 DNS 解析

主流搜尋引擎的蜘蛛 IP 通常能做反向解析,得到归属自家域名的主机名,再用正向解析核對能否回到同一 IP。只有双向都對得上,才算比較可信。注意這一步會有解析耗时,建议离线處理日誌,不要放在請求鏈路上。

IP 归属與網段

把日誌里的 IP 與官方公布的 IP 段比對,是成本最低的一层過滤。落在網段之外的,無论 UA 寫得多像,都先按普通訪客處理。IP 段會更新,需要定期同步,別用几年前存的一份列表一直跑。

訪問行為

行為特征往往比前两层更能說明問题:

  • 是否請求了 robots.txt,是否按 robots 的規則走;
  • 請求間隔是否有节奏,還是几毫秒内成片打過来;
  • 是否只抓入口頁而不跟進後續連結,或只盯着少數几個 URL 反复拉;
  • 是否加载静態资源,是否带 Referer,是否遵循 301、304 等响應。

抓取量注水的常见来源

除了解析不出主机名的脚本,還有几類容易被誤計:

  • 自家工具:站点监控、可用性探测、爬虫自查脚本,UA 里往往也带 bot 字样。
  • 第三方采集:某些聚合、镜像類程序會持續抓入口頁,频率稳定,很像蜘蛛。
  • 安全掃描:掃目錄、掃漏洞的請求會大量命中不存在的路径,混在日誌里很顯眼。
  • 代理與中轉:经過 CDN 或反向代理後,日誌里记錄的是节点 IP,看不到真實来源,需要看 X-Forwarded-For 之類的头部。

日誌怎么清洗才可用

推荐把日誌分成三层来看:

  1. 原始层:全部請求照常记錄,不做丢弃,方便回溯。
  2. 過滤层:按 IP 段與反解结果打标,标记為「已驗證蜘蛛」「疑似」「普通訪客」。
  3. 統計层:只對「已驗證蜘蛛」統計抓取频次、入口頁覆盖、狀態碼分布。

這样既不會因為過滤規則寫错而丢資料,也能让統計口径保持稳定。入口頁的抓取是否下降、某些路径是否長期没人碰,都只有在這一层才看得出来。

蜘蛛池的作用是让 URL 更容易被發現,不是刷出一堆好看的抓取數字。日誌口径失真的话,方向错了,铺得越多越費劲。

一点使用建议

  • 把 UA 当线索,把 IP 和行為当證據,三者不一致时以證據為准。
  • IP 段列表定期更新,反解结果缓存一段時間,避免每次都重新解析。
  • 統計口径固定下来後不要频繁改動,否則前後資料没法對比。
  • 發現疑似假蜘蛛占比很高时,先排查自家工具和第三方采集,再考虑是否要做频率限制。

真假蜘蛛的区分不是為了把數字做小,而是為了让自己清楚:入口頁到底有没有被真正抓取,下一步该往哪儿調。