看蜘蛛池的访问日志时,最容易犯的一个错误是:看到 UA 里写着 Baiduspider、Googlebot 或者 bingbot,就默认这是搜索引擎的抓取。实际上 UA 字符串是可以随手改的,采集工具、扫描器、甚至浏览器插件都能把 UA 伪装成任意值。如果不做核验,很容易把一堆无关流量当成抓取信号,进而做出错误的资源调整。
为什么日志里会混进假蜘蛛
常见的来源有几类:
- 采集软件和爬虫框架的默认或自定义 UA,很多会直接模仿常见搜索引擎;
- 安全扫描、漏洞探测工具,它们为了绕过简单的拦截规则,也会套用搜索引擎 UA;
- 有人手动改 UA 做压力测试、抓取内容或做竞品监控;
- 部分代理、预取服务和监控探针,UA 里会带上 bot 字样,但并不属于搜索引擎。
这些请求落在入口页上,看起来和真蜘蛛没有区别,但用途完全不同。
第一层:UA 字符串只当线索,不当结论
UA 的价值在于快速分流,而不是判定。可以先用它把日志分桶:声称是百度的、声称是 Google 的、声称是必应的、其他。分桶之后重点看两类异常:一是 UA 与声称身份明显不符,比如一个自称 Googlebot 的请求却只在抓 HTML、完全不碰任何静态资源;二是同一 IP 在短时间内用多个不同搜索引擎的 UA 轮流请求。这两类基本可以列为可疑,但不能仅凭 UA 就封禁。
第二层:rDNS 反查与官方 IP 段核对
这是最有效的一步。主流搜索引擎都提供了验证方式:对来访 IP 做反向 DNS 解析,检查解析出的域名是否落在官方域名下,然后再对该域名做一次正向解析,确认能解析回同一个 IP。只做单向反查是不够的,因为反向解析记录同样可以被伪造,一正一反互相印证才有意义。
另一个思路是直接比对官方公布的 IP 段列表。把日志里的 IP 与列表做匹配,不在列表里的就可以先归为可疑。要注意几点:CDN、云服务和代理转发会让真实来源 IP 变成回源 IP;IPv6 地址段需要单独维护;官方 IP 段会定期更新,最好隔一段时间同步一次。
第三层:行为特征辅助判断
身份核验通过之后,行为特征可以进一步确认,也可以用来发现一些边界情况:
- 抓取频率是否平稳,真蜘蛛通常有相对稳定的节奏,而不是短时间爆发式请求;
- 是否读取 robots.txt,是否遵守其中的屏蔽规则;
- 是否请求页面引用的静态资源,很多采集工具只取 HTML;
- 请求头是否完整,Referer、Accept、Accept-Language 这些字段缺失或异常是常见信号;
- 并发连接数和请求间隔是否符合搜索引擎的公开说明。
这些特征单独看都不够,组合起来判断更可靠。
假蜘蛛流量会带来哪些误判
影响主要体现在三个方面。第一是效果判断失真:看到入口页每天都有一批带着搜索引擎 UA 的请求,就以为 URL 已经被发现了,实际上搜索引擎可能根本没来过。第二是资源调整跑偏:根据这些假数据去改链接结构、调入口页数量、换跳转方式,等于在错误的反馈上做优化。第三是服务器压力被错误归因,明明是采集流量,却以为是搜索引擎在加大抓取。
反向的风险同样存在。如果只用 UA 做封禁,很可能把真蜘蛛一起挡掉,尤其是一些低频抓取,一旦被拦,恢复需要时间。
可执行的核验顺序
- 按 UA 粗筛,把日志分成几个桶,先看有没有明显异常的组合。
- 对可疑 IP 做 rDNS 反查,并做正向解析回验。
- 比对官方 IP 段列表,把不在列表里的 IP 单独标记。
- 结合行为特征复核,确认哪些是采集、哪些是扫描。
- 拦截时优先按 IP 段处理,而不是只按 UA,避免误伤。
- 保留原始日志和核验记录,方便后续回溯和调整规则。
核验的目的是让判断更接近事实,而不是把所有非官方流量都挡在门外。入口页的价值在于被发现,过度拦截有时候比放过更麻烦。
蜘蛛池的效果本来就依赖日志反馈来调整,如果反馈源头是脏的,后面所有动作都会偏。花一点时间把蜘蛛身份核验做扎实,比反复调整入口页结构更划算。