搜索

首页  >  问答  >  正文

python - 通过正则提取出来的ip,怎么命名

source_ip = line.split('- -')[0].strip()
            if re.match('[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}',source_ip):
                if source_ip_dict.get(source_ip,'-')=='-':
                    source_ip_dict[source_ip]=1
                else:
                    source_ip_dict[source_ip]=source_ip_dict[source_ip]+1

通过以上的代码把apache的日志ip提取出来,并且进行统计去重了,
提取的ip数据如下:

那么要怎么将这些ip地址进行命名分类,

202.108.11.103跟220.181.32.137为百度蜘蛛ip
想要实现的效果如下
这两个ip命名为百度蜘蛛,然后把他们的统计数据相加即4336+3411
百度蜘蛛 7747

这个要怎么操作

仅有的幸福仅有的幸福2750 天前733

全部回复(4)我来回复

  • 仅有的幸福

    仅有的幸福2017-05-18 11:02:19

    雷雷

    回复
    0
  • 黄舟

    黄舟2017-05-18 11:02:19

    可以尝试构建一个大型的以字典为键, 爬虫名字为值的字典;

    ip_map = {
        '202.108.11.103': 'baidu-spider',
        '220'.181.32.137: 'baidu-spider',
        '192.168.1.1': 'other'
        ....
    }
    sum = {}
    for ip in source_ip:
        print ip
        sum[ip_mapping.get(ip, 'other')] = sum.get(ip, 0) + source_ip[ip]
    print sum
    

    回复
    0
  • 滿天的星座

    滿天的星座2017-05-18 11:02:19

    使用pandas的数据透视表

    回复
    0
  • 阿神

    阿神2017-05-18 11:02:19

    这样多累啊!
    为什么不给这个ip分组单独建立一张表, 名为IPGroup (id, ip, groupname)

    id ip groupName
    1 202.108.11.103 百度蜘蛛
    2 220.181.32.137 百度蜘蛛

    之后一个SQL就搞定了,多么轻松(设楼主用的表明为IPStastics)

    SELECT b.groupName, SUM(a.count)
    FROM IPStastics a 
      INNER JOIN IPGroup b
      ON a.ip = b.ip
    GROUP BY b.groupName

    回复
    0
  • 取消回复