抓取日誌里出現一個陌生 User-Agent,或者某個 IP 突然高频訪問全站,很多人的第一反應是「蜘蛛来了」。但 User-Agent 是請求头里最容易改寫的字段,只凭它做判断,既可能把伪造爬虫当成搜尋蜘蛛,也可能因為誤封真蜘蛛,让已经發現的 URL 迟迟進不了抓取队列。
為什么只認 User-Agent 不靠谱
UA 字符串是一段明文,任何脚本都能照着抄一份。你在日誌里看到 Baiduspider 或 Googlebot,並不代表請求真的来自搜尋引擎的机房。反過来,真蜘蛛的 UA 偶尔也會带上版本号、平台标识等後缀,用模糊匹配一刀切,容易把正常請求誤伤。
更稳妥的思路是:UA 只作為线索,真正用来定性的依據是網絡层信息——請求来自哪個 IP、這個 IP 属于谁。
反向 DNS 核驗:確認身份的三步流程
- 反查 IP:對来訪 IP 做一次反向解析,看它對應的域名是什么。
- 正向回查:把上一步拿到的域名再解析一次,確認解回来的 IP 與原始訪客 IP 完全一致。這一步常被称為前向確認反向解析(FCrDNS),缺少它,反查结果同样可以被伪造。
- 核對域名归属:检查域名後缀是否属于搜尋引擎的官方域,例如 googlebot.com、google.com、search.msn.com、baidu.com 一類。
三步都通過,基本可以按真蜘蛛處理;只通過第一步,或者正反解析對不上,就應该当作可疑流量單獨观察。
官方 IP 段是另一把尺子
- 主流搜尋引擎都會公布自己的出口 IP 列表,格式常见為 JSON 或纯文本。
- 把列表缓存到本地,定期更新,遇到陌生 IP 先比對,再决定是否放行。
- 站点接入 CDN 後,蜘蛛可能從邊缘节点回源,回源 IP 會随节点變化,核驗时要区分「訪客 IP」和「回源 IP」,別把节点地址当成蜘蛛地址。
日誌里值得盯的几個字段
- 請求路径:蜘蛛從哪個入口進来、顺着哪條内鏈走下去,這比訪問次數更能說明 URL 發現是否顺畅。
- 狀態碼分布:5xx 比例上升,往往意味着服務端不稳定,抓取频率可能随之走低。
- 响應時間:慢响應會長時間占用连接,同一时段能抓的頁面就變少。
- 抓取时段與频率:真蜘蛛通常有相對固定的节奏,突然全天候密集請求,值得核驗一下 IP。
- 是否取過 robots.txt 與 sitemap:正規蜘蛛一般會先讀規則文件,從不請求這两類文件的「蜘蛛」需要打問号。
两個方向的誤判都要防
第一種是把真蜘蛛拦在门外。防火墙按 UA 關键字拦截、WAF 把蜘蛛 IP 段誤判為攻击来源,都會直接掐断 URL 發現通道,而且從日誌上看只是「訪問變少」,不容易第一時間察觉。
第二種是把假蜘蛛放進来。伪造 UA 的采集程序會大量消耗服務器资源,把带宽和连接數挤占掉,間接影响真蜘蛛的抓取效率。
核驗的目的是让判断有依據,而不是给訪客贴标簽。真蜘蛛该放行,可疑流量该限速,這两件事的處理方式並不相同。
落到日常运营動作上
- 保留一份核驗记錄:IP、反查域名、核驗時間、處理结论,出問题时能回溯。
- 對可疑 IP 優先限速,而不是直接封禁。限速可逆,封禁一旦誤伤,恢复抓取需要更長時間。
- 定期检查 WAF、CDN 與主机防火墙規則,確認没有把官方 IP 段寫進黑名單。
- 把核驗结果和抓取資料對照着看:如果某段時間抓取量下降,同时日誌里出現大量被拒請求,就该顺着規則查一遍。
蜘蛛身份核驗不是一次性的工作,而是一個随着 IP 段更新、节点調整、規則變更不断复检的過程。把它做扎實,抓取日誌里的資料才值得信任,後續判断抓取路径和 URL 發現效率时,也不會被虚假流量带偏。