入口页的访问日志里,“Baiduspider”“Googlebot”这类字样每天可能刷出几万条,但其中相当一部分并不是搜索引擎派来的。有人用脚本伪造 UA 抓取内容,有人做批量扫描,也有人只是把你的入口页当成免费的测试点。如果不做甄别,这些流量会挤占带宽和连接数,也会让日志统计失真,让你误判入口页的真实抓取情况。
为什么甄别要在入口页做
蜘蛛池的入口页承担的是“被看见”的职责,对外可见度越高,被伪造 UA 试探的概率也越大。入口页请求量本来就不小,一旦混入伪装流量,容易出现几种典型偏差:
- 日志里的“抓取量”虚高,真正来自搜索引擎的请求被稀释;
- 连接被占满,真蜘蛛反而拿到超时或 5xx;
- 按错误的数据调整内容更新节奏,方向越走越偏。
所以在入口页层面做一次基础甄别,比事后在报表里反复猜要省事得多。
三层交叉验证的思路
1. UA 只能当线索,不能当证据
UA 是最容易伪造的东西,改一个字符串的成本几乎为零。把 UA 当作第一层过滤可以,但只靠它做封禁,误伤概率很高——搜索引擎自身在某些场景下也会使用不带明显标识的客户端。
更稳的做法是:UA 命中已知蜘蛛标识时,进入第二层验证;UA 不匹配但请求行为明显异常的,先限速观察,而不是立刻拦截。
2. 看 IP 归属与网段
主流搜索引擎的爬虫 IP 通常来自相对固定的网段或云服务商,而不是家用宽带、住宅代理或大量分散的廉价 VPS。如果日志里某个“Googlebot”长期来自住宅 IP 段,基本可以先按伪造处理。
实操中值得记录的字段包括:来源 IP、IP 所属 ASN 与地区、同一 IP 的请求频率、以及该 IP 首次出现的时间。把这些和 UA 放在一起看,伪装流量往往会露出破绽。
3. 反向解析加正向确认
只看反向解析(PTR)同样不够,因为 PTR 记录本身可以被伪造。相对可靠的顺序是:
- 对来源 IP 做反向解析,得到主机名;
- 再对该主机名做正向解析,确认解析回来的 IP 与原始来源 IP 一致;
- 最后确认主机名落在搜索引擎官方公布的域名后缀内。
这三步都通过,才可以比较放心地认定是真蜘蛛。缺任何一步,都建议按“待观察”处理,而不是直接放行或直接封禁。
常见的伪装流量特征
- UA 拼写有细微错误,比如多一个字母、少一个斜杠;
- 同一 IP 在极短时间内请求大量 URL,顺序接近字典遍历;
- 只请求入口页和少数几个固定路径,不跟随站内链接;
- 请求头缺少搜索引擎爬虫常见的字段组合;
- 集中在少数几个网段,且该网段与官方公布范围明显不符。
甄别之后怎么处理
不建议一刀切,可以按三档处理:
- 确认是真蜘蛛:正常放行,并记录其抓取频率,作为后续调整入口页更新节奏的参考。
- 无法确认但行为温和:放行,单独打标记录,观察一段时间再判断。
- 明显伪造或高频扫描:先降速,仍不收敛再在入口层拦截,同时保留日志便于复核。
拦截手段的优先级建议是:限速 → 返回轻量响应 → 断开连接。尽量不要在入口页直接返回体积很大的 403 页面,或者重定向到验证页,那只会额外消耗资源。
别把甄别做过头
过于激进的封禁会误伤搜索引擎的正常抓取,尤其是新出现的爬虫 IP 段,往往在官方文档更新之前就已经投入使用。比较稳妥的原则是:宁可从宽放行并观察,也不要因为一次异常就永久拉黑整个网段。甄别的目标是让数据可信、资源不被浪费,而不是把入口页变成一道攻击性防线。
把真伪甄别当成日志清洗的一部分,而不是安全对抗。数据干净了,后面关于入口页更新与内容调整的判断才有依据。