Zapic's Blog
解决百度统计数据被爬虫污染的问题
2020-04-12
教程
查看标签

别看我站小,其实爬虫很喜欢我这里(
所以统计页经常收到一大堆垃圾数据,对分析造成了极大的影响.
那咋办嘛(

\#0 分析

我这里遭到的数据污染,都是这样的:

操作系统:macOS
网络服务商:电信
屏幕分辨率:1024x768
屏幕颜色:32-bit

操作系统:Win 7
网络服务商:网通
屏幕分辨率:1024x768
屏幕颜色:32-bit

而一个普通的访客:

操作系统:Win 7
网络服务商:移动
屏幕分辨率:1366x768
屏幕颜色:24-bit

可以看出非常明显的特征:

  • 分辨率为1024*768 (这种分辨率已经极其少见)
  • 颜色深度为32 (家用显示器基本上只有24)
  • 这种组合更是诡异
    那不用洗了,直接前端过滤掉就好了.

\#1 实践

那还不简单,直接一句话:
如果长为1024宽为768颜色深度为32那就是爬虫.
那就不执行脚本就好了.
好,现在我们来看一下我们的统计代码:

var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?4153f4c657e50d7beb41d9a92caf78a2";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();

可以看见,统计脚本的主要加载过程在那个function里,这就可以很方便控制他加不加载了,若不加载只需要套一个return false就行了.
那么,逻辑写成js就是:

if(window.screen.width==1024&&window.screen.height==768&&window.screen.colorDepth==32){
    return 0;
}

压缩一下:

var Ws = window.screen;if(Ws.width==1024&&Ws.height==768&&Ws.colorDepth==32){return;}

放进去:

var _hmt = _hmt || [];
(function() {
  var Ws = window.screen;if(Ws.width==1024&&Ws.height==768&&Ws.colorDepth==32){return;}
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?4153f4c657e50d7beb41d9a92caf78a2";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();

爬虫给我爬.

\#2 附言

记得随机应变,活学活用.
翻车了不要找我.png