最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python正則分析nginx的訪問日志

 更新時(shí)間:2017年01月17日 09:19:21   作者:mindg.cn  
最近工作中遇到一個(gè)需求,是要分析nginx的訪問日志,覺著利用python來實(shí)現(xiàn)比較合適,所以下面這篇文章主要介紹了利用python正則如何分析nginx的訪問日志,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

本文的腳本是分析nginx的訪問日志, 主要為了檢查站點(diǎn)uri的訪問次數(shù)的,檢查的結(jié)果會(huì)提供給研發(fā)人員做參考,因?yàn)檎劦椒治雎?,那肯定要用到正則表達(dá)式了,所以請沒有接觸過正則的小伙伴自行補(bǔ)腦,因?yàn)樯婕罢齽t的內(nèi)容,實(shí)在沒法展開寫,正則的內(nèi)容太過龐大,根本不是一篇兩篇能寫清楚的。

開始前,我們先看看要分析的日志結(jié)構(gòu):

127.0.0.1 - - [19/Jun/2012:09:16:22 +0100] "GET /GO.jpg HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; SE 2.X MetaSr 1.0)"
127.0.0.1 - - [19/Jun/2012:09:16:25 +0100] "GET /Zyb.gif HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QQDownload 711; SV1; .NET4.0C; .NET4.0E; 360SE)"

這是修改過的日志內(nèi)容,敏感內(nèi)容都以刪除或替換了,不過不影響我們的分析結(jié)果,當(dāng)然格式什么的這都不重要,Nginx訪問日志是可以自定義的,每家公司可能都會(huì)稍有不同,所以要能理解腳本內(nèi)容,并通過自己修改應(yīng)用到了自己工作中才是重點(diǎn),我給的日志格式也就是個(gè)參考,我打賭你在你公司服務(wù)器上看到的日志格式肯定跟我的格式不一樣, 看完日志格式,我們開始要寫我們的腳本了

我先貼代碼,稍后解釋:

import re
from operator import itemgetter
 
def parser_logfile(logfile):
 pattern = (r''
   '(\d+.\d+.\d+.\d+)\s-\s-\s' #IP address
   '\[(.+)\]\s' #datetime
   '"GET\s(.+)\s\w+/.+"\s' #requested file
   '(\d+)\s' #status
   '(\d+)\s' #bandwidth
   '"(.+)"\s' #referrer
   '"(.+)"' #user agent
  )
 fi = open(logfile, 'r')
 url_list = []
 for line in fi:
  url_list.append(re.findall(pattern, line))
 fi.close()
 return url_list
 
def parser_urllist(url_list):
 urls = []
 for url in url_list:
  for r in url: 
   urls.append(r[5])
 return urls
 
def get_urldict(urls):
 d = {}
 for url in urls:
  d[url] = d.get(url,0)+1
 return d
 
def url_count(logfile):
 url_list = parser_logfile(logfile)
 urls = parser_urllist(url_list)
 totals = get_urldict(urls)
 return totals
 
if __name__ == '__main__':
 urls_with_counts = url_count('example.log')
 sorted_by_count = sorted(urls_with_counts.items(), key=itemgetter(1), reverse=True)
 print(sorted_by_count)

腳本解釋,parser_logfile()函數(shù)功能是分析日志,返回匹配的行列表,正則部分就不解釋了,大家看注釋應(yīng)該知道它是匹配什么內(nèi)容的,parser_urllist()函數(shù)功能是將獲取用戶訪問的url,get_urldict()函數(shù)功能是返回一個(gè)字典,以url為鍵,如果鍵相同值增1,返回的字典是每個(gè)url和最大的訪問次數(shù),url_count()函數(shù)功能就是調(diào)用了之前定義的函數(shù),主函數(shù)部分,就說說itemgetter,它可以實(shí)現(xiàn)按指定元素進(jìn)行排序,舉例就明白了:

>>> from operator import itemgetter
>>> a=[('b',2),('a',1),('c',0)] 
>>> s=sorted(a,key=itemgetter(1))
>>> s
[('c', 0), ('a', 1), ('b', 2)]
>>> s=sorted(a,key=itemgetter(0))
>>> s
[('a', 1), ('b', 2), ('c', 0)]

reverse=True參數(shù)表示降序排序,就是從大到小排序,腳本運(yùn)行結(jié)果:

