入口页上线之后,日志里会涌入大量带着各种 UA 的请求。有人看到 Baiduspider 就默认是百度蜘蛛,看到 Googlebot 就以为谷歌来抓了。实际上 UA 字符串可以随便写,任何脚本都能把自己标成蜘蛛。分不清真假的直接后果是:要么把伪装爬虫当成搜索引擎一路放行,被大量无效请求吃掉带宽;要么把真蜘蛛当成恶意流量拦掉,入口页长期不被发现。
为什么值得花时间区分请求来源
对蜘蛛池来说,入口页的价值在于让搜索引擎发现 URL。判断谁在抓取,会直接影响几件事:日志里的抓取数据是否可信、限速与防火墙规则要不要对某个 IP 放开、服务器资源是否被非目标流量占用。如果日志里大部分所谓的蜘蛛请求都是假的,那么基于这些数据做出的扩容、调整和判断都会走偏。
三类常见的“蜘蛛”
搜索引擎真蜘蛛
真蜘蛛通常有公开的 IP 段和反向解析规则。以 Google 为例,官方会公布爬虫 IP 段,并支持反向 DNS 验证:先把 IP 反解成域名,再对该域名做正向解析,确认能回到同一个 IP。百度、必应等也提供类似的验证方式或 IP 段列表。真蜘蛛的抓取行为相对有规律:请求间隔稳定、会请求 robots.txt、对同一站点的抓取深度和频率一般不会突然失控。
伪装成蜘蛛的采集器
这类请求的 UA 字符串和真蜘蛛一模一样,但 IP 对不上。常见特征包括:来源 IP 集中在少数几个机房段、不分昼夜地抓、只盯着特定类型的页面、不请求 robots.txt、Header 字段缺项或顺序异常、并发数明显高于正常爬虫。有些采集器还会轮换 UA,同一个 IP 一会儿自称 Baiduspider,一会儿又变成 Googlebot。
普通爬虫与监控工具
可用性监控、链接检查、SEO 审计工具也会抓页面。它们通常带有自己的 UA,或者干脆不带 UA。这类请求量小、周期性明显,一般不需要特别处理,但在统计抓取量时应当排除,否则会高估蜘蛛的活跃度。
验证身份的几种实用做法
- 反向 DNS 验证:IP 反解到域名,再正解回 IP,两边对得上才认。这是通用性最好的一种方法。
- 核对官方 IP 段:主流搜索引擎会公布 IP 段列表,定期更新到白名单里。注意列表会变,别配一次就不再管。
- 看行为而不是只看字符串:抓取频率、路径分布、robots.txt 请求、并发数这些指标组合起来判断,比单看 UA 靠谱得多。
- 记录完整字段:日志里至少保留 IP、UA、Referer、请求路径、响应码和时间。缺了 IP 和 Referer,后面基本没法回溯验证。
容易踩的几个误判
第一,把 CDN 或代理节点的 IP 当成蜘蛛 IP。经过 CDN 回源的请求,日志里看到的可能是节点地址,这时候应该看转发头而不是直接看连接 IP。第二,只做 UA 字符串匹配,完全不做 IP 验证,等于给伪装者开门。第三,IPv6 被漏掉——不少验证脚本只写了 IPv4 规则,蜘蛛从 IPv6 进来就被拦了。第四,限速阈值设得太粗,把真蜘蛛和采集器塞进同一个规则里,结果要么误伤要么形同虚设。
处理策略建议
- 确认身份的真蜘蛛:放行,不要人为限速,尤其是入口页刚上线、还在被发现的阶段。
- 验证失败的“蜘蛛”:按普通访问者处理,可以限速、可以要求验证,但不建议直接封禁整个 IP 段,以免误伤同机房的正常用户。
- 特征明显的采集流量:根据请求频率和路径分布单独设规则,必要时返回 403,同时保留日志以便复盘。
- 监控与审计工具:在白名单里标注清楚,统计抓取量时单独归类。
UA 只是一张名片,不能当身份证。判断一个请求是不是搜索引擎蜘蛛,靠的是 IP 验证加行为分析,而不是字符串匹配。
最后一点提醒:识别规则需要定期复查。搜索引擎的 IP 段会调整,采集脚本的伪装方式也在变,几个月前准确的规则放到今天未必还成立。把验证逻辑写进日常巡检清单,比一次性配好就不再过问要稳妥得多。