搜尋

首頁  >  問答  >  主體

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

這個要怎麼操作

仅有的幸福仅有的幸福2781 天前757

全部回覆(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
  • 取消回覆