您好,欢迎访问一九零五行业门户网

python基于nginx访问日志统计客户端ip访问量

专业的统计网站,比如百度统计,google analytics,cnzz等统计后台提供的都是站长常用的统计指标,比如uv,pv,在线时长,ip等,另外由于网络原因,我发现google analytics会比百度统计多几百的ip,所以想自己写脚本来了解下真正的访问量有多少,不过基于nginx的访问日志会比统计后台多不少,因为有不少蜘蛛的访问也会被统计进来,还有静态文件的统计,其实如果算法改进的话完全可以过滤掉那些无用的统计数据,今天给牛牛们分享下最基础的统计,另外也是为了学习和回顾python语言。
比如,服务器上有nginx的log如下:
221.221.155.54 - - [02/aug/2014:15:16:11 +0800] get / http/1.1 200 8482 http://www.zuidaima.com/ mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/31.0.1650.57 safari/537.36 - 0.020
221.221.155.53 - - [02/aug/2014:15:16:11 +0800] get / http/1.1 200 8482 http://www.zuidaima.com/ mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/31.0.1650.57 safari/537.36 - 0.020
221.221.155.54 - - [02/aug/2014:15:16:11 +0800] get / http/1.1 200 8482 http://www.zuidaima.com/ mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/31.0.1650.57 safari/537.36 - 0.020
统计脚本如下:
stat_ip.py
#encoding=utf8
import re
zuidaima_nginx_log_path=/usr/local/nginx/logs/www.zuidaima.com.access.log
pattern = re.compile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
def stat_ip_views(log_path):
    ret={}
    f = open(log_path, r)
    for line in f:
        match = pattern.match(line)
        if match:
            ip=match.group(0)
            if ip in ret:
                views=ret[ip]
            else:
                views=0
            views=views+1
            ret[ip]=views
    return ret
def run():
    ip_views=stat_ip_views(zuidaima_nginx_log_path)
    max_ip_view={}
    for ip in ip_views:
        views=ip_views[ip]
        if len(max_ip_view)==0:
            max_ip_view[ip]=views
        else:
            _ip=max_ip_view.keys()[0]
            _views=max_ip_view[_ip]
            if views>_views:
                max_ip_view[ip]=views
                max_ip_view.pop(_ip)
        print ip:, ip, ,views:, views
    #总共有多少ip
    print total:, len(ip_views)
    #最大访问的ip
    print max_ip_view:, max_ip_view
run()运行结果如下:
ip: 221.221.155.53 ,views: 1
ip: 221.221.155.54 ,views: 2
total: 2
max_ip_view: {'221.221.155.54': 2}
这样得到了所有ip的访问量及其最大ip的访问。
以上就介绍了python基于nginx访问日志统计客户端ip访问量,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
其它类似信息

推荐信息