您的位置:首页技术文章
文章详情页

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

【字号: 日期:2022-07-02 11:07:53浏览:37作者:猪猪

问题描述

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]=1else: source_ip_dict[source_ip]=source_ip_dict[source_ip]+1

通过以上的代码把apache的日志ip提取出来,并且进行统计去重了,提取的ip数据如下:python - 通过正则提取出来的ip,怎么命名

那么要怎么将这些ip地址进行命名分类,如202.108.11.103跟220.181.32.137为百度蜘蛛ip想要实现的效果如下这两个ip命名为百度蜘蛛,然后把他们的统计数据相加即4336+3411百度蜘蛛 7747

这个要怎么操作

问题解答

回答1:

from itertools import groupbyNAME_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}回答2:

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

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回答3:

使用pandas的数据透视表

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

回答4:

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

idipgroupName1202.108.11.103百度蜘蛛2220.181.32.137百度蜘蛛

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

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

标签: Python 编程
相关文章: