站点运营

站点运营:蜘蛛 UA 与 IP 校验,别把真爬虫和假爬虫一起放进来

日志里自称 Googlebot 的请求不一定来自搜索引擎。本文介绍用 UA、反向 DNS 和官方 IP 段校验蜘蛛身份的方法,以及速率限制、WAF 规则里容易误伤真蜘蛛的几个场景,帮你把抓取资源留给真正的爬虫。

站点运营

站点运营:蜘蛛 UA 与 IP 校验,别把真爬虫和假爬虫一起放进来

服务器日志里出现大量“Googlebot”“Bingbot”“Baiduspider”的访问记录,并不代表这些请求都来自搜索引擎。UA 字符串可以随便写,一个脚本改个参数就能冒充。真正需要区分的,是两类完全不同的访问:搜索引擎的抓取,和假装成搜索引擎的采集或扫描。

为什么要做蜘蛛校验

  • 假蜘蛛消耗资源:它们往往并发高、路径乱,把带宽和数据库连接占住,真蜘蛛反而排队。
  • 真蜘蛛被误伤:防火墙或 WAF 一旦误封,页面可能连续几天抓取失败,恢复后节奏也会变慢。
  • 日志统计失真:把假蜘蛛的请求算进“抓取量”,会让后续的抓取分析得出完全错误的结论。

三种校验方式,从弱到强

UA 字符串:只能当线索

UA 是请求头里最容易伪造的部分,单独用它做判断几乎没有意义。但可以先用它筛出“自称蜘蛛”的请求,再做进一步验证。

反向 DNS 解析:目前最实用

Google 官方建议的方式是两步:先对访问 IP 做反向 DNS 查询,如果得到的域名以 googlebot.com 或 google.com 结尾,再对该域名做一次正向解析,确认解析结果与原始 IP 一致。两步都通过,才可以基本确认。Bingbot 的思路类似,反向域名后缀是 search.msn.com。

官方 IP 段:适合做批量白名单

Google 会发布 googlebot.json、special-crawlers.json 等文件,Bing 也提供 bingbot.json,可以定期拉取并导入防火墙或 WAF 白名单。Baiduspider 的 IP 段则需要对照百度搜索资源平台公布的列表,注意这类列表会更新,别做完一次就丢在角落。

容易被忽略的误伤场景

  • 站点整体挂了 JS 挑战或验证码,蜘蛛拿不到内容,等于对搜索引擎关闭了整站。
  • 速率限制按“每 IP 每秒 N 次”一刀切,蜘蛛并发稍高就被 429,抓取节奏被打乱。
  • CDN 或 WAF 的默认规则里带了“拦截已知爬虫 UA”的开关,结果连真蜘蛛一起挡了。
  • 按 IP 段封禁时把云服务商整段拉黑,而部分搜索引擎的抓取 IP 恰好托管在云上。

一套可以落地的流程

  1. 从日志抽样,导出 UA、IP、状态码、响应时间,先看有多少自称蜘蛛的请求能通过反向 DNS 校验。
  2. 把校验通过的 IP 段与维护中的官方列表合并,形成动态白名单,设定固定的更新周期。
  3. 给白名单中的访问设置更宽松的速率阈值,其余请求按普通用户规则处理。
  4. 对假蜘蛛不必全用 403 制造海量错误日志,降速、返回精简页面或 429 都可以,关键是别让它拖垮源站。
  5. 每月复盘一次:真蜘蛛抓取成功率、5xx 占比、假蜘蛛请求占比,这三个指标比“今天被抓了多少次”更有参考价值。

robots.txt 不是访问控制

robots.txt 只对守规矩的爬虫有效,而且它控制的是“是否抓取”,不是“是否访问”。用它去挡恶意爬虫,基本等于贴一张纸条。真要限制访问,还得靠服务器层或 WAF 规则。反过来,也不要用 robots.txt 屏蔽 CSS、JS 这类渲染必需资源,否则蜘蛛拿到的页面是残缺的。

校验的目的是把资源优先留给真正的抓取,而不是把服务器变成只对搜索引擎开放的封闭系统。

无论你是在做 URL 发现、维护蜘蛛池,还是单纯运营一个内容站点,先把访问者身份分清楚,后面的抓取分析、日志巡检和结构优化才有意义。