做站点运营的人多少都见過這样的日誌:某個 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 官方都用這套逻辑:
- 從日誌里取出訪問 IP;
- 對该 IP 做反向 DNS 解析,看主机名是否落在官方域名下,例如 Googlebot 常见 crawl-xx-xx-xx-xx.googlebot.com;
- 把解析出的主机名再做一次正向解析,確認解析回去的 IP 與原始 IP 完全一致;
- 對照搜尋引擎公布的 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 發現排查和内鏈優化才有可靠的資料基础。