Skip to content

Repository files navigation

📡 SERPulse · 搜索脉搏

本地优先、零依赖的 SERP 与关键词情报分析引擎

Local-first, zero-dependency SERP & keyword intelligence engine

Python License: MIT Dependencies Tests Platform

🌐 语言版本 / Languages:简体中文 · 繁體中文 · English


🎉 项目介绍

SERPulse(搜索脉搏) 是一款完全运行在你本机的搜索结果情报分析工具。它不爬取搜索引擎、不依赖任何后端服务、零第三方运行时依赖,只分析你已经拥有的数据——Google Search Console、必应站长平台或任意排名工具导出的 CSV/JSON 文件,把它们转化为可执行的 SEO 决策:排名涨跌追踪、关键词主题聚类、搜索可见度(Visibility / Share-of-Voice)测算、竞品格局对比、内容缺口挖掘,以及一份单文件、可离线打开的可视化 HTML 报告。

😮‍💨 它解决什么痛点

  • 💸 付费 SEO 套件太贵:Semrush、Ahrefs 等订阅价格高昂,且大量功能其实是"把你的导出文件算一遍";
  • 🔒 数据锁定与隐私焦虑:把关键词与排名数据上传到第三方 SaaS 存在合规与泄露风险;
  • 🧩 导出文件散落各处:GSC、排名工具、自研脚本产出的 CSV 格式各不相同,手工合并极其耗时;
  • 📉 只看单天排名没有方向感:缺少跨快照趋势、可见度评分与"第二页快速赢点"这类可执行视角。

✅ 自研差异化亮点

维度 传统在线 SEO 套件 SERPulse
数据位置 数据上传云端 数据不出本机,完全离线
运行依赖 账号、订阅、网络、浏览器 Python 标准库,0 依赖
数据接入 绑定平台授权 任意 CSV/JSON,中英文表头自动识别
结果形态 在线看板(不可归档) 终端表格 + JSON + 单文件 HTML
确定性 云端黑盒算法 同输入永远同输出,可复算、可审计
跨平台 依赖浏览器 Windows / macOS / Linux 一致运行

💡 灵感来源:本项目受 GitHub Trending 热门项目 every-app/open-seo("开源版 Semrush/Ahrefs")所启发,认同其"让 SEO 工具链开放化"的理念,但选择了完全不同的技术路线——不做在线抓取与账号体系,而是做一个本地优先、可复现、可嵌入自动化流水线的离线分析引擎。全部代码为独立自研,未复制任何项目源码。


✨ 核心特性

  • 📥 多格式数据接入:CSV / JSON 直接读取,支持 glob 批量合并;内置中英文表头别名表关键词/query/搜索词排名/rank/position 等自动映射),Excel 导出的 BOM、1.2K/3M 量级数字均可直接解析。
  • 🧩 关键词主题聚类:基于词元 Jaccard 相似度 + 并查集单链聚类,中英文混合词表通用(拉丁文按词、中日韩按字),自动产出主题簇、簇搜索量与平均排名。
  • 🧭 搜索意图分类:规则化、可解释地判别信息型 / 商业型 / 交易型 / 导航型四类意图,覆盖中英文线索词,输出置信度,不依赖任何模型。
  • 📈 排名快照追踪:对比任意两个快照,自动列出上涨榜、下跌榜、新增词、丢失词,支持按自有域名过滤。
  • 📊 可见度 / Share-of-Voice 模型:内置行业有机点击率(CTR)衰减曲线,按搜索量加权计算 0–100 可见度分、预估月点击量与 Top3/10/20/50 排名分层分布。
  • 🏟️ 竞品格局分析:逐域名汇总关键词数、平均排名、可见度、各层占位与夺魁词数;支持自有站点对任一竞品的正面对决(win/lose/tie)
  • 🎯 内容缺口与快速赢点:自动找出"竞品有排名而你没有"的缺失词(附机会点击量估算)、双方共有词的排名差,以及落在第 11–20 位的第二页快速赢点清单
  • 📝 共享修饰词挖掘(n-gram):跨关键词聚合高频共同词元与搜索量,快速发现"价格/推荐/品牌"等内容方向。
  • 🖥️ 十种 CLI 子命令check / cluster / intent / ngrams / visibility / track / competitors / h2h / gap / report,外加 demo 一键生成示例数据;所有命令同时支持终端表格--json 机器可读输出。
  • 📄 自包含 HTML 报告:内联 CSS + 手写 SVG 折线/柱状图,零 JavaScript、零外部请求、无 CDN,单文件可邮件转发、可离线归档。
  • 🛡️ 工程质量内建:19 个单元测试全绿;数据质量问题分级告警(error/warn)与明确退出码;类型注解齐全;MIT 协议。

🚀 快速开始

