搜尋抓取

分辨真假搜尋蜘蛛:日誌、User-Agent 與 DNS 回查的三层核驗法

日誌里自称 Googlebot 的請求未必是真的。本文给出從 User-Agent 初筛、反向 DNS 加正向回查到行為特征观察的三层核驗方法,並分別說明確認真蜘蛛、识別假蜘蛛和判断不清时该怎么處理,帮你在做抓取分析前先把日誌資料洗干净。

搜尋抓取

分辨真假搜尋蜘蛛:日誌、User-Agent 與 DNS 回查的三层核驗法

做站点运营的人多少都见過這样的日誌:某個 IP 一天抓了几萬次,User-Agent 寫着 Googlebot,但抓的全是搜尋结果頁和带參數的篩選地址;或者一個小爬虫顶着 Baiduspider 的名字,把整站图片和文章抓走。這些請求混在真實抓取日誌里,會让抓取分析彻底變形——你以為蜘蛛在抓重要頁面,其實那是一台采集器。所以分辨真假蜘蛛不是洁癖,而是抓取诊断的第一步。

為什么“假蜘蛛”值得單獨處理

User-Agent 是一段可以随便填的字符串,任何人寫個脚本都能自称 Googlebot。伪装成搜尋引擎蜘蛛,通常有三個目的:绕過部分站点的訪問限制、在日誌里隐藏自己、少被 WAF 拦。對站長来说,直接後果是:

  • 服務器带宽和 CPU 被占用,高峰时段可能拖慢真正的蜘蛛抓取;
  • 日誌里的“抓取量”虚高,按 UA 一統計就得出错誤结论;
  • 要么把真蜘蛛拦在门外,要么對采集器睁一只眼閉一只眼。
只看 User-Agent 就下结论,是抓取核驗里最常见的错誤。UA 是自我介绍,不是身份證。

三层核驗:從粗到细

第一层:User-Agent 初筛

先看字符串里的關鍵詞:Googlebot、Bingbot、Baiduspider、YandexBot、DuckDuckBot 等。正規蜘蛛的 UA 通常會带上自己的官方說明地址,例如 Googlebot 的字符串里會出現 +http://www.google.com/bot.html 這類連結;Baiduspider 常见形式是 Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)。但這一步只能把請求分成“疑似”和“明顯不是”,不能当成结论。

第二层:反向 DNS 加正向回查

這是目前成本最低、也最可靠的手段,Google 和 Bing 官方都用這套逻辑:

  1. 從日誌里取出訪問 IP;
  2. 對该 IP 做反向 DNS 解析,看主机名是否落在官方域名下,例如 Googlebot 常见 crawl-xx-xx-xx-xx.googlebot.com;
  3. 把解析出的主机名再做一次正向解析,確認解析回去的 IP 與原始 IP 完全一致;
  4. 對照搜尋引擎公布的 IP 段或驗證文档,確認域名後缀属于该引擎。

第 3 步最容易被跳過,也最不能跳過。伪造 PTR 记錄比伪造 UA 难,但並非做不到,正向回查能挡掉大部分伪装。

第三层:看行為特征

  • 抓取节奏:正規蜘蛛频率相對稳定,不會短時間把同一目錄刷成百上千次;
  • 是否讀取 robots.txt:绝大多數正規蜘蛛會先取一次 robots.txt,再按規則抓取;
  • 抓取對象:真蜘蛛會抓 HTML,也會按需取 CSS、JS、图片,采集器往往只盯着正文和列表頁;
  • 是否遵守限速:被返回 429、503 後,正規蜘蛛通常會放慢或退让。

核驗之後,三種處理方式

確認是真蜘蛛:回到抓取本身。看它抓了哪些 URL、返回了什么狀態碼、有没有大量 404 或 5xx、重要頁面是否在抓取名單里。如果 Sitemap 和站内連結都没問题,但抓取量偏低,再去看服務器响應時間和日誌里的超时记錄。

確認是假蜘蛛:robots.txt 里對特定 UA 做限制只能挡住守規矩的爬虫,更有效的办法是在 WAF 或 CDN 层按 IP 段限速、加驗證。注意先小范围观察,別一次性把整個網段封死。

暂时無法判断:先记錄,不要急着封。把同一個 IP 一周内的請求路径、频率、狀態碼拉出来看一遍,大多數伪装者會在這個阶段露馅。

几個容易踩的坑

  • 把 CDN、云厂商、代理出口的 IP 当成蜘蛛:這些 IP 上的 UA 可能是用戶浏览器传来的;
  • 只核 IPv4、忽略 IPv6:現在不少蜘蛛會走 IPv6 出口;
  • 封禁規則太宽:封掉一個 C 段,可能连带拦住搜尋引擎的另一個出口,表現就是抓取量突然下滑;
  • 把核驗当日常任務:除非流量異常、改版上线或抓取量突變,平时按月抽查一次就够。

真假蜘蛛的核驗,本质上是一次抓取环境的清点。把日誌里那些“看起来像蜘蛛”的請求分辨清楚,後面的抓取分析、URL 發現排查和内鏈優化才有可靠的資料基础。