Python练习:分析博客访问日志

用博客的访问日志来练习了下Python的文件读取、正则表达式以及列表:

import fileinput
import re
from collections import Counter
import pandas as pd

file_path = r'日志存放路径'
file_path2 = r'保存分析结果的excel表存放路径'

# 从日志中提取ip地址
ip_lists = []
for line in fileinput.input(file_path):
    #通过正则表达式逐行提取ip地址
    ip = re.match(r'(\d){1,3}\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}', line).group() 
    # 提取访问时间的正则表达式: time = re.search('(?<=\[)(.*?)(?=])', rest).group()
    ip_lists.append(ip)
# 访问次数前100位,生成的列表格式为[(ip, 次数), ..., (ip, 次数)]
top_100 = Counter(ip_lists).most_common(100) 

# 利用上一步生成的前100访问记录的ip地址和访问次数分别生成列表。
ips = []
visit_times = []
for element in top_100:
    ips.append(element[0])
    visit_times.append(element[1])
"""
更新,之前用的方法如上,但是一直记得有另外的方法生成ips和visit_times列表,
当时想不起来,新的方法如下:ips, visit_times = zip(*top_100)
"""

# 将生成的列表导出为Excel表
df = pd.DataFrame(data=zip(ips, visit_times), columns=['ip', '访问次数'])
df.to_excel(excel_writer=file_path2)

打印df的结果如下:

from pprint import pprint
pprint(df)
                ip    访问次数
0      20.188.62.14  863703    
1    120.25.226.167   78964    
2    20.203.240.227   18591    
3     20.121.13.154   13968    
4    159.75.134.110    9756    
..              ...     ...
95    150.158.47.78    3182
96   150.158.135.88    3182
97  150.158.133.157    3182
98   150.158.136.41    3182
99    150.158.93.27    3182

[100 rows x 2 columns]