📋 环境要求

  • Python 3.8 及以上(3.8 / 3.9 / 3.10 / 3.11 / 3.12 均验证通过)
  • 操作系统:Windows / macOS / Linux 均可
  • 无需联网、无需 pip 安装任何第三方库(运行期零依赖)

检查 Python 版本:

python3 --version

📦 方式一:pip 安装(推荐,获得 serpulse 命令)

# 克隆后在项目根目录执行
pip install .

# 验证安装
serpulse --version

📂 方式二:免安装,直接以模块运行

# 下载/克隆项目后,在项目根目录:
python3 -m serpulse --version

Windows 上若 python3 不存在,请改用 python

🏃 三步跑通第一个分析

# 1) 生成一份内置示例数据(2 个周度快照 × 15 个中英关键词 × 4 个域名)
python3 -m serpulse demo

# 2) 校验数据是否被正确识别
python3 -m serpulse check "examples/*.csv"

# 3) 生成可视化 HTML 报告(以 acmesport.com 为自有站点)
python3 -m serpulse report "examples/*.csv" --focal acmesport.com -o report.html

用浏览器打开生成的 report.html 即可,全程不需要网络。


📖 详细使用指南

🗂️ 1. 准备你的数据

最精简的单快照 CSV 只需要两列(表头中英文均可):

关键词,排名,域名,搜索量
跑步鞋,4,acmesport.com,900
跑鞋推荐,12,rival.io,1200

跨时间趋势/追踪时增加日期列(也可以每个快照一个文件,用 glob 合并):

date,keyword,domain,position,volume,url
2026-08-17,running shoes,acmesport.com,6,900,https://acmesport.com/running
2026-08-24,running shoes,acmesport.com,3,900,https://acmesport.com/running

完整的字段别名表(日期/day/snapshot链接/url/landing_page 等)见 examples/README.md。文件没有日期列时可用 --date 2026-08-24 统一指定快照日期。

🧰 2. 命令总览

命令 作用 典型场景
check 加载校验、输出记录数/词数/域名/快照日期与数据质量问题 导入前体检
cluster 关键词主题聚类(--threshold 调节松紧) 梳理词表结构
intent 逐词搜索意图分类 落地页类型规划
ngrams 高频共享词元与汇总搜索量 挖掘内容方向
visibility 各快照可见度、预估点击、词数趋势 周期复盘
track 快照间涨跌/新增/丢失榜单 周报排名异动
competitors 全域名格局指标 识别主要对手
h2h 自有站 vs 指定竞品逐词对决 找被压制的词
gap 内容缺口 + 第二页快速赢点 选题与优化排期
report 生成自包含 HTML 报告 汇报/归档
demo 生成示例数据集 快速体验

💻 3. 常用示例

① 数据体检

python3 -m serpulse check "data/*.csv"

② 关键词聚类(阈值越高簇越紧凑,取值 0–1)

python3 -m serpulse cluster data.csv --threshold 0.3

③ 两周排名异动追踪,只看自有域名

python3 -m serpulse track "snapshots/*.csv" --focal acmesport.com --top 15

④ 可见度趋势(JSON 输出,便于接入流水线)

python3 -m serpulse visibility "snapshots/*.csv" --focal acmesport.com --json

⑤ 竞品全景与正面对决

python3 -m serpulse competitors "snapshots/*.csv"
python3 -m serpulse h2h "snapshots/*.csv" --focal acmesport.com --against runnerpro.io

⑥ 内容缺口分析:缺失词 + 第二页快速赢点

python3 -m serpulse gap "snapshots/*.csv" --focal acmesport.com --top 20

⑦ 一份完整 HTML 报告

python3 -m serpulse report "snapshots/*.csv" \
    --focal acmesport.com \
    --title "8月第4周 SERP 情报" \
    -o reports/week35.html

⚙️ 4. 通用参数说明

参数 适用命令 说明
--date YYYY-MM-DD 全部分析命令 文件无日期列时的兜底快照日期
--focal DOMAIN cluster/intent/track/gap/h2h/report 等 指定自有站点,自动匹配子域
--json 全部分析命令 输出机器可读 JSON,方便脚本消费
--force 全部分析命令 存在加载级 error 时仍继续执行
--threshold cluster Jaccard 链接阈值,默认 0.3,越高越紧凑
--top N track/h2h/gap/ngrams 每类榜单保留条数
-o, --output report HTML 报告输出路径

🧪 5. 典型工作流(周报场景)

  1. 每周从 GSC / 排名工具导出 CSV,按 YYYY-MM-DD.csv 命名放入 snapshots/
  2. check 体检 → track 看异动 → gap 找机会 → report 出报告;
  3. --json 把指标写入你自己的看板或定时任务,实现无人值守周报。

🖼️ 6. 演示截图 / 动图(占位)

📌 终端运行截图与 HTML 报告演示动图将随后续版本补充于此:

  • docs/assets/terminal-demo.png(CLI 各命令输出)
  • docs/assets/report-demo.gif(HTML 报告交互浏览)

