月报自动化:日度 CSV 沉淀一个月,一条命令出趋势图

来源:互联网 时间:2026-09-10

前面几篇的每日任务会沉淀一摞 CSV:抓取量日志、返回码分布、收录流量对照。数据都记下来了,但月底写汇报时还是得现算现画图,折腾小半天。这篇把月报做成脚本:读整月的日度 CSV,聚合成月度指标,顺手画出趋势图,一条命令跑完,图直接能贴进汇报邮件。

前提是目录规整。约定一个目录 /var/log/seo/daily/,每天的产出自成一份数据,文件名带日期。月报脚本按月份前缀把文件全捞出来,逐个读入合并成一张大表,再按周聚合画趋势——日度数据画折线毛刺太多,按周平滑后趋势一目了然。聚合指标挑四个最够用:周抓取量合计、5xx 占比均值、收录量末值、核心词平均排名。

import pandas as pd
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import glob

plt.rcParams["font.sans-serif"] = ["SimHei"] # 中文字体
plt.rcParams["axes.unicode_minus"] = False # 负号正常显示

files = sorted(glob.glob("/var/log/seo/daily/crawl_2026-08-*.csv"))
df = pd.concat([pd.read_csv(f) for f in files])
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")

wk = df["count"].resample("W").sum()
ax = wk.plot(kind="bar", figsize=(8, 4), legend=False)
ax.set_title("8月蜘蛛抓取量(周)")
ax.set_ylabel("抓取次数")
plt.tight_layout()
plt.savefig("crawl_2026-08.png", dpi=120)

中文乱码是 matplotlib 画图第一坑,根因是默认字体不含中文,font.sans-serif 指定 SimHei 或 Microsoft YaHei 即可;图里的负号跟着字体一起消失,axes.unicode_minus 设为 False 才能正常显示。图表本身也有讲究:一图一指标,四张小图胜过一张塞满五条线的大杂烩;异常点在图上加个标记或箭头,写汇报时省一段解释文字。排名趋势图同理,把多个核心词的平均位按周画出来,起伏比数字直观得多。

验证聚合逻辑对着原始数据手工抽核:挑一周,用 Excel 或直接 sum 命令算抓取量合计,和脚本输出对得上才可信。别小看这一步,聚合脚本最隐蔽的 bug 就是漏读文件——glob 模式写错半个字符,少算一周的数,图照出、数照有,只是全错。最后把月报挂进 crontab 每月一号早上跑,产出的图顺手调用上一篇的 webhook 推到企业微信群,月报自动送达。月报的价值在趋势不在单点:单月的抓取量高低说明不了什么,连续三个月爬坡或阴跌才是行动信号。

相关阅读:月报是日志组数据的终点站。《SEO 自动化总清单:日、周、月、季各该跑什么》把它排在每月 1 号,日 CSV 按总纲的节奏沉淀,出图一条命令。

相关文章

A5创业网 版权所有

返回顶部