做蜘蛛池的人大多会看日志,但日志里的“蜘蛛”未必都是蜘蛛。UA 是客户端自己填的一行字符串,改起来没有任何门槛。如果不加验证就把这些访问当成抓取量,很容易得出「入口铺得不错、蜘蛛来得挺勤」的错觉,进而做出错误的调整。
为什么真假蜘蛛要分开看
把真假蜘蛛混在一起统计,至少有三个坏处:
- 判断失真:抓取量被注水,看不出入口页真正的抓取情况,优化方向会跑偏。
- 资源浪费:为了应对虚假请求去扩容、换 IP、加服务器,成本花在无效的地方。
- 风险误判:某些采集脚本会高频抓取入口页,表现和真蜘蛛混在一起,异常很难被发现。
只看 UA 是最常见的误区
很多人判断蜘蛛的方式是 UA 里包含 spider、bot、Baiduspider 之类的字样。问题是,合法的蜘蛛会这么写,随便写个脚本的人也可以这么写。反过来,真蜘蛛的 UA 有时也会带版本号、平台标识等后缀,用关键字一刀切同样会漏判。
更稳妥的思路是:UA 只作为初筛,真正决定要不要计入统计的是来源 IP 与访问行为。
三重验证:反解、IP 段、行为
反向 DNS 解析
主流搜索引擎的蜘蛛 IP 通常能做反向解析,得到归属自家域名的主机名,再用正向解析核对能否回到同一 IP。只有双向都对得上,才算比较可信。注意这一步会有解析耗时,建议离线处理日志,不要放在请求链路上。
IP 归属与网段
把日志里的 IP 与官方公布的 IP 段比对,是成本最低的一层过滤。落在网段之外的,无论 UA 写得多像,都先按普通访客处理。IP 段会更新,需要定期同步,别用几年前存的一份列表一直跑。
访问行为
行为特征往往比前两层更能说明问题:
- 是否请求了 robots.txt,是否按 robots 的规则走;
- 请求间隔是否有节奏,还是几毫秒内成片打过来;
- 是否只抓入口页而不跟进后续链接,或只盯着少数几个 URL 反复拉;
- 是否加载静态资源,是否带 Referer,是否遵循 301、304 等响应。
抓取量注水的常见来源
除了解析不出主机名的脚本,还有几类容易被误计:
- 自家工具:站点监控、可用性探测、爬虫自查脚本,UA 里往往也带 bot 字样。
- 第三方采集:某些聚合、镜像类程序会持续抓入口页,频率稳定,很像蜘蛛。
- 安全扫描:扫目录、扫漏洞的请求会大量命中不存在的路径,混在日志里很显眼。
- 代理与中转:经过 CDN 或反向代理后,日志里记录的是节点 IP,看不到真实来源,需要看 X-Forwarded-For 之类的头部。
日志怎么清洗才可用
推荐把日志分成三层来看:
- 原始层:全部请求照常记录,不做丢弃,方便回溯。
- 过滤层:按 IP 段与反解结果打标,标记为「已验证蜘蛛」「疑似」「普通访客」。
- 统计层:只对「已验证蜘蛛」统计抓取频次、入口页覆盖、状态码分布。
这样既不会因为过滤规则写错而丢数据,也能让统计口径保持稳定。入口页的抓取是否下降、某些路径是否长期没人碰,都只有在这一层才看得出来。
蜘蛛池的作用是让 URL 更容易被发现,不是刷出一堆好看的抓取数字。日志口径失真的话,方向错了,铺得越多越费劲。
一点使用建议
- 把 UA 当线索,把 IP 和行为当证据,三者不一致时以证据为准。
- IP 段列表定期更新,反解结果缓存一段时间,避免每次都重新解析。
- 统计口径固定下来后不要频繁改动,否则前后数据没法对比。
- 发现疑似假蜘蛛占比很高时,先排查自家工具和第三方采集,再考虑是否要做频率限制。
真假蜘蛛的区分不是为了把数字做小,而是为了让自己清楚:入口页到底有没有被真正抓取,下一步该往哪儿调。