为什么要先分清真假
蜘蛛池入口页是对外开放的,只要 URL 被曝光,收到的请求里就一定会混进各种爬虫:有搜索引擎官方蜘蛛,也有伪装成蜘蛛的采集程序、扫描器和压测脚本。这两类请求的处理方式几乎相反——真蜘蛛要保证它顺利拿到页面,假蜘蛛则要考虑限流或拦截。如果只凭 UA 一句话就下结论,结果往往是该放行的被拦了,该拦的反而一路放行。
UA 是最外层,也最不可信
请求头里的 User-Agent 最容易看到,也最容易伪造。任何人写一行代码就能把自己伪装成 Googlebot 或 Baiduspider。所以 UA 只能做初筛,不能当结论。观察时注意两点:
- UA 是否完整。真蜘蛛的 UA 通常格式固定,带有版本号或平台标识;伪造的 UA 经常缺字段、大小写混乱,或者干脆是几个关键词拼出来的。
- UA 与行为是否吻合。如果自称是某搜索引擎的蜘蛛,却频繁请求 robots.txt 之外的敏感路径、带上一堆杂乱查询参数,就值得怀疑。
IP 反查:更硬的一层证据
UA 可以随便写,来源 IP 却很难伪装到位。搜索引擎官方一般会公开自己的爬虫 IP 段,或者支持通过反向 DNS 做验证。可操作的步骤是:
- 把可疑请求的来源 IP 记下来,做一次 rDNS 查询,看解析出的主机名是否落在官方域名下。
- 对反查结果再做一次正向解析,确认能解析回同一个 IP。只做反向不做正向,很容易被伪造的 PTR 记录骗过去。
- 如果拿不到 rDNS,就对照官方公布的 IP 段列表,看是否落在其中。
三步都能对上,基本可以认定为真蜘蛛;任何一步对不上,就要继续保持怀疑。
行为特征:抓取节奏比身份更有参考价值
真蜘蛛的抓取是有规律的。它们一般会遵守 robots 指令,按站点结构和抓取预算分配请求,单个 IP 的并发不会离谱,也不会在短时间内把整个目录扫一遍。反过来,采集器和扫描器的典型表现是:
- 并发高、间隔固定,像按脚本一条条跑;
- 只挑列表页和详情页,对静态资源、robots.txt 毫无兴趣;
- 请求路径跳跃,直接访问深层 URL,不走入口页;
- 对 4xx、5xx 不做退让,被拒之后继续高频重试。
把这些特征和 UA、IP 结合起来看,判断会稳得多。
几种常见的误判
- 只看 UA 就封 IP:真蜘蛛换 IP 段是常事,封掉一个段可能连带影响正常抓取。
- 把低频采集当成真蜘蛛:慢速采集器会刻意压低频率躲避检测,光看速度容易漏判。
- 拿 CDN 回源 IP 做判断:经过 CDN 或代理时,日志里记录的可能是节点 IP,用它去反查官方域名自然对不上,需要先看 X-Forwarded-For 之类的真实来源字段。
- 把云服务商 IP 一律拉黑:部分官方抓取也会从云上发起,一刀切容易误伤。
实操建议
- 先在日志里按 UA 分组,统计请求量和路径分布,找出异常的那几组。
- 对异常组做 IP 反查与正向确认,确定真假。
- 真蜘蛛:检查入口页是否可达、返回码是否正常、有没有被规则误拦。
- 假蜘蛛:优先做限流而不是直接封禁,尤其是共享 IP 段,封禁的连带风险更大。
- 把判断结果沉淀成规则,定期复查,因为 IP 段和 UA 都会变。
真假判断没有一步到位的办法,UA、IP、行为三条线交叉验证,比任何单一信号都可靠。规则定得越细,误伤真蜘蛛的概率就越低。
对蜘蛛池入口页来说,这套判断的意义不只是挡住谁,更是确认自己铺出去的入口页有没有被真正抓走。如果日志里几乎没有可确认为真蜘蛛的请求,问题往往不在拦截规则,而在入口页本身的可发现性和可达性。