做蜘蛛池或站点运营时,日志里经常出现大量带 "Baiduspider"、"Googlebot" 之类 UA 的请求。这些请求里有一部分是真正的搜索蜘蛛,也有一部分是伪装成搜索蜘蛛的采集器、扫描器。如果不加区分,就容易得出错误结论:以为入口页被大量抓取,实际只是第三方爬虫在刷日志。
为什么不能只看 User-Agent
UA 是客户端自己填写的字符串,任何人都可以伪造。只按 UA 统计抓取量,通常会出现两种误判:一是把伪装爬虫算成搜索蜘蛛,高估抓取情况;二是把真实抓取混在噪声里,看不出入口页是否真的被回访。
所以判断逻辑一般是层层叠加的:UA → IP 归属 → 行为特征,三层都吻合才相对可信。
第一层:UA 字符串的基础筛选
- 看完整 UA,而不只是关键词。真实搜索蜘蛛的 UA 通常带有产品名、版本或说明链接。
- 注意大小写与空格差异,伪装爬虫常写成 "baiduspider"、"googlebot " 这类变体。
- 留意同一 IP 在短时间内频繁切换不同搜索引擎的 UA,这基本可以判定为伪装。
第二层:IP 与反向 DNS 验证
主流搜索引擎一般会公开自家蜘蛛的 IP 段或提供验证方式,可以用反向 DNS 做交叉验证:
- 对日志里的来源 IP 做反向解析,得到域名。
- 再对该域名做正向解析,看是否能解析回同一个 IP。
- 正反结果一致,且域名归属于对应搜索引擎,可信度才较高。
需要注意的是,站点如果用了 CDN 或反向代理,日志里记录的可能是 CDN 节点 IP,而不是蜘蛛的真实 IP。这种情况下要先从请求头里取真实来源 IP,再做验证。
第三层:行为特征
- 是否请求 robots.txt:正规蜘蛛通常会在一定周期内读取 robots.txt,伪装爬虫往往直接抓内容页。
- 抓取节奏:正规蜘蛛一般有相对稳定的并发和间隔,伪装爬虫常见高并发、几乎无间隔、集中在少数路径。
- 请求路径:伪装爬虫容易集中在文章页、接口或参数化 URL,对入口页这类链接页兴趣不大。
- 请求头完整性:Accept、Accept-Encoding、Referer 等字段缺失或异常,也是常见信号。
常见的几个坑
- 只按 UA 建白名单,结果把伪装爬虫也放了进来。
- 因为反向 DNS 查询慢,就完全跳过验证,导致后续统计全部失真。
- 直接把某个 IP 段整段封禁,可能误伤 CDN 或正常用户。
- 日志没记录响应时间、状态码、响应体大小,只看到访问次数,排查时缺少关键信息。
辨别真假蜘蛛的目的不是"逮住伪装爬虫",而是让抓取数据可信。数据不可信时,任何关于入口页效果的判断都只是猜测。
实操建议
- 日志至少保留:时间、来源 IP、UA、请求路径、状态码、响应时间、响应体大小。
- 按 UA + IP 分组统计,而不是只按 UA 汇总。
- 对高频、行为异常的来源优先做限速,而不是直接封禁。
- 定期抽查已验证的 IP 列表,搜索引擎的 IP 段会变动。
- 把入口页和内容页分开统计,观察两类页面的抓取比例变化。
各家搜索引擎提供的验证方式和 IP 说明并不相同,具体以官方文档为准。如果日志里同时存在大量可疑请求和少量真实抓取,建议先解决数据清洗问题,再去讨论入口页的状态码、更新频率和链接结构,得到的结论会可靠得多。