使用Python分析apache訪問日誌

3.1 問題
編寫count_patt.py腳本,實現一個apche日誌分析腳本:

統計每個客戶端訪問apache服務器的次數
將統計信息通過字典的方式顯示出來
分別統計客戶端是Firefox和MSIE的訪問次數
分別使用函數式編程和麪向對象編程的方式實現
3.2 方案
collections是python內建的一個集合模塊,模塊中提供了許多有用的集合類,其中counter類 是一個簡單的計數器,以字典的鍵值對形式儲存,其中搜索的元素作爲鍵,出現的次數作爲值

實現過程:

1.實例化一個計數器

2.實例化正則表達式

3.將文件以對象形式打開

4.通過正則表達式查找文件每一行

5.如果找到結果

6.將結果添加到計數器,通過update方法更新原有數據

7.返回計數器

8.將文件地址和正則表達式作爲實參傳遞給函數

3.3 步驟
實現此案例需要按照如下步驟進行。

步驟一:編寫腳本

[root@localhost day08]# vim count_patt.py
#!/usr/bin/env python3
import re
import collections
#fname 文件地址  patt 正則表達式
def count_patt(fname,patt):
    
    counter = collections.Counter()
   
    cpatt = re.compile(patt)
        with open(fname) as fobj:
        for line in fobj:
           
            m = cpatt.search(line)
           
            if m:
              
                counter.update([m.group()])
  
    return counter
if __name__ == "__main__":
    fname = "access_log.txt"
    ip_patt = "^(\d+\.){3}\d+"
    a = count_patt(fname,ip_patt)
    print(a)
    br_patt = "Firefox|MSIE|Chrome"
    b = count_patt(fname,br_patt)
    print(b)

實現此案例還可通過面向對象方式實現:

實現過程:

1.創建類CountPatt

2.定義構造方法 創建正則對象

3.定義類方法

4.創建計數器對象

5.打開文本文件

6.通過正則表達式查找文件每一行

7.如果找到結果

8.將結果添加到計數器,通過update方法更新原有數據

9.返回計數器

10.將文件地址和正則表達式作爲實參傳遞給函數

[root@localhost day08]# vim count_patt2.py
#!/usr/bin/env python3
import re
import collections
import re
import collections
class CountPatt:
    
    def __init__(self,patt):
        self.cpatt = re.compile(patt)
    
    def count_patt(self,fname):
        
        counter = collections.Counter()
       
        with open(fname) as fobj:
       
            for line in fobj:
       
                m = self.cpatt.search(line)
        
                if m:
        
                    counter.update([m.group()])
    
        return counter
if __name__ == "__main__":
    fname = "access_log.txt"
    ip_patt = "^(\d+\.){3}\d+"
    br_patt = "Firefox|MSIE|Chrome"
    ip = CountPatt(ip_patt)
    print(ip.count_patt(fname))
    br = CountPatt(br_patt)
    print(br.count_patt(fname))

步驟二:測試腳本執行

[root@localhost day08]# python3 count_patt.py 
Counter({‘172.40.0.54’:391,‘172.40.50.116’:244,‘201.1.1.254’:173,‘127.0.0.1’:121,‘201.1.2.254’:119})
Counter({‘Firefox’:870,‘MSIE’:391,‘Chrome’:24})
[root@localhost day08]# python3 count_patt2.py 
Counter({‘172.40.0.54’:391,‘172.40.50.116’:244,‘201.1.1.254’:173,‘127.0.0.1’:121,‘201.1.2.254’:119})
Counter({‘Firefox’:870,‘MSIE’:391,‘Chrome’:24})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章