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
Ekstrak IP log apache melalui kod di atas, dan lakukan deduplikasi statistik
Data IP yang diekstrak adalah seperti berikut:
Jadi bagaimana untuk menamakan dan mengklasifikasikan alamat IP ini,
Sebagai contoh,
202.108.11.103 dan 220.181.32.137 ialah IP Baidu Spider
Kesan yang diingini adalah seperti berikut
Namakan kedua-dua IP ini sebagai data statistik Baidu, kemudian bandingkan data statistik mereka. Tambah 4336+3411
Baidu Spider 7747
Cara mengendalikan ini
Anda boleh cuba membina kamus besar dengan kamus sebagai kunci dan nama perangkak sebagai nilai;
Pivot table menggunakan panda
Memang penat!
Mengapa tidak membuat jadual berasingan untuk kumpulan IP ini, bernama IPGroup (id, ip, nama kumpulan)
Lepas tu boleh buat dengan satu SQL sahaja, betapa mudahnya (biar poster guna IPStastics)