搜索抓取

分辨真假搜索蜘蛛:日志、User-Agent 与 DNS 回查的三层核验法

日志里自称 Googlebot 的请求未必是真的。本文给出从 User-Agent 初筛、反向 DNS 加正向回查到行为特征观察的三层核验方法,并分别说明确认真蜘蛛、识别假蜘蛛和判断不清时该怎么处理,帮你在做抓取分析前先把日志数据洗干净。

搜索抓取

分辨真假搜索蜘蛛:日志、User-Agent 与 DNS 回查的三层核验法

做站点运营的人多少都见过这样的日志:某个 IP 一天抓了几万次,User-Agent 写着 Googlebot,但抓的全是搜索结果页和带参数的筛选地址;或者一个小爬虫顶着 Baiduspider 的名字,把整站图片和文章抓走。这些请求混在真实抓取日志里,会让抓取分析彻底变形——你以为蜘蛛在抓重要页面,其实那是一台采集器。所以分辨真假蜘蛛不是洁癖,而是抓取诊断的第一步。

为什么“假蜘蛛”值得单独处理

User-Agent 是一段可以随便填的字符串,任何人写个脚本都能自称 Googlebot。伪装成搜索引擎蜘蛛,通常有三个目的:绕过部分站点的访问限制、在日志里隐藏自己、少被 WAF 拦。对站长来说,直接后果是:

  • 服务器带宽和 CPU 被占用,高峰时段可能拖慢真正的蜘蛛抓取;
  • 日志里的“抓取量”虚高,按 UA 一统计就得出错误结论;
  • 要么把真蜘蛛拦在门外,要么对采集器睁一只眼闭一只眼。
只看 User-Agent 就下结论,是抓取核验里最常见的错误。UA 是自我介绍,不是身份证。

三层核验:从粗到细

第一层:User-Agent 初筛

先看字符串里的关键词:Googlebot、Bingbot、Baiduspider、YandexBot、DuckDuckBot 等。正规蜘蛛的 UA 通常会带上自己的官方说明地址,例如 Googlebot 的字符串里会出现 +http://www.google.com/bot.html 这类链接;Baiduspider 常见形式是 Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)。但这一步只能把请求分成“疑似”和“明显不是”,不能当成结论。

第二层:反向 DNS 加正向回查

这是目前成本最低、也最可靠的手段,Google 和 Bing 官方都用这套逻辑:

  1. 从日志里取出访问 IP;
  2. 对该 IP 做反向 DNS 解析,看主机名是否落在官方域名下,例如 Googlebot 常见 crawl-xx-xx-xx-xx.googlebot.com;
  3. 把解析出的主机名再做一次正向解析,确认解析回去的 IP 与原始 IP 完全一致;
  4. 对照搜索引擎公布的 IP 段或验证文档,确认域名后缀属于该引擎。

第 3 步最容易被跳过,也最不能跳过。伪造 PTR 记录比伪造 UA 难,但并非做不到,正向回查能挡掉大部分伪装。

第三层:看行为特征

  • 抓取节奏:正规蜘蛛频率相对稳定,不会短时间把同一目录刷成百上千次;
  • 是否读取 robots.txt:绝大多数正规蜘蛛会先取一次 robots.txt,再按规则抓取;
  • 抓取对象:真蜘蛛会抓 HTML,也会按需取 CSS、JS、图片,采集器往往只盯着正文和列表页;
  • 是否遵守限速:被返回 429、503 后,正规蜘蛛通常会放慢或退让。

核验之后,三种处理方式

确认是真蜘蛛:回到抓取本身。看它抓了哪些 URL、返回了什么状态码、有没有大量 404 或 5xx、重要页面是否在抓取名单里。如果 Sitemap 和站内链接都没问题,但抓取量偏低,再去看服务器响应时间和日志里的超时记录。

确认是假蜘蛛:robots.txt 里对特定 UA 做限制只能挡住守规矩的爬虫,更有效的办法是在 WAF 或 CDN 层按 IP 段限速、加验证。注意先小范围观察,别一次性把整个网段封死。

暂时无法判断:先记录,不要急着封。把同一个 IP 一周内的请求路径、频率、状态码拉出来看一遍,大多数伪装者会在这个阶段露馅。

几个容易踩的坑

  • 把 CDN、云厂商、代理出口的 IP 当成蜘蛛:这些 IP 上的 UA 可能是用户浏览器传来的;
  • 只核 IPv4、忽略 IPv6:现在不少蜘蛛会走 IPv6 出口;
  • 封禁规则太宽:封掉一个 C 段,可能连带拦住搜索引擎的另一个出口,表现就是抓取量突然下滑;
  • 把核验当日常任务:除非流量异常、改版上线或抓取量突变,平时按月抽查一次就够。

真假蜘蛛的核验,本质上是一次抓取环境的清点。把日志里那些“看起来像蜘蛛”的请求分辨清楚,后面的抓取分析、URL 发现排查和内链优化才有可靠的数据基础。