常见问题

日志里的 UA 写着搜索蜘蛛,怎么确认它不是伪装的?

日志里出现 Googlebot、Baiduspider 并不意味着搜索蜘蛛真的来过,UA 字符串本身可以随意伪造。本文整理反向 DNS 回查、官方 IP 段比对、抓取行为交叉验证三种可落地的方法,并说明验证结果对蜘蛛池入口页运维的实际意义,帮助你避免误判抓取情况或错误封禁。

常见问题

日志里的 UA 写着搜索蜘蛛,怎么确认它不是伪装的?

做站点运营的人几乎每天都会翻日志。看到 UA 里写着 Googlebot、Baiduspider、bingbot,心里就踏实一半。但这些字符串是可以随便伪造的:任何人用 curl 加一个 -A 参数,就能在日志里留下和搜索蜘蛛一模一样的身份。把伪装爬虫当成搜索蜘蛛,轻则误判抓取情况,重则按错误的结论去调整蜘蛛池入口页,方向全错。

为什么不能只看 UA

UA(User-Agent)只是客户端自己声明的一句话,服务器并没有强制校验。市面上不少采集工具、监控脚本默认就会借用主流搜索蜘蛛的 UA,用来绕过简单的封禁规则。所以日志里出现一百次“搜索蜘蛛”,真实身份可能一个都不是。

更需要警惕的是反向的误判:有些搜索蜘蛛的 UA 会在不同时间点发生变化,或者带着版本号、移动端标识,如果只按关键字硬匹配,反而会把真蜘蛛当成异常流量挡在门外。

三种可落地的验证方法

一、反向 DNS 校验

主流搜索引擎的抓取 IP 通常会做反向解析,得到类似 crawl-xx-xx-xx-xx.googlebot.com 这样的主机名。做法是:先对访问 IP 做一次 PTR 查询,拿到主机名后再对该主机名做一次正向解析,看是否回到同一个 IP。两次能对上,可信度才比较高。只看反向解析结果、不做正向回查,仍然可能被伪造的 DNS 记录骗到。

二、核对官方公布的 IP 段

Google、Bing 等会公开抓取所用的 IP 段列表,可以定期拉取并做成白名单比对,百度方面也有长期公开的抓取 IP 段说明。把日志里的 IP 与官方列表对照,比看 UA 可靠得多。注意这些列表会更新,别拿一年前抄下来的那份一直用。

三、看抓取行为本身

行为特征不能单独定案,但非常适合交叉验证:

  • 真蜘蛛一般会遵守 robots.txt,伪装爬虫经常直接越过 Disallow 去抓被屏蔽的路径;
  • 真蜘蛛的请求节奏通常有节流,短时间内的并发不会太高,而采集脚本往往一口气拉几百个 URL;
  • 真蜘蛛多数只取 HTML,采集工具则可能把图片、样式、脚本等整站资源都拖一遍;
  • 真蜘蛛会顺着页面里的链接走,访问路径呈现出某种遍历顺序,而不是随机乱跳。

验证结果对蜘蛛池入口页意味着什么

把这三步跑一遍,你会得到两个有用的结论。

  1. 知道真实的搜索蜘蛛有没有来过入口页。如果日志里全是伪装爬虫,说明入口页可能压根没被发现,或者被限速、被拦截了,此时讨论链接数量、放置位置意义不大。
  2. 知道哪些 IP 该放行、哪些该限速。把验证通过的抓取 IP 单独放行,避免 WAF、防火墙、CDN 的通用规则误伤;同时对伪装成蜘蛛的采集流量做频率限制,别让它占掉服务器带宽。
不要因为看到几个可疑 IP 就急着封整段 C 段。搜索引擎的抓取 IP 分布很散,误封的代价往往是入口页长时间没有抓取,而你可能要过很久才会从日志里察觉。

一个常被忽略的细节

日志里的时间、时区、状态码要放在一起看。有些入口页返回 200,但内容其实是错误页或空壳,搜索蜘蛛来过一次就不会再回来。验证身份只是第一步,接下来还要看它每次来抓了几个 URL、停留多久、有没有顺着链接走到目标页。这些数据比 UA 字符串有价值得多。

把验证做成一份固定流程,每周跑一次,比凭感觉判断抓取情况要稳妥得多。它不能保证收录,但至少能让你在正确的方向上做判断。