经营蜘蛛池或站点时,日志里出现 Baiduspider、Googlebot、bingbot 之类的 UA 很常见,但这段字符串谁都能伪造。真正要分清的是:这次访问来自搜索引擎的抓取,还是采集器、扫描器或同类的探测。判断错了,要么误封真蜘蛛,要么把伪造流量当成抓取成绩去复盘,后续调整全走偏。
入口页为什么是验证重点
入口页通常是蜘蛛池里访问量最大、最靠外的一层,域名公开、链接分散,任何爬虫都能轻易找到。同时入口页承担着把蜘蛛引向目标页的作用,一旦被大量伪造请求淹没,服务器的并发和带宽会被占用,真蜘蛛的抓取也可能被拖慢。所以验证不只是“数个数”,而是为了在限流、放行、日志统计这几个环节做出正确判断。
三种核对手段
UA 字符串:只能作为初筛
UA 是最容易读取也最不可靠的一层。它的价值在于快速分类:把日志按 UA 分桶,看哪些是搜索引擎标识、哪些是明显异常的长尾 UA。但仅凭 UA 下结论风险很大,尤其是当某个 UA 的请求量、访问路径、请求频率明显不符合该搜索引擎的常规行为时,更应该怀疑而不是采信。
反向 DNS:确认 IP 归属
对声称是 Googlebot 的 IP 做反向解析(PTR),看域名是否落在搜索引擎官方域名下,再做一次正向解析确认能回到同一个 IP。这一正一反是基本的校验闭环。百度、必应等也有各自的验证方式,具体以官方文档给出的规则为准。需要注意的是,反向解析结果本身也可能不存在或被伪造,所以它更适合用来“排除”,不适合单独用来“确认”。
官方 IP 段:相对稳的一条线
主流搜索引擎都会公布自己抓取所用的 IP 段或验证接口,把这些列表定期同步到本地,用它在入口层做白名单,是相对可靠的做法。IP 段会更新,建议做成定时任务拉取,并且保留上一版作为兜底,避免更新失败时把真蜘蛛全部挡在外面。
实操中的核对顺序
- 先从日志里筛出带搜索引擎 UA 的记录,按 IP 聚合。
- 对聚合后的 IP 做反向解析,看是否能落到官方域名。
- 再和官方发布的 IP 段做比对,两者一致才当成可信蜘蛛。
- 对通过验证的 IP,单独统计其抓取频次、URL 分布和响应码。
- 对未通过的 IP,不急着封,先观察它访问了哪些路径、有没有异常高频。
几个常见误区
- 只看 UA 就放行。采集器改一个 UA 的成本几乎为零。
- 只看 IP 段就封禁。搜索引擎也会用到新的网段,列表没更新时容易误伤。
- 把验证结果当永久结论。IP 归属会变,白名单需要定期重跑。
- 忽略 IPv6。只核对 IPv4 列表,会漏掉一部分抓取来源。
- 验证完就直接封 IP。伪造流量有时来自共享出口,一封可能牵连正常访问。
验证之后怎么用
验证结果至少要落到三个地方:一是入口层的限流策略,可信蜘蛛不给限流,其余按普通访问处理;二是日志统计口径,把可信抓取和伪造抓取分开计数,避免“抓取量涨了”的误判;三是异常告警,当某个入口页的可信抓取突然归零,或伪造请求量突然放大,都值得排查。
蜘蛛验证的目的不是把门关死,而是让放行和拦截都有依据。宁可多一步确认,也不要用一条规则把真蜘蛛和假蜘蛛一起处理掉。
最后补充一点,验证解决的是“谁来了”,抓取效果好不好还要回到页面本身。入口页能不能被顺利发现、响应是否稳定、内容是否值得继续爬,这些才是蜘蛛愿意多来的基础。