💡 设计思路与迭代规划

🧠 设计理念

  1. 本地优先(Local-first):关键词与排名属于敏感经营数据。SERPulse 的所有计算都在本机完成,源码中不存在任何网络请求,可在内网/离线环境长期运行。
  2. 零依赖即韧性:只用 Python 标准库,意味着没有供应链风险、没有版本冲突、十年后的 Python 依然能跑今天的脚本。
  3. 确定性可审计:不调用黑盒模型,CTR 曲线、聚类阈值、意图规则全部写在明处,同一份输入永远得到同一份输出,结论可复算。
  4. 数据归用户,工具归用户:不绑定任何平台授权,任何能导出 CSV 的工具都是 SERPulse 的数据源。

🔧 技术选型原因

  • Python 3.8+ 标准库csv/json/dataclasses/argparse/urllib 足以覆盖全部需求,保证零依赖与跨平台;
  • 并查集 + Jaccard 聚类:O(n²) 内对千级词表瞬时完成,结果可解释、无需向量模型;
  • 手写内联 SVG:报告不引入图表库与 CDN,单文件即可完整呈现折线/柱状图;
  • argparse 子命令架构:每个分析能力独立可组合,--json 输出天然适配 Unix 管道与自动化。

🗺️ 迭代路线图

  • v1.1:支持 Excel(.xlsx)读取(以可选依赖组方式提供,核心仍零依赖)
  • v1.1:自定义 CTR 曲线配置文件,适配不同行业/设备
  • v1.2:Markdown 报告导出与多报告对比(周环比/月环比)
  • v1.2:关键词 SERP 特征字段(精选摘要/People Also Ask/视频框)统计
  • v1.3:聚类标签自动命名优化(TF 加权 + 共现修饰词)
  • v1.3:交互式报告筛选(按意图/簇/排名层过滤)
  • v2.0:可选本地守护进程,监听目录自动出周报

🙋 社区贡献方向

多语言意图线索词扩充、更多导出格式的别名适配、行业 CTR 曲线数据集、报告主题与无障碍(a11y)优化——欢迎先开 Issue 讨论再提 PR,规范见 CONTRIBUTING.md


📦 打包与部署指南

SERPulse 属于命令行工具 / 可安装库(非桌面应用),因此不提供二进制 Release,以下三种方式覆盖全部使用场景。

🧑‍💻 方式 A:本地安装为命令

pip install .              # 安装后获得 serpulse 命令
serpulse demo              # 等价于 python -m serpulse demo

🏗️ 方式 B:构建 wheel 分发包(跨平台通用)

# 仅构建期需要 setuptools/build;产物本身零依赖
python3 -m pip wheel . --no-deps -w dist/
# 产出 dist/serpulse-1.0.0-py3-none-any.whl,可拷贝到任意
# Windows/macOS/Linux 机器安装:
pip install dist/serpulse-1.0.0-py3-none-any.whl

wheel 为 py3-none-any,与操作系统无关,一份产物全平台通用。

🤖 方式 C:无安装 / 服务器与 CI 部署

# 直接把项目目录放入仓库或镜像,用模块方式调用:
python3 -m serpulse report "/data/snapshots/*.csv" \
        --focal example.com -o /var/reports/serp.html

兼容环境:Python 3.8–3.12;Windows / macOS / Linux;无需网络、无需编译。 常见问题:Windows 下 python3 不存在时改用 python;glob 通配符在 PowerShell 中需加引号(已在示例中统一加引号)。


🤝 贡献指南

  • 🐛 Issue:提交 Bug 请附带 serpulse --version、运行命令、最小匿名化样例数据与实际报错;
  • 🔀 Pull Request:从 main 切出 feat/xxxfix/xxxdocs/xxx 分支,提交信息遵循 Angular 规范feat: / fix: / docs: / refactor: / test: / chore:);
  • ✅ 任何行为变更必须同步增改 tests/ 下的测试,且 python -m unittest discover -s tests 全部通过;
  • 🚫 不接受引入第三方运行时依赖的 PR(标准库零依赖是硬性约束,开发期工具除外);
  • 🌐 改动 CLI 或数据格式时,请同步更新三个语言版本的 README。

完整规范请阅读 CONTRIBUTING.md


📄 开源协议

本项目基于 MIT License 开源,允许自由使用、修改、分发与商用,保留版权声明即可。SERPulse 不收集任何数据,亦不提供任何形式的担保。


如果 SERPulse 帮你省下了一笔订阅费,欢迎给个 ⭐ 让更多人看到它。

Made with 🐍 by gitstq · Local-first · Zero-dependency · MIT

About

📡 SERPulse — Local-first, zero-dependency SERP & keyword intelligence engine: rank tracking, keyword clustering, visibility/SoV, competitor comparison & content-gap analysis, fully offline. 本地优先零依赖的搜索排名与关键词情报分析引擎

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages