蜘蛛池入口页暴露在公网,访问者不全是搜索引擎蜘蛛。有些采集器、扫描器会伪装成 Baiduspider 或 Googlebot,如果只看 User-Agent 就决定放行或封禁,很容易误判。这一篇整理几种常见的判断方式,供做入口页时参考。
为什么不能只看 User-Agent
User-Agent 可以随便改,伪装成搜索引擎蜘蛛的成本极低。所以 UA 只能作为第一层筛选,不能当结论。真正需要关注的是 IP 归属、反向 DNS 以及访问行为。
用 IP 反查和 DNS 验证
主流搜索引擎官方会公布蜘蛛 IP 段,或者支持通过反向 DNS 验证。比如 Googlebot 可以用 host 命令反查,确认域名属于 googlebot.com 或 google.com,再正向解析一次,确认结果与原始 IP 一致。百度蜘蛛也有官方 IP 段列表可以对照。如果反查结果对不上,或者 IP 根本不在官方段内,大概率是伪装。
- 先取访问日志里的 remote IP。
- 对 IP 做反向 DNS,看域名后缀是否属于搜索引擎官方。
- 再用该域名做正向解析,确认解析结果与原始 IP 一致。
- 如果搜索引擎提供 IP 段文件,可以定期同步比对。
观察访问行为
真蜘蛛的抓取行为通常有规律:会按链接逐步抓取,会请求 robots.txt,会带走一定量的页面,请求间隔相对稳定。伪装爬虫往往表现不同。
- 短时间内集中请求大量 URL,不理会 robots.txt。
- 只抓特定路径,比如只抓列表页或只抓带参数的页面。
- 请求头缺失或异常,比如没有 Accept、Accept-Language 等常见字段。
- 并发很高,但 UA 却写着某个搜索引擎蜘蛛。
这些特征单独看不一定准,但组合起来就有参考价值。
常见的误判与代价
把真蜘蛛封了,入口页可能很长时间不被抓取;把伪装爬虫放进来,会消耗服务器资源,甚至被采集内容。两种误判都有成本。
如果服务器压力不大,与其花大量精力封禁,不如先把入口页的响应速度和资源占用控制好。识别策略应该服从站点实际需求。
一个可落地的验证流程
- 记录完整访问日志,保留 IP、UA、时间、URL、状态码。
- 每天抽取一定量的蜘蛛访问记录,做 IP 反查验证。
- 对验证不通过的 IP,先限速而不是直接封禁。
- 观察一段时间,如果持续异常再考虑拒绝。
- 定期更新搜索引擎官方 IP 段,避免规则过期。
写进 robots.txt 和服务器规则时的注意点
有些站长会用 robots.txt 的 Crawl-delay 控制频率,但不同搜索引擎支持程度不一样。服务器层面做限制时,建议按 IP 段放行官方蜘蛛,而不是按 UA 放行。这样伪装 UA 的爬虫就不会因为写了 Baiduspider 而被放过。
另外,验证逻辑不要太复杂,否则每次请求都做 DNS 反查会拖慢响应。可以缓存验证结果,比如同一个 IP 在一段时间内只验证一次。
把识别做成定期任务
蜘蛛识别不是一劳永逸的事,搜索引擎的 IP 段和验证方式会变。把验证做成定期任务,结合日志观察,比一次性配置更可靠。入口页的稳定性比绝对精准的封禁更重要,先保证真蜘蛛能正常抓,再处理异常流量。