Y381532662头像

零服务器定时采集:SerpBase + GitHub Actions 实战(附代码

个人项目想做定时采集(排名监控、价格追踪),但不想为此买一台服务器。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

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--