蜘蛛池的日志里,抓取次数是最容易被高估的指标。只要有人把 User-Agent 改成 Baiduspider 或 Googlebot,统计工具就会把它算成“蜘蛛来访”。入口页越多、域名越杂,混进来的伪蜘蛛比例往往越高。与其事后猜测,不如在入口页这一层就把真假分开。
先分清:哪些访问需要校验
并不是所有访问都值得逐条核对。真正需要交叉验证的是那些“看起来像蜘蛛”的请求:命中入口页、带蜘蛛 UA、访问路径符合爬取习惯,比如顺着内链走、请求 robots.txt。普通用户访问、明显的扫描器(大量 404、异常参数)可以先归到另一类处理。把校验范围收窄,落地才不费劲。
三个可以交叉的信号
User-Agent 只能算入口条件
UA 是最容易伪造的一层,单独看几乎没有意义。它的价值在于筛选:把声明自己是蜘蛛的请求挑出来,再进入下一步验证。反过来,一个不带蜘蛛 UA 却疯狂抓取的请求,也值得单独盯一下。
IP 归属与官方 IP 段比对
主流搜索引擎都会公布自己的抓取 IP 段,格式通常是 CIDR 列表,并且会不定期更新。把日志里的来源 IP 和这份列表做匹配,是成本最低的一道过滤。注意两点:一是要定期更新列表,二是不要凭“像不像那个机房”来判断——云厂商的 IP 段和搜索引擎自建段是两回事。
反向解析与正向回查
反向解析(rDNS)能给出一个主机名,例如以搜索引擎域名结尾的名称。但 rDNS 记录是 IP 持有者可以自己设置的,所以正确做法是:先做反向解析,拿到主机名后,再对这个主机名做一次正向解析,看解析回来的 IP 是否和原 IP 一致。两次都吻合,可信度才明显提高。
一条可落地的校验流程
- 从入口页访问日志中筛出带蜘蛛 UA 的请求,按 IP 聚合。
- 用官方公布的 IP 段列表做匹配,命中即标记为高可信。
- 未命中的做 rDNS 查询,得到主机名后再正向解析回查 IP。
- 两次解析一致、主机名符合官方命名规则的,标记为可信或待观察。
- 其余请求归为疑似伪造,单独统计,不并入抓取量。
这套流程不必实时跑,按天批量处理就够用。入口页规模不大时,甚至可以先抽样跑一周,看看伪蜘蛛占比大概有多少。
伪蜘蛛常见的几种表现
- UA 字符串拼写有细微差别,比如多一个版本号或少了斜杠。
- 同一 IP 在极短时间内请求大量入口页,路径之间没有内链逻辑。
- 只抓不解析:不请求 robots.txt,也不加载页面里的静态资源。
- IP 归属地频繁跳变,同一个“蜘蛛”几分钟内换了好几个地区。
- 请求头残缺,Accept、Accept-Language 等字段明显是脚本默认值。
校验结果怎么反哺入口页策略
把真伪分开之后,几个判断会变得清楚:日志里的抓取曲线到底是蜘蛛节奏,还是被伪蜘蛛撑起来的;某个入口页是不是真的被冷落;更新频率调整之后,变化的是真蜘蛛还是混杂流量。这些结论直接影响入口页的数量、内链安排和更新节奏,比盯着总访问数有用得多。
校验的意义不是把数据做得好看,而是让每一次调整都建立在真实的抓取行为上。伪蜘蛛占比高的池子,先解决来源质量,再谈扩容。
最后提醒一点:真伪校验是一个持续动作。搜索引擎会新增或调整 IP 段,伪蜘蛛的伪装方式也在变。把校验脚本和 IP 列表的更新当成常规维护的一部分,入口页的日志才长期可信。