日志里的“蜘蛛”不一定是蜘蛛
网站访问日志里经常出现带 bot 字样的 User-Agent,看起来像是搜索蜘蛛在抓取页面。实际情况要复杂一些:有一部分是真实的搜索引擎抓取,有一部分是第三方采集、监控工具、安全扫描器,甚至有人刻意伪装成搜索引擎蜘蛛来绕过限制。如果不做核对,很容易把假蜘蛛造成的压力当成搜索抓取问题来处理,也可能误封真实蜘蛛。
为什么要花时间核对来源
核对来源有几个直接的好处:
- 判断服务器压力到底来自搜索抓取还是其他爬虫,避免调错方向;
- 区分日志中不同来源的请求,统计出来的抓取数据才有参考价值;
- 在设置限速、封禁规则时,不至于误伤真实蜘蛛;
- 发现被大量伪造 UA 访问时,能及时检查是否有内容被搬运或扫描。
三层核对:UA、IP、反向解析
User-Agent 只能作为线索
User-Agent 是客户端自己声明的字段,可以随意伪造。它的作用主要是缩小范围:先从日志里筛出疑似蜘蛛的请求,再进入后面的验证,不能单独作为判断依据。
IP 段是较可靠的依据
主流搜索引擎会公布各自的抓取 IP 段或提供对应的验证文档。把日志 IP 与官方列表比对,能过滤掉相当一部分伪装请求。需要注意的是,这些列表会更新,建议定期重新拉取;同时不要凭记忆使用旧的 IP 段,否则容易把新加入的抓取节点当成假蜘蛛。
反向解析形成双重确认
比较稳妥的做法是反向解析加正向解析的组合验证:先对 IP 做反向 DNS 查询,看得到的主机名是否属于搜索引擎官方域名后缀;再对该主机名做正向解析,确认解析结果是否回到同一个 IP。两步都通过,可信度才比较高。只做反向解析,容易被伪造的 PTR 记录骗过。
一个可操作的核对顺序
- 从日志中按 User-Agent 筛选出疑似蜘蛛的请求,统计其 IP 分布;
- 将 IP 与搜索引擎官方公布的 IP 段比对,标记出范围内的部分;
- 对范围外的可疑 IP 做反向解析,检查主机名后缀;
- 对通过反向解析的 IP 再做正向解析,确认与原始 IP 一致;
- 把核对结果记录成清单,后续规则更新时沿用同一套流程。
核对之后可以做的事
确认真实蜘蛛的请求,可以按正常抓取来观察和优化;确认是伪装的爬虫,则视情况处理。常见方式包括按 IP 或 UA 组合做限速、对高频异常请求返回 403、在日志中标出这一类来源,方便后续统计。不建议看到 UA 里有 bot 就直接全局封禁,那样容易误伤真实抓取,也会让后续的日志分析失去基准。
几个容易被忽略的细节
- 同一个搜索引擎可能有多个抓取用途的 UA,比如常规抓取、图片抓取、移动端抓取,核对时要分别对待;
- 在 CDN 或反向代理后面,日志里记录的可能是节点 IP,需要从 X-Forwarded-For 等头部读取真实来源,并确认该头部是否可被外部伪造;
- IPv6 抓取需要单独核对,很多 IP 段列表同时包含 IPv4 和 IPv6;
- 假蜘蛛的请求路径往往集中在特定页面,比如接口、搜索页、用户页,结合路径判断更准确。
核对来源不是为了封掉所有非搜索引擎流量,而是让抓取相关的判断建立在可信的数据上。
把 UA、IP 段和反向解析这三步固定成流程,每隔一段时间重新核对一次,日志里的抓取数据会稳定很多。后续再做抓取预算、内链调整或服务器限速时,参照的就不再是一锅混在一起的访问记录。