python 用于读取日志文件以确定未找到的 URL 列表的脚本 (404)
python script to read a log file to determine the list of URLs that were not found (404)
从给定的日志文件中,我需要找到未找到的 URL (404)
来自日志文件的样本数据是:
条目 1:
443623565414391809 2014-09-02T14:09:36 2014-09-03T00:48:42Z 4147981 demo-workablehr 54.198.230.235 Local3 Info heroku/router at=info method=GET path="/api/accounts/3" host=workabledemo.com request_id=73ffd4fc-c86c-41ca-a737-91da110fbc39 fwd="50.31.164.139" dyno=web.2 connect=5ms service=17ms status=404 bytes=444
条目 2:
443623565414391810 2014-09-02T14:10:27 2014-09-03T00:48:42Z 4147981 demo-workablehr 54.198.230.235 Local7 信息 app/web.2 [e1af99e5-64b4-4228-df-986023 ] [VISITOR #NEW] [GUEST] [1m[35mAAccount Load (1.2ms)[0m SELECT "accounts".* FROM "accounts" WHERE (accounts.approval_status != 'blocked') AND "accounts"."id" = 3 限制 1
这里的block()是'ESC'
我知道我需要打开一个文件并读取内容并查找 status=404
我如何使用 python3 执行此操作并且文件中的条目数为 30,000+
我试过这个:
count404 = 0
with open('C:\Users\Zee\Downloads\testLog.txt','r') as f:
for line in f:
for word in line.split():
count404 += 1
print(count404)
我想知道是否有更好的方法,如果我采用这种方法,那么如何找到状态为 404 的 URL 列表
我对 python 和 Whosebug 还很陌生。
提前致谢
正如评论中所指出的,正则表达式是你最好的朋友,
这是示例方法
import re
count=0
fl=open('C:\Users\Zee\Downloads\testLog.txt','r')
fillines=fl.readlines()
fl.close()
for i in fillines:
if re.search(r'status=404',i):
count+=1
要列出状态为 404 的日志中的所有路径,我们可以再次使用正则表达式
import re
count=0
lst=[]
fl=open('C:\Users\Zee\Downloads\testLog.txt','r')
fillines=fl.readlines()
fl.close()
for i in fillines:
if re.search(r'status=404',i):
count+=1
path=re.search(r'path="[/\w+/]+"',fillines[0]).group(0)#get path using regex
path=path.split("path=")[1] #since we only want the url
path=path.replace('"','') #we dont want the quotes in log
lst.append(path)#since we only want the url
从给定的日志文件中,我需要找到未找到的 URL (404) 来自日志文件的样本数据是:
条目 1:
443623565414391809 2014-09-02T14:09:36 2014-09-03T00:48:42Z 4147981 demo-workablehr 54.198.230.235 Local3 Info heroku/router at=info method=GET path="/api/accounts/3" host=workabledemo.com request_id=73ffd4fc-c86c-41ca-a737-91da110fbc39 fwd="50.31.164.139" dyno=web.2 connect=5ms service=17ms status=404 bytes=444
条目 2:
443623565414391810 2014-09-02T14:10:27 2014-09-03T00:48:42Z 4147981 demo-workablehr 54.198.230.235 Local7 信息 app/web.2 [e1af99e5-64b4-4228-df-986023 ] [VISITOR #NEW] [GUEST] [1m[35mAAccount Load (1.2ms)[0m SELECT "accounts".* FROM "accounts" WHERE (accounts.approval_status != 'blocked') AND "accounts"."id" = 3 限制 1
这里的block()是'ESC'
我知道我需要打开一个文件并读取内容并查找 status=404 我如何使用 python3 执行此操作并且文件中的条目数为 30,000+
我试过这个:
count404 = 0
with open('C:\Users\Zee\Downloads\testLog.txt','r') as f:
for line in f:
for word in line.split():
count404 += 1
print(count404)
我想知道是否有更好的方法,如果我采用这种方法,那么如何找到状态为 404 的 URL 列表
我对 python 和 Whosebug 还很陌生。 提前致谢
正如评论中所指出的,正则表达式是你最好的朋友, 这是示例方法
import re
count=0
fl=open('C:\Users\Zee\Downloads\testLog.txt','r')
fillines=fl.readlines()
fl.close()
for i in fillines:
if re.search(r'status=404',i):
count+=1
要列出状态为 404 的日志中的所有路径,我们可以再次使用正则表达式
import re
count=0
lst=[]
fl=open('C:\Users\Zee\Downloads\testLog.txt','r')
fillines=fl.readlines()
fl.close()
for i in fillines:
if re.search(r'status=404',i):
count+=1
path=re.search(r'path="[/\w+/]+"',fillines[0]).group(0)#get path using regex
path=path.split("path=")[1] #since we only want the url
path=path.replace('"','') #we dont want the quotes in log
lst.append(path)#since we only want the url