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
这个要怎么操作
from itertools import groupby
NAME_IP_MAPPING = {
'202.108.11.103':'百度蜘蛛',
'220.181.32.137': '百度蜘蛛',
}
spiders = [
{'ip':'202.108.11.103','count':123},
{'ip':'220.181.32.137','count':345}
]
# 先用ip通过映射得到名字,再根据名字将spiders里的item分组,之后各自求和存入新的dict中。
{k: sum(s['count'] for s in g)
for k, g in groupby(spiders, lambda s:NAME_IP_MAPPING.get(s['ip']))}
# output: {'百度蜘蛛': 468}