为什么日志里的“搜索蜘蛛”不能直接信
日志里出现 Googlebot、Bingbot、Baiduspider 之类的 User-Agent,只能说明这次请求自称是搜索蜘蛛,不能说明它真的是。User-Agent 是一段普通文本,任何脚本、采集器、扫描工具都能随手写上。反过来,一些搜索蜘蛛在特定情况下也可能不带标准 UA,比如某些渲染请求。所以判断真假,不能只看 UA 这一栏。
对蜘蛛池入口页来说,这一点尤其关键:入口页本身内容单薄,正常用户不会访问,日志里几乎只有爬虫。如果分不清真假,很容易把脚本刷出来的访问量当成“入口页起作用了”,从而错过真正的问题。
验证 Googlebot:反向解析加正向回查
这是目前比较可靠的公开方法,两步缺一不可。
- 从日志里取出访问 IP。
- 对 IP 做反向 DNS 查询,得到主机名。Googlebot 的主机名应以 .googlebot.com 或 .google.com 结尾。
- 对这个主机名再做一次正向 DNS 解析,把解析出的 IP 和日志里的 IP 对比。只有完全一致,才能确认是真 Googlebot。
只做第二步不做第三步是不够的:反向 DNS 记录并不能由访客控制,但只核对域名后缀而忽略正向回查,仍然有被绕过的空间。
其他搜索蜘蛛怎么核对
- Bingbot:思路相同,主机名以 .search.msn.com 结尾,再做正向回查。
- 百度蜘蛛:官方没有公开的反向解析规则,通常做法是到百度搜索资源平台查看官方公布的 IP 段,把日志 IP 与 IP 段比对。IP 段会更新,需要定期核对。
- 其他引擎:优先查官方文档,找不到校验方式时,就把它归到“待确认”,不要直接当成有效抓取。
除了 IP,还能看哪些行为特征
- 是否请求 robots.txt。真蜘蛛通常会在正式抓取前取一次 robots.txt。
- 抓取节奏是否平稳。有些真蜘蛛会按较固定的间隔访问,而脚本往往是一次性爆发。
- 是否只盯着入口页。如果你的入口页几乎不被普通用户访问,却频繁出现来自同一 IP 段的请求,值得警惕。
- 请求头是否过于简化。很多脚本只带 UA,Accept、Accept-Encoding 等字段缺失或明显不一致。
误判会带来什么后果
把假蜘蛛当真,等于用一个虚高的数字给自己发合格证。你可能以为入口页已经被搜索引擎看到,于是继续加链接、加页面,实际问题比如入口页被屏蔽、链接形式不可抓取、站点整体抓取频次偏低,一直没有解决。反过来,把真蜘蛛误判成假,也会让你白白删掉本来有效的入口页布局。
一个可以固定下来的核对流程
- 先把日志按 IP 聚合,统计每个 IP 的访问次数和抓取路径。
- 对出现频率高的 IP 逐个做反向解析和正向回查。
- 把通过校验的 IP 单独分组,作为“已确认蜘蛛”的数据源。
- 后续所有关于入口页效果的判断,只用这组数据,不看未校验的 UA 统计。
日志分析里最容易犯的错,是把“看到了爬虫字样”当成“搜索蜘蛛来过”。多花十分钟做校验,比事后返工划算。
常见误区
- 只看 User-Agent 就下结论,这是最常见的一种误判。
- 查一次反向 DNS 就收工,漏掉正向回查。
- 长期使用一份不更新的第三方蜘蛛 IP 库,把已经变更的网段当成真或假。
- 把入口页的访问日志直接当成成果,而没有和实际被抓取的目标 URL 做对照。
验证真假蜘蛛本身不复杂,麻烦的是坚持把它当成固定动作。对蜘蛛池入口页这种内容少、访问来源单一的场景,日志是最主要的观察窗口。先保证窗口里的数据是可信的,再去讨论 URL 发现和抓取效果,判断才不会跑偏。