本帖最后由 lsl.tutu 于 2018-8-30 21:41 编辑
分享技术: 使用re模块分析log日志文件
准备工作: 日志文件过大, 截图放在下面
目标: 根据日志文件完成四个需求
# 需求
# 1. 从log日志文件匹配出访问总量
# 2. 匹配出每一个ip访问次数
# 3. 匹配出访问次数最多的是那一个分钟
# 4. 匹配出爬虫访问的次数
关于下面五张图片的注释:
# 整体的日志信息,日志过长,没有截取全部
# 第一个需求的截图
# 第二个需求的截图
# 第三个需求的截图
# 第四个需求的截图
代码在下方:
import re
def data_list():
"""
读取文件,分割读取内容
:return:
"""
with open('日志.log','r') as f:
datas = f.read().split('\n')
return datas
datas = data_list()
# 1. 从log日志文件匹配出访问总量
def visit_nums():
nums = len(datas)
# print('访问总量',nums)
visit_nums()
# 2. 匹配出每一个ip访问次数
def every_ip_nums():
ip_dicts = {}
for data in datas:
ip = re.findall(r'(\d+\.\d+\.\d+\.\d+)', data)[0]
if ip not in ip_dicts.keys():
ip_dicts[ip] = 1
else:
ip_dicts[ip] += 1
# print('每个ip访问的次数',ip_dicts)
every_ip_nums()
# 3. 匹配出访问次数最多的是那一个分钟
def max_time():
time_dicts = {}
for data in datas:
time = re.findall(r'\[20/Jun/(2018:\d+:\d+):\d+ \+0800\]', data)[0]
if time not in time_dicts.keys():
time_dicts[time] = 1
else:
time_dicts[time] += 1
# 只排序不改变原表
keys_sort = sorted(time_dicts, key=time_dicts.get)
print('访问次数最的时间是',keys_sort)
print(time_dicts['2018:00:17'])
max_time()
# 4. 匹配出爬虫访问的次数
def Spider_visit():
spiders = 0
for data in datas:
if 'spider' in data:
spiders += 1
Spider_visit()
|
|