为什么蜘蛛池里要先确认蜘蛛身份
做蜘蛛池,日常接触最多的就是各种爬虫请求。日志里一行行看起来都写着 Googlebot、Baiduspider、bingbot,但 UA 本质上就是请求头里的一串字符串,改起来没有任何门槛。一个普通的采集脚本、一个安全扫描器,随手填一个知名蜘蛛的 UA,在日志里就和真蜘蛛长得一模一样。
如果不去验证,后面所有的判断都会建立在一份不干净的数据上:抓取量看着不错,其实大半是别人的程序在跑;某些入口页显示天天被访问,实际没有被任何搜索引擎抓过。更要紧的是,按这个错误基数去扩容、去删页面、去封 IP,动作越大,偏差越大。
四个可以交叉验证的信号
单个信号都不足以定论,但把它们叠在一起看,判断的把握就大得多。
一、UA 与来源 IP 的归属是否对得上
真蜘蛛的请求通常来自搜索引擎自己的网段,而不是普通家宽、廉价 IDC 或代理池。把日志里的 IP 拿去查归属,如果一堆号称 Googlebot 的请求全来自某个不知名的机房段,就值得怀疑。反过来,来自正规网段的也不一定是真的,还要往下看。
二、反向 DNS 解析
这是比较实用的一个手段。对来源 IP 做反向解析,看得到的域名是不是搜索引擎自己的域名。例如 Googlebot 一般能反查到以 googlebot.com 或 google.com 结尾的域名,Bing 的相关域名是 search.msn.com 一类。反查不出结果,或者反查出来是个和搜索引擎毫无关系的域名,基本可以先放进观察名单。
三、反查之后要再做一次正向确认
只做反向解析有一个漏洞:PTR 记录是 IP 持有者自己可以设置的,理论上可以伪造。所以拿到反查域名后,要再对这个域名做一次正向解析,确认解析回来的 IP 和最初发起请求的 IP 一致。两步都对上,可信度才够。
四、访问行为本身
行为特征最难伪装,也最容易被忽略。可以重点看这几项:
- 请求节奏:真蜘蛛通常有相对平稳的抓取频率,不会在几分钟里把几千个 URL 一次性扫完。
- 访问时段:不少蜘蛛的抓取有明显的时间分布规律,24 小时不间断、且速度恒定的反而可疑。
- 抓取路径:真蜘蛛会顺着链接一层层爬,也会回头抓取资源文件;只盯着某几个固定 URL 反复请求的,多半不是。
- 请求头完整度:缺 Accept、缺 Accept-Encoding、UA 版本号长期不变,都是常见特征。
一套可以落地的自查流程
不需要多复杂的工具,按顺序走一遍就够了:
- 从访问日志里按 UA 分组,统计出每个自称为蜘蛛的 UA 的请求总量和来源 IP 分布。
- 对请求量靠前的 IP 做反向解析,记录反查域名和解析结果。
- 对反查出来的域名做正向解析,和原始 IP 比对。
- 对无法通过验证的 IP,单独看它的访问时段、路径分布和请求频率。
- 把验证通过的 IP 段整理成白名单,后续统计只以此为准。
整个过程建议按周或按月做一次,而不是临时想起来才查。蜘蛛的出口网段会变动,白名单也需要跟着更新。
假蜘蛛会带来哪些误判
把假蜘蛛混进统计,影响的不只是一个数字:
- 抓取量虚高:以为入口页被频繁抓取,实际搜索引擎根本没来几次,于是对入口页质量做出过于乐观的判断。
- 有效页面被低估:真蜘蛛来得少、假蜘蛛来得多,某些确实被收录的入口页反而被误判为没人管。
- 扩容方向跑偏:按虚高的抓取量去加服务器、加带宽,成本上去了,实际需求并没有那么大。
- 误封真蜘蛛:反向操作也有风险,有人为了挡采集器直接封整段 IP,结果把搜索引擎的抓取节点一起挡在门外。
处理方式上的几点建议
验证清楚之后,处理手段也要克制一些。
- 优先用白名单做统计口径,而不是用黑名单做拦截。白名单影响的是你看数据的方式,风险更低。
- 对可疑请求,先限速再考虑封禁。限速对真蜘蛛的影响通常可以接受,误伤的代价也小。
- 不要仅凭 UA 判断并拦截,UA 是最容易伪造的一层。
- 日志至少保留一个月,单看一天的抓取数据很容易被偶发流量带偏。
蜘蛛池里的很多问题,追到最后都是数据源的问题。先把蜘蛛身份这层筛干净,再去谈入口页质量、抓取预算和扩容节奏,判断才有意义。
小结
确认蜘蛛身份不是为了把谁挡在门外,而是为了让自己手里的数据可信。UA 只是第一层线索,来源 IP、反向解析加正向确认、以及访问行为,四者交叉起来看,才能大致分清哪些请求值得参考。这件事做起来花不了太多时间,但它决定了后面所有的运营决策是建立在真实情况上,还是建立在一堆伪造字符串上。