python正则分析nginx的访问日志
发布时间 - 2026-01-10 22:34:14 点击率:次前言

本文的脚本是分析nginx的访问日志, 主要为了检查站点uri的访问次数的,检查的结果会提供给研发人员做参考,因为谈到分析嘛,那肯定要用到正则表达式了,所以请没有接触过正则的小伙伴自行补脑,因为涉及正则的内容,实在没法展开写,正则的内容太过庞大,根本不是一篇两篇能写清楚的。
开始前,我们先看看要分析的日志结构:
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)"
这是修改过的日志内容,敏感内容都以删除或替换了,不过不影响我们的分析结果,当然格式什么的这都不重要,Nginx访问日志是可以自定义的,每家公司可能都会稍有不同,所以要能理解脚本内容,并通过自己修改应用到了自己工作中才是重点,我给的日志格式也就是个参考,我打赌你在你公司服务器上看到的日志格式肯定跟我的格式不一样, 看完日志格式,我们开始要写我们的脚本了
我先贴代码,稍后解释:
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()函数功能是分析日志,返回匹配的行列表,正则部分就不解释了,大家看注释应该知道它是匹配什么内容的,parser_urllist()函数功能是将获取用户访问的url,get_urldict()函数功能是返回一个字典,以url为键,如果键相同值增1,返回的字典是每个url和最大的访问次数,url_count()函数功能就是调用了之前定义的函数,主函数部分,就说说itemgetter,它可以实现按指定元素进行排序,举例就明白了:
>>> 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参数表示降序排序,就是从大到小排序,脚本运行结果:
[('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)]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python
# nginx日志
# nginx日志解析
# nginx
# 日志分析
# Nginx if语句加正则表达式实现字符串截断
# Nginx的正则表达式详解
# nginx location 配置 正则表达式实例详解
# nginx 伪静态Rewrite正则资源汇总
# Nginx rewrite正则匹配重写的方法示例
# nginx配置location总结location正则写法及rewrite规则写法
# nginx用正则表达式实现泛域名自动匹配目录的方法
# 如何利用nginx通过正则拦截指定url请求详解
# Nginx正则表达式相关的参数和规则介绍
# 这是
# 是个
# 也就
# 才是
# 就不
# 你在
# 是从
# 它是
# 看完
# 太过
# 我给
# 自定义
# 我先
# 它可以
# 这篇文章
# 谢谢大家
# 都以
# 提供给
# 不重要
# 稍有
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
如何快速配置高效服务器建站软件?
如何快速搭建高效简练网站?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Laravel如何配置Horizon来管理队列?(安装和使用)
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
IOS倒计时设置UIButton标题title的抖动问题
如何选择可靠的免备案建站服务器?
制作公司内部网站有哪些,内网如何建网站?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Laravel怎么实现验证码(Captcha)功能
如何用PHP快速搭建CMS系统?
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
高端智能建站公司优选:品牌定制与SEO优化一站式服务
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Android GridView 滑动条设置一直显示状态(推荐)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
海南网站制作公司有哪些,海口网是哪家的?
javascript读取文本节点方法小结
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
简单实现Android验证码
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Laravel怎么在Controller之外的地方验证数据
Bootstrap整体框架之CSS12栅格系统
java ZXing生成二维码及条码实例分享
太平洋网站制作公司,网络用语太平洋是什么意思?
JavaScript如何实现错误处理_try...catch如何捕获异常?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Laravel如何实现用户密码重置功能?(完整流程代码)
HTML 中动态设置元素 name 属性的正确语法详解
C++用Dijkstra(迪杰斯特拉)算法求最短路径
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
jquery插件bootstrapValidator表单验证详解
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
免费网站制作appp,免费制作app哪个平台好?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel如何使用Sanctum进行API认证?(SPA实战)
如何基于云服务器快速搭建个人网站?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
EditPlus中的正则表达式 实战(1)

