《第23天》python教你用IP库统计维基百科访问日志信息
维基百科大家可能都知道,非常著名的一个百科网站,小编手上有一份维基百科访问日志,数据量不是很大,3万4千多个访问数据信息。这里我就讲讲如何统计出这一份日志中的信息,得到哪个国家访问维基百科最多。剩下的信息有兴趣的朋友可以自己统计。
开班第二十三天:
今天的课程大纲:
使用淘宝ip库查询统计日志文档
使用Geolocation IP查询统计日志文档
详细讲解:
使用淘宝ip库查询统计日志文档
先给大家看看日志文件的内容结构,可以看到以第一个空白分割的第一部分就是我们所需要的ip地址,那么我们就想方设法得到ip然后查询到ip对应的内容就行了。
这里我通过awk把ip内容统计出来放到ip.txt这个文件中,得到ip的方法如下:
cat wiki-access.log | awk '{print $1}' | sort | uniq >ip.txt,得到的ip.txt内容如下:
得到ip之后,我们就先了解一下淘宝的ip库,打开网站:http://ip.taobao.com/,看看淘宝给出的查询接口,我们可以直接使用请求接口来实现我们ip地址的查询,返回的结果是一个json数据,然后就可以获得我们想要的country数据了。
主要的实现代码如下,这里我先把所有的国家信息存放到vlaue.txt文件中,等下我接着对这个文件进行分析就可以了,这里有一个限制,由于淘宝给出的接口每秒只允许查询10次,所以查询数据量较大的ip可能耗费的时间较长,所以我等下也会讲第二种方法。
这里是我统计出来的vlaue.txt文件,里面的内容主要是ip对应的国家。
现在我们需要做的就是分析这个文件,这里我使用shell脚本重新分析了一下,这里还是利用了awk和文件读取的特性,最后我们得到了结果存放那个在readme.txt文件中,我们看一下内容。
这样就实现了我们的需求。
使用Geolocation IP查询统计日志文档
上面的查询很大的一个缺陷就是查询速度慢,查询数量有限制,所以我们可以利用现有的ip库来进行查询,这样是一个离线的查询,速度相对会快很多,而且不会有查询数量的限制。
下面是我下载好的ip库,数据库文件,打开是乱码的,可以看看。
接着我们就用这个ip库进行查询,这里呢,我们就要学习一个模块,pygeoip,这个模块已经封装好了方法,我们只需要调用就行了,如何封装的呢,我这里有一个pygeoip.py脚本,大家可以从官网上下载,也可以从我的群里获取。
这里我就直接使用了,大概的方法和解释我都已经注释出来了。这里讲一下注释的第二条,这是跟觉不同的日志文件来写的,这样也就是说你可以用我的脚本来实现对你或者你们公司的日志文件进行分析,只需要提取出ip地址就行。
运行脚本,得到数据内容,这里对应的都是英文国家简称,在pygeoip.py中定义了这些国家的简称,可以去分析一下。
总结:
维基百科日志文件微信回复维基百科就可以得到,GeoIP.dat回复GeoIP,pygeoip.py回复pygeoip。
这样我们的需求基本上都实现了,我写脚本秉持的一个原则是,bug肯定是有的,优化是慢慢的事情,不要太过于相信别人的输入,也不要太看不起别人的水平。
头条号:爱家人爱老婆的IT男
QQ群:145252709,我会上传资源,同时会有很多大神跟你们讨论学习分享
微信公众号:程序猿的野生香蕉