蜘蛛池跑起来以后,日志里最不缺的就是请求。UA 一栏写着 Googlebot、Bingbot、Baiduspider 的条目可能占了大半,但如果直接把这些当成搜索引擎蜘蛛,后面做的判断基本都是偏的。分辨真蜘蛛本身不复杂,难点在于愿不愿意多花两步。
为什么不能只看 UA
UA 是客户端自己填的字段,改起来没有任何门槛。一个采集脚本、一个监控工具,甚至一次随手测试,都能把 UA 写成 Googlebot。所以 UA 只能当作线索,不能当作结论。它的价值在于把请求先分成两类:可能是蜘蛛的,和明显不是的。
真正的判断要往后走:这个 IP 属于谁,反向解析指向哪里,请求行为像不像一个爬虫。三层都对得上,才值得当成真蜘蛛来对待。
三个层次依次看
第一层:UA 字符串本身
先看格式,而不是看有没有“bot”这个词。主流搜索引擎的 UA 有相对固定的写法,版本号、平台描述、括号里的兼容信息都有迹可循。常见的问题有:大小写混乱、版本号明显过时或跳得离谱、把几个搜索引擎的名字拼在一起、括号不闭合。这些不一定就是假的,但需要更严格的后续验证。
第二层:IP 归属与反向解析
搜索引擎官方一般会公布蜘蛛的 IP 段,或者提供验证方式。比较稳妥的做法是两步:
- 反向解析这个 IP,得到一个主机名。
- 再对这个主机名做一次正向解析,看结果是否回到同一个 IP。
两步都通过,基本可以排除大部分伪装请求。只做反向解析容易被伪造的 PTR 记录骗过。如果 IP 落在已知的云主机、代理池或家用宽带段,哪怕 UA 写得很像,也要先打问号。
第三层:请求行为
行为是最难伪装的一层。可以关注几个点:
- 请求节奏:真蜘蛛通常有相对稳定的间隔,不会一秒几十个请求,也不会长时间反复访问同一个 URL。
- 路径分布:从入口页出发沿链接逐层展开,对 robots.txt 和 sitemap 往往有单独请求。
- 资源抓取:部分搜索引擎会抓取 CSS、JS 甚至图片,伪装脚本通常只要 HTML。
- 请求头组合:Accept、Accept-Language、Accept-Encoding 等字段的组合方式,脚本往往比较单调。
单个特征都可能有例外,但几项同时异常,就值得当成伪装流量处理。
几个常见误区
- 只要 UA 含 bot 就放行:这等于把日志的可信度交给对方,真正需要放行的只有验证过的来源。
- 只看 IP 段不看清反向解析:伪造 PTR 记录成本很低,正向反向都要查。
- 发现异常就立刻全站封禁:误封真蜘蛛的代价,通常比多留几天可疑请求要大。先记录、打标签,观察一段时间再决定。
- 把伪装流量和蜘蛛池效果混在一起谈:日志里请求变多不等于蜘蛛来得多,两类数据分开统计,结论才站得住。
落到日常操作上
- 在日志里单独记录 UA、IP、反向解析结果和请求时间,形成可回溯的数据。
- 对高频来源做分层标记:已验证蜘蛛、疑似蜘蛛、可疑脚本、普通访客。
- 只对已验证的蜘蛛统计抓取量、抓取深度和入口页覆盖情况,其他来源单独归档。
- 定期复查验证规则,搜索引擎的 IP 段和 UA 格式会变。
验证的目的不是把可疑请求全部清掉,而是让日志里关于蜘蛛的那部分数据可信。数据可信了,后面调整入口页、链接结构或者资源接入才有依据。
最后提醒一句:分辨真蜘蛛只是起点。知道有多少真蜘蛛来过、走到了哪里,才谈得上判断一个蜘蛛池的入口页是否被正常发现和抓取。