当前位置:首页 >  站长 >  搜索优化 >  正文

把 access.log 转成 CSV:awk 之外的第二条路

 2026-09-09 09:46  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

前几篇的 awk 报表很顺手,但它有两个天花板:一是结果只能打印在终端上,要给不懂命令行的同事看、要丢进 Excel 做透视表,就得有个通用格式;二是复杂逻辑(多条件组合、正则提取、跨行关联)用 awk 写起来越写越拧巴。这时候就该 Python 上场了——把日志解析成 CSV,一条命令跑完,后面随便怎么加工。

解析 Nginx combined 格式用一条正则就够了:IP、时间、请求行、状态码、字节数、来源页、UA,七个字段一次抓齐。写成 Python 脚本,逐行匹配、逐行写入,几百 MB 的日志也是流式处理,内存占用恒定。

import re, csv

LINE = re.compile(
r'(\S+) \S+ \S+ \[([^]]+)\] "(\S+) (\S+) (\S+)" '
r'(\d{3}) (\d+) "([^"]*)" "([^"]*)"'
)

with open("/var/log/nginx/access.log", encoding="utf-8",
errors="replace") as fin, \
open("access.csv", "w", newline="", encoding="utf-8-sig") as fout:
w = csv.writer(fout)
w.writerow(["ip", "time", "method", "url", "proto",
"status", "bytes", "referer", "ua"])
for line in fin:
m = LINE.match(line)
if m:
w.writerow(m.groups())

几个细节决定这脚本好不好用:编码用 utf-8-sig 写出,Excel 双击打开中文不乱码;errors="replace" 容忍日志里偶发的脏字节,不至于跑一半崩掉;正则里 \S+ 抓请求行,畸形行匹配不上就跳过,最后核对行数就能知道丢了多少脏数据。归档的 .gz 压缩日志也不用先解压,把 open 换成 gzip.open 即可,脚本其余部分一行不用改。

# 验证:CSV 行数 vs 日志行数(差值就是畸形行数)
wc -l /var/log/nginx/access.log
wc -l access.csv

# 只导蜘蛛记录:写入前加一行过滤
for line in fin:
m = LINE.match(line)
if m and ("spider" in m.group(9).lower()
or "bot" in m.group(9).lower()):
w.writerow(m.groups())

CSV 到手,Excel 透视表直接开做:行放 url、列放 status、值放计数,蜘蛛抓了什么一目了然;再加个筛选器按 UA 分百度谷歌,比任何命令行都直观。装了 pandas 的话连 Excel 都省了,两行代码出蜘蛛抓取 TOP 榜,比透视表还快。

import pandas as pd

df = pd.read_csv("access.csv", encoding="utf-8-sig")
bot = df[df["ua"].str.contains("spider|bot", case=False,
na=False)]
print(bot["url"].value_counts().head(10))
print(bot["status"].value_counts())

要自动化的话,把脚本挂进 logrotate 的钩子或者 crontab,每天切完日志自动出前一天的 CSV,攒一个月就是完整的原始数据库。

# crontab:每天 0 点 10 分处理切割后的日志
10 0 * * * /usr/bin/python3 /opt/seo/log2csv.py \
/var/log/nginx/access.log.1 /opt/seo/csv/$(date +\%F).csv

收尾摆一下定位:awk 适合即席查询,敲完就走;CSV 适合沉淀数据和协作分发。两条路不冲突,日常诊断用 awk,周报月报用 Python 出 CSV。真正不该做的是死磕其中一条——工具为结论服务,哪个快用哪个。

相关阅读:CSV 是后面所有报表的原料。《SEO 自动化总清单:日、周、月、季各该跑什么》里日报、月报都从这份文件取数,本篇是日志组的数据地基,总纲建议收藏。

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关文章

  • 软 404:页面活着,收录死了

    上面那篇说404要从日志里挖,这一篇说一个日志挖不出来的更阴险的坑:软404。它的定义Google官方写得很清楚——一个URL返回的是200成功状态码,但页面内容却在告诉用户“这个页面不存在”,有时甚至是没有主内容的空页面。从HTTP协议看它一切正常,从内容看它已经死了。软404的常见诱因官方也列了

  • 从日志里挖出蜘蛛天天撞的 404 死点

    站改版半年了,站内链接自认清理得干干净净,蜘蛛却还在日复一日地撞404。这些死点从哪来的?旧外链指向被删的文章、搜索引擎库里缓存的旧URL、老sitemap的残留、站内漏改的某个入口——单靠人脑想,永远想不全。好消息是蜘蛛会把每一次碰壁都老老实实记在你的日志里,去日志里捞就行。思路是三步:从蜘蛛抓取

    标签:
    seo优化
    404死链
  • 蜘蛛抓取返回码分布:收录下滑先查这里

    收录肉眼可见地掉,站长第一反应往往是内容出问题了,赶紧改标题补内容。先别动。收录下滑有个更常见的隐形诱因:蜘蛛一直在来,但每次都扑空——抓走一串5xx或者大面积404。抓取端不顺畅,搜索引擎会降低对你站点的抓取意愿,收录自然一茬不如一茬。这不是玄学,官方文档写得明明白白:Google的抓取文档说,站

  • 百度指数+5118关键词挖掘组合拳:从词库到内容规划的完整流程

    选题靠拍脑袋,写完了没人搜,这是内容站最常见的死法。问题往往不在文笔,在于你写的词压根没人在搜,或者搜的人根本轮不到你。挖词这一步省下的时间,后面都会变成无人访问的页面还回来。工具要分工。百度指数是方向仪,看的是趋势、需求图谱和人群画像,帮你判断一个核心词值不值得做、季节性怎么走;5118和爱站是挖

    标签:
    seo优化
  • 小红书搜索流量获取方法:笔记关键词布局与封面OCR优化

    推荐流量是烟花,爆一次就没了,热度过去连灰都不剩。搜索流量是自来水,只要你的笔记在某个关键词下排得靠前,半年甚至一年后还能持续给你带来精准用户。2026年做小红书,重心往搜索侧挪是必然的。先说清楚一件事:平台从来没有公布过搜索排序的权重公式。各种“内容匹配度35%、用户行为25%、账号垂直40%”的

    标签:
    seo优化

热门排行

信息推荐