关于网络爬虫的那些事:干掉伪装的爬虫

在关于网络爬虫的那些事(一)提到,如果爬虫伪装自己的User-Agent信息,就必须寻找新的办法来封杀爬虫了。事实上对网站来说,最大的挑战就是如何准确的甄别一个IP发起的请求,究竟是真实用户访问还是爬虫访问呢?

先说点题外话,在很多年以前(2000年),我就做过网站流量统计系统。主流的网站流量统计系统不外乎两种策略:一种策略是在网页里面嵌入一段js,这段js会向特定的统计服务器发送请求的方式记录访问量;另一种策略是直接分析服务器日志,来统计网站访问量。

在理想的情况下,嵌入js的方式统计的网站流量应该高于分析服务器日志,这是因为用户浏览器会有缓存,不一定每次真实用户访问都会触发服务器的处理。但实际情况是,分析服务器日志得到的网站访问量远远高于嵌入js方式,极端情况下,甚至要高出10倍以上。

现在很多网站喜欢采用awstats来分析服务器日志,来计算网站的访问量,但是当他们一旦采用Google Analytics来统计网站流量的时候,却发现GA统计的流量远远低于awstats,所以开始怀疑GA的准确性。其实GA的统计确实会略低于真实的用户访问量,但数据的真实性比较靠谱,不会偏差特别大。之所以略低是因为GA的服务器有时候用户访问不到,还有一种情况是访问JavaEye的用户所在公司使用了白名单,他能访问JavaEye却无法访问GA服务器,此外也有可能用户还没有等到GA加载就跳转到下一页了,所以统计量没有被GA计算。

那么为什么GA和awstats统计会有这么大差异呢? 罪魁祸首就是把自己伪装成浏览器的网络爬虫。一些网络爬虫为了避免被网站以识别User-Agent的方式封杀,就修改了自己的User-Agent信息,通常伪装成WindowsXP上的IE6浏览器,也有伪装成Firefox浏览器的。这种情况下awstats无法有效的识别了,所以awstats的统计数据会虚高。不过说句公道话,这也怪不了awstats,只怪爬虫太狡猾,不但awstats无法有效识别,就算我们肉眼去查看日志,也往往无法有效识别。

因此作为一个网站来说,如果希望了解自己的网站真实访问量,希望精确了解网站每个频道的访问量和访问用户,开发自己的网站流量统计系统就显得非常有必要性。JavaEye网站就开发了自己的网站流量统计系统,采用在页面里面嵌入js的方式来实现网站流量统计。因此我们可以精确的掌握登录用户和非登录用户的比例,不同的访问偏好,JavaEye每个频道精确的流量和比例,真实的用户数量和分布等GA无法提供的有价值的信息。

JavaEye自己的流量统计系统尽管并不是为了甄别爬虫而编写的,但是他可以帮助甄别网络爬虫。我们知道只有用户使用浏览器访问页面的时候才会执行js,而爬虫并不会执行页面里面的js,所以rails的production.log里面出现的IP地址,却并没有相应的流量统计系统记录这个IP地址,我们可以99%的断定这个IP是个爬虫。如果爬虫编写者专门伪装真实IP向流量统计服务器发起请求的话,流量统计系统也有自己的防范作弊的机制,以及数据分析机制来甄别异常的访问请求,这点就不展开讨论了。

总之有了JavaEye流量统计系统提供的真实IP作为参考标准,我们就可以拿日志里面出现的IP地址进行比较,如果日志里面某个IP发起了大量的请求,在流量统计系统里面却根本找不到,或者即使找得到,可访问量却只有寥寥几个,那么这无疑就是一个网络爬虫,我们可以直接用iptables封杀该C段地址了。

根据这种策略,我们可以重新调整封杀方案。首先统计production.log,统计访问最多的200个C段地址,这仅仅需要一条shell命令:

grep Processing production.log | awk ‘{print $4}’ | awk -F‘。’ ‘{print $1“。”$2“。”$3“.0”}’ | sort | uniq -c | sort -r -n | head -n 200 》 stat_ip.log

这200个C段地址就是我们需要重点考察的对象,网络爬虫就混迹在这200个C段地址之内。它的格式大致如下,显示访问请求最多的C段IP地址和请求次数:

99650 203.208.60.0

55813 123.125.66.0

21131 221.235.58.0

18360 72.14.199.0

14632 121.0.29.0

11789 202.165.185.0

10539 61.135.216.0

10153 65.55.106.0

7001 65.55.211.0

4240 65.55.207.0

3789 219.133.0.0

3721 194.8.74.0

然后我们还需要流量统计系统提供的真实IP地址的C段地址作为参考,这已经由流量统计系统提供给我们了。

你可能感兴趣的:(关于网络爬虫的那些事:干掉伪装的爬虫)