搜索抓取

日志里的请求都是蜘蛛吗:UA、反向解析与 IP 段核验

服务器日志里自称 Googlebot 的请求未必是真蜘蛛。本文介绍用 UA 初筛、反向 DNS 解析、正向确认与 IP 段比对三步核验抓取来源的方法,并列出伪装抓取请求的常见特征,帮助你在分析抓取频次与路径之前先把数据清理干净。

搜索抓取

日志里的请求都是蜘蛛吗:UA、反向解析与 IP 段核验

打开服务器日志,按 User-Agent 排序,常常能看到成百上千条自称 Googlebot、Bingbot 的请求。但如果直接把这些请求当成搜索蜘蛛来统计,抓取量、抓取频次、抓取路径的结论都会跑偏——因为 UA 字符串任何人都能改。想让后面的分析站得住,第一步是把真蜘蛛和伪装者分开。

为什么 UA 不能单独作为依据

User-Agent 只是请求头里的一个普通字段,写日志的服务器也只会照抄。用命令行工具加一个自定义 UA,就能造出一模一样的字符串。所以判断真伪需要额外证据:来源 IP 是否属于对应搜索引擎、反向解析出的域名是否对得上、解析结果再正向查回是否一致。

三步核验流程

第一步:按 UA 初筛

先在日志里用关键字筛出候选请求,比如 Googlebot、bingbot、Baiduspider、YandexBot。这一步只负责缩小范围,不负责下结论。

第二步:反向解析(rDNS)

对候选 IP 做 PTR 查询。以 Google 为例,真实抓取 IP 通常解析到 googlebot.com 或 googleusercontent.com 这类域名;Bing 则常见于 search.msn.com。解析不出对应域名,或者解析到某个普通主机商域名的,基本可以判定为伪装。

第三步:正向确认与 IP 段比对

拿到 PTR 域名后再做一次正向解析,看是否回到原 IP,这一步能挡掉人为伪造解析记录的情况。同时可以对照搜索引擎公布的 IP 段或 JSON 列表,定期更新本地白名单。两者结合,误判会少很多。

伪装请求常见的几个特征

  • UA 拼写完整甚至带着版本号,但反查不到任何官方域名。
  • 单个 IP 在短时间内高频命中后台、站内搜索页或接口路径,真实蜘蛛很少这样走。
  • 不读取 robots.txt,或者只盯着特定文件类型反复请求。
  • 同一时间段内 UA 频繁切换,一会儿 Googlebot 一会儿 bingbot。

核验清楚之后,日志才有分析价值

把伪装请求剔除后,很多原本看不懂的现象会变得合理。抓取量下降,可能只是此前混入了大量第三方爬虫;某个目录被抓得特别频繁,可能是脚本在轮询而不是蜘蛛在加深抓取。基于干净的日志再看抓取频次、状态码分布、抓取路径,判断才可靠。

反过来,被识别出的伪装抓取如果没有业务价值,可以在网关层做限速或拦截;但如果它同时占用了带宽和数据库连接,那它对真实蜘蛛的影响其实和资源耗尽类似,值得单独处理。

核验蜘蛛身份是排查的第一步,它帮你确认数据源可信,但不会自动改善抓取结果。抓取质量最终仍取决于内容、结构、响应速度和站点稳定性。

落地时的几条建议

  1. 不必每次全量核验,先抽样最近几天的数据,确认伪装比例后再决定是否全量处理。
  2. 把 UA 筛选、rDNS 查询、IP 段比对写成脚本或定时任务,人工核对只留给异常样本。
  3. 搜索引擎的 IP 段会更新,白名单最好定期刷新,避免把真蜘蛛误伤。
  4. 保留原始日志一段时间,方便在结论变化时回溯验证。

日志分析的价值取决于数据是否干净。把身份核验做在前面,后面关于 URL 发现、抓取路径和回访节奏的判断,才不至于建立在一堆伪装请求之上。