个人项目想做定时采集(排名监控、价格追踪),但不想为此买一台服务器。GitHub Actions 的定时任务刚好能白嫖:每月 2000 分钟免费额度,每天跑一次脚本绰绰有余。这篇讲怎么用 GitHub Actions + SerpBase 搭一套零服务器的每日采集。
整体思路
GitHub Actions(cron 定时触发)
→ 拉取代码 + 装依赖
→ 跑采集脚本(Key 从 Secrets 读)
→ 结果写回仓库(CSV)或推到别处
不需要云服务器、不需要 crontab、不需要保活——仓库就是你的运行时。
第一步:采集脚本
# collect.py
import csv
import datetime
import os
import requests
KEYWORDS = ["搜索 API", "SERP API"]
def collect():
rows = []
for kw in KEYWORDS:
resp = requests.post(
"https://api.serpbase.dev/google/search",
headers={
"Content-Type": "application/json",
"X-API-Key": os.environ["SERPBASE_API_KEY"],
},
json={"q": kw, "hl": "zh-cn", "gl": "cn"},
timeout=(5, 30),
)
data = resp.json()
if data.get("status") != 0:
print(f"[跳过] {kw} status={data.get('status')}")
continue
for r in (data.get("organic") or [])[:10]:
rows.append([
datetime.date.today().isoformat(), kw,
r.get("rank"), r.get("title"), r.get("link"),
data.get("credits_charged"),
])
return rows
if __name__ == "__main__":
rows = collect()
with open("data/ranks.csv", "a", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
for row in rows:
writer.writerow(row)
print(f"写入 {len(rows)} 行")
信封先判 status 再读数据、失败跳过并打印——CI 日志里能直接看到原因。
第二步:配置 Workflow
# .github/workflows/collect.yml
name: daily-collect
on:
schedule:
- cron: "0 22 * * *" # UTC 22:00 = 北京时间每天早上 6 点
workflow_dispatch: # 允许在 Actions 页面手动触发
jobs:
collect:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install requests
- name: collect
env:
SERPBASE_API_KEY: ${{ secrets.SERPBASE_API_KEY }}
run: python collect.py
- name: commit results
run: |
git config user.name "collector-bot"
git config user.email "[email protected]"
mkdir -p data
git add data/
git commit -m "chore: update $(date +%F)" || echo "nothing to commit"
git push
workflow_dispatch 一定要加——调试期间手动触发,不用等 cron。
第三步:Key 放 Secrets
仓库页面 → Settings → Secrets and variables → Actions → New repository secret,添加 SERPBASE_API_KEY。别把 Key 写进 workflow 文件——公开仓库等于泄露。
结果还能去哪
写回仓库最简单,适合个人项目。想更进一步:
- 推到 IM:加一步 curl 调飞书/钉钉机器人 webhook,每天汇总一条消息
- 存对象存储:数据量大或不想污染 git 历史时用
- 触发后续流程:比如生成报告再发邮件(接之前的邮件报表做法)
注意点
cron 是 UTC。 北京时间早上 6 点 = UTC 前一天 22 点。别按本地时间填 cron,不然跑的时间会差 8 小时。
schedule 可能延迟。 GitHub 的定时任务在高峰期可能晚几分钟到十几分钟,别把它当精确时钟用。
公开仓库注意数据。 ranks.csv 会公开可见,别把商业敏感关键词提交进公开仓库——私有仓库没这个问题。
失败要可见。 CI 失败会发邮件通知,但脚本内的单条失败(status 非 0)要自己打日志,别静默跳过。
额度心里有数。 采集本身按 credits 计;Actions 每月 2000 分钟,每天跑 1 分钟足够,基本免费。
成本
假设每天查 10 个关键词:300 credits/月。$10 Starter 包(2 万 credits,无日历过期)能跑五年多,CI 部分免费。
小结
零服务器定时采集的三件套:Actions 定时触发 + Secrets 管 Key + 结果落仓库。对个人项目和独立开发者,这是最省事的自动化方案——服务器钱省了,crash 风险也没了,仓库就是运维。
接口的字段结构和计费规则见 SerpBase 官方文档。你的定时任务跑在哪?评论区聊聊。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/Y381532662/article/details/168332094



