这个教程解决什么问题

做 SEO 的人都懂:关键词排名不监控,等于蒙着眼睛开车。但手动去 Google 搜、再手抄排名,纯属折磨,几十个词一上午就没了。

这篇教程教你用 Python 调 SERP API,写一个能自动查询关键词排名的脚本。你不用自己写爬虫、不用维护代理,几十行代码就能跑起来。我自己公司内部这套脚本已经跑了几个月,每天定时出一次排名表,稳定省心。

前置准备

你需要准备的东西不多:

  1. Python 3.8+,装好 requests 库(pip install requests
  2. 一个 SERP API 的账号和 Key(一般注册后会送免费额度,够测试用)
  3. 一个你想跟踪的关键词清单,比如 ["serp api", "google search api", "keyword rank tracker"]

我用的接口是基于 HTTP 的 POST JSON 请求,没有任何 SDK 依赖,requests 就够了。

第一步:写一个查询函数

先写最核心的部分:给一个关键词,返回它在 Google 结果页里的排名和基本信息。

import requests

API_URL = "https://api.serpbase.dev/google/search"
API_KEY = "在这里填你的API_KEY"

def search_keyword(keyword, country="us", language="en"):
    resp = requests.post(
        API_URL,
        headers={
            "Content-Type": "application/json",
            "X-API-Key": API_KEY,
        },
        json={
            "q": keyword,
            "hl": language,   # 语言,比如 en / zh-cn
            "gl": country,    # 国家,比如 us / cn / de
            "page": 1,
            "device": "default",
        },
    )
    data = resp.json()
    return data

# 试一下
data = search_keyword("serp api")
print(data["status"], data["elapsed_ms"], data["credits_charged"])

运行之后,你会看到类似这样的输出:

0 1240 1

status 为 0 表示请求成功,elapsed_ms 是接口处理耗时,credits_charged 是这次请求消耗的点数。注意看这个字段,它在你算成本的时候特别有用。

第二步:解析出排名

搜索结果在返回 JSON 的 organic 字段里,每条记录有 rank(排名)、title(标题)、link(链接)、snippet(摘要)。解析逻辑很简单:

def get_rank(keyword, target_domain="serpbase.dev"):
    data = search_keyword(keyword)
    for item in data.get("organic", []):
        if target_domain in item.get("link", ""):
            return item.get("rank")
    return None  # 没有出现在前10条结果里

print(get_rank("serp api"))

这函数的意义是:我想看某个网站(比如自家站点)针对某个关键词排第几。把 target_domain 换成你的域名,跑一次就知道当前排位。

第三步:批量跑关键词清单

单个词会查了,批量就是加个循环的事:

import csv
import time

keywords = ["serp api", "google search api", "keyword rank tracker", "serp scraping"]
results = []

for kw in keywords:
    rank = get_rank(kw, target_domain="你的域名.com")
    results.append([kw, rank])
    time.sleep(1)  # 控制频率,别一口气打满

with open("rank_today.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["关键词", "排名"])
    writer.writerows(results)

print("完成,结果已写入 rank_today.csv")

跑完打开 CSV,一眼就能看到每个词的排名。排名是 None 的词,说明当前没进前十,需要重点盯。

第四步:排错小技巧

我调试时遇到最多的问题就几个,遇到报错先对号入座:

  • 401 或者鉴权失败:检查 X-API-Key 拼写和 Key 本身,还有请求头里 Content-Type 是不是 application/json
  • 结果为空 / organic 字段缺失:换个关键词试试。有的词结果少,或者触发了结果页的异常模块,多试两个词能确认是词的问题还是代码的问题。
  • 参数不生效hlgl 是分开的两个参数,别混成一个;page 从 1 开始。
  • 成本突然变高:看返回里的 credits_charged,图片和地图类接口计费比普通搜索高,别拿它们跑关键词排名。

关于成本

这种按量付费的接口,单价通常低到 $0.30/1k(也就是一千次搜索,按当前汇率折合人民币两块左右)。注册时送的免费额度,足够你把这个脚本完整测一遍。真到了每天监控几百上千个词,一天也就消耗几千次搜索。关键是没有月费、没有包年套餐,标准充值包的余额不过期,用多少算多少。

下一步可以做的事

  • 把这个脚本挂到服务器上,配个定时任务每天跑,排名变化就有历史数据了。
  • 把结果存到数据库,用图表工具画趋势线,排名下滑能提前发现。
  • 不只查自己,也查竞品的域名,做对比分析。
  • 接口还有新闻、视频、地图这些端点,做内容选题或者本地商家数据采集也能用上,具体参数看 SerpBase 的 API 文档 就行。

代码量不大,但跑起来之后能省掉大量重复劳动。建议你先用免费额度把查询函数跑通,再决定要不要把它做成每天自动跑的定时任务。

更多推荐