[('http://domain.com/htm_data/7/1206/758536.html', 141), ('http://domain.com/?q=node&page=12', 3), ('http://website.net/htm_data/7/1206/758536.html', 1)]

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Python實(shí)現(xiàn)抓取HTML網(wǎng)頁并以PDF文件形式保存的方法

    Python實(shí)現(xiàn)抓取HTML網(wǎng)頁并以PDF文件形式保存的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)抓取HTML網(wǎng)頁并以PDF文件形式保存的方法,結(jié)合實(shí)例形式分析了PyPDF2模塊的安裝及Python抓取HTML頁面并基于PyPDF2模塊生成pdf文件的相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 基于Python實(shí)現(xiàn)的影視數(shù)據(jù)智能分析系統(tǒng)

    基于Python實(shí)現(xiàn)的影視數(shù)據(jù)智能分析系統(tǒng)

    數(shù)據(jù)分析與可視化是當(dāng)今數(shù)據(jù)分析的發(fā)展方向,大數(shù)據(jù)時(shí)代,數(shù)據(jù)資源具有海量特征,數(shù)據(jù)分析和可視化主要通過Python數(shù)據(jù)分析來實(shí)現(xiàn),本文給大家介紹了如何基于Python實(shí)現(xiàn)的影視數(shù)據(jù)智能分析系統(tǒng),文中給出了部分詳細(xì)代碼,感興趣的朋友跟著小編一起來看看吧
    2024-01-01
  • Python Selenium截圖功能實(shí)現(xiàn)代碼

    Python Selenium截圖功能實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python Selenium截圖功能實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 解決python2中unicode()函數(shù)在python3中報(bào)錯(cuò)的問題

    解決python2中unicode()函數(shù)在python3中報(bào)錯(cuò)的問題

    這篇文章主要介紹了在python2中unicode()函數(shù)在python3中報(bào)錯(cuò)的解決方案,希望給大家做個(gè)參考,下次出現(xiàn)這個(gè)問題的時(shí)候,也知道如何應(yīng)對
    2021-05-05
  • python使用Pygal創(chuàng)建交互式圖表的示例代碼

    python使用Pygal創(chuàng)建交互式圖表的示例代碼

    Pygal 是一個(gè)用于生成高質(zhì)量、可縮放(SVG 格式)、可交互圖表的 Python 圖表庫,與傳統(tǒng)的圖表庫不同,Pygal 的輸出是基于矢量圖形的,本文給大家介紹了python使用Pygal創(chuàng)建交互式圖表的方法示例,需要的朋友可以參考下
    2024-12-12
  • python開頭的coding設(shè)置方法

    python開頭的coding設(shè)置方法

    今天小編就為大家分享一篇python開頭的coding設(shè)置方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python實(shí)現(xiàn)堆和索引堆的代碼示例

    python實(shí)現(xiàn)堆和索引堆的代碼示例

    本篇文章主要介紹了python實(shí)現(xiàn)堆和索引堆的代碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python持續(xù)監(jiān)聽文件變化代碼實(shí)例

    Python持續(xù)監(jiān)聽文件變化代碼實(shí)例

    這篇文章主要介紹了Python持續(xù)監(jiān)聽文件變化代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • pyinstaller使用大全

    pyinstaller使用大全

    這篇文章主要介紹了pyinstaller使用大全,pyinstaller可以方便地將腳本編譯成exe,本文結(jié)合實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • 如何使用Python?繪制瀑布圖

    如何使用Python?繪制瀑布圖

    這篇文章主要介紹了如何使用Python?繪制瀑布圖,我們一起了解瀑布圖的重要性,以及如何使用不同的繪圖庫繪制瀑布圖。瀑布圖是一種二維圖表,專門用于了解隨著時(shí)間或多個(gè)步驟或變量的增量正負(fù)變化的影響,下文更多詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05

最新評論

怀集县| 茶陵县| 合肥市| 河曲县| 喜德县| 高淳县| 苗栗市| 台安县| 边坝县| 双鸭山市| 安塞县| 维西| 根河市| 包头市| 运城市| 淮阳县| 建平县| 木兰县| 休宁县| 湘乡市| 文昌市| 曲松县| 镇巴县| 江口县| 永顺县| 宜阳县| 福清市| 辛集市| 宁陕县| 松滋市| 东港市| 疏勒县| 长沙市| 肥东县| 白河县| 宜城市| 邢台县| 太白县| 海阳市| 伽师县| 光泽县|