python - Comment nommer une adresse IP extraite via une expression régulière
仅有的幸福
仅有的幸福 2017-05-18 11:00:19
0
4
750
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

Extrayez l'adresse IP du journal Apache via le code ci-dessus et effectuez une déduplication statistique
Les données IP extraites sont les suivantes :

.

Alors, comment nommer et classer ces adresses IP,
Par exemple,
202.108.11.103 et 220.181.32.137 sont des IP Baidu Spider
L'effet souhaité est le suivant
Nommez ces deux IP comme Baidu Spider, puis comparez leurs données statistiques. Ajouter 4336+3411
Baidu Spider 7747

Comment faire fonctionner ceci

仅有的幸福
仅有的幸福

répondre à tous(4)
仅有的幸福
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}
黄舟

Vous pouvez essayer de créer un grand dictionnaire avec le dictionnaire comme clé et le nom du robot comme valeur ;

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
滿天的星座

Tableau croisé dynamique utilisant des pandas

阿神

Comme c'est fatiguant !
Pourquoi ne pas créer une table distincte pour ce groupe IP, nommée IPGroup (id, ip, groupname)

id ip Nomdugroupe
1 202.108.11.103 Baidu Araignée
2 220.181.32.137 Araignée Baidu

Après cela, cela peut être fait avec un seul SQL, comme c'est simple (laissez l'affiche utiliser IPStastics)

SELECT b.groupName, SUM(a.count)
FROM IPStastics a 
  INNER JOIN IPGroup b
  ON a.ip = b.ip
GROUP BY b.groupName
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal