做 SEO 或 AI Agent 数据接入时,直接抓 Google HTML 很容易被结构变化打断。更稳的方式是调 Google 搜索结果 API,直接拿结构化 JSON:自然结果、AI 概览、People Also Ask、相关搜索等都在不同字段里。

这篇用一个最小 Python 示例,演示怎么请求、怎么解析 organic 和 ai_overview,并把结果存成 CSV。示例用 SerpBase 的 Google Web Search 端点,注册送 500 credits,不绑卡,够跑很多次测试。

准备工作

  1. 注册账号,拿 API key(500 免费 credits)。
  2. 安装 requests:
pip install requests
  1. 把 key 放到环境变量,不要写死在代码里:
export SERPBASE_API_KEY="your_key"

Windows 用 set SERPBASE_API_KEY=your_key。

请求

端点:POST https://api.serpbase.dev/google/search

请求头带 X-API-Key,body 里是查询词、国家、语言:

import os
import requests

API = "https://api.serpbase.dev/google/search"
KEY = os.environ["SERPBASE_API_KEY"]

resp = requests.post(
    API,
    headers={"X-API-Key": KEY},
    json={"q": "serp api", "gl": "us", "hl": "en", "device": "mobile"},
    timeout=60,
)
data = resp.json()
print(data["status"], data["credits_charged"])

status 为 0 表示成功;credits_charged 是本次扣费;HTTP 200 不代表业务成功,所以要先看 status。

拿自然结果

organic 是自然结果数组,每个结果有 rank、position、title、link、snippet 等字段。rank 是模块内排序,position 是模块在页面上的位置;做排名监控用 rank。

for item in data.get("organic", [])[:5]:
    print(item["rank"], item["title"], item["link"])

拿 AI 概览

ai_overview 是可选字段,页面出现 AI 概览时才返回。结构是 summary、truncated、sources:

ai = data.get("ai_overview")
if ai:
    print(ai.get("summary"))
    for source in ai.get("sources", []):
        print(source.get("title"), source.get("link"))

sources 里的链接是 Google 引用的来源,适合做 AI 引用监测。truncated 为 true 时,说明 Google 只展示了长回答的开头。

存成 CSV

把关键词、排名、标题、链接存下来:

import csv

rows = []
for item in data.get("organic", []):
    rows.append({
        "keyword": "serp api",
        "rank": item.get("rank"),
        "title": item.get("title"),
        "link": item.get("link"),
    })

with open("serp_results.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["keyword", "rank", "title", "link"])
    writer.writeheader()
    writer.writerows(rows)

几个容易踩的点

  • ai_overview、people_also_ask、local_results 都是可选模块,页面出现才返回,不要假设每次都有。
  • gl 是国家、hl 是语言;做多市场对比时这两个参数要固定,否则结果不可比。
  • page 每翻一页算一次独立请求,按端点价格再扣一次。
  • 这个端点每次请求 1 credit;20 个关键词就是 20 credits。

文档

完整参数和返回字段在 SerpBase 中文文档。先把上面的示例跑通,再按自己的关键词表改成批量脚本。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