如何使用 Python 获取 JSON 格式的 Google 搜索结果

学习如何使用 Python 获取 JSON 格式的 Google 搜索结果,解析自然搜索结果,提取标题、URL、摘要及排名位置,并将搜索数据保存下来,以用于 SEO、AI 智能体、RAG(检索增强生成)及竞争对手监测。

如何使用 Python 获取 JSON 格式的 Google 搜索结果
Ethan Caldwell
最后更新于
6 分钟阅读

如果你需要把 Google 搜索结果用在 App、SEO dashboard、AI agent、竞品监控或研究流程中,手动从浏览器复制结果是不够的。

你需要的是结构化数据。

也就是把搜索结果页转成这类 JSON 字段:

字段

示例

title

Best SERP APIs for SEO Monitoring

url

https://example.com/serp-api-guide

snippet

Compare tools for rank tracking and search monitoring

position

1

domain

example.com

一旦数据变成 JSON,就可以存储、分析、比较、喂给 AI workflow,或用来生成报告。

这篇文章会示范如何使用 Python 获取 Google search results in JSON。

为什么不直接抓 Google HTML?

技术上,你可以打开 Google 搜索 URL,然后解析 HTML。但实际做起来,很快会变得混乱。

Google 搜索页会受到很多因素影响:

因素

为什么重要

Location

不同国家、城市、地区结果不同

Language

Snippet 和页面内容会变

Device

Mobile 和 desktop layout 不同

SERP features

Ads、maps、images、videos、AI-style results 都可能出现

Personalization

结果可能受用户上下文影响

HTML structure

页面结构可能随时变

如果你在做正式产品,通常不希望自己维护脆弱的 HTML parser、proxy logic、CAPTCHA handling 和 location controls。

更干净的方式,是使用 Search Results API 或 SERP API,由 API 返回结构化 JSON。

基本流程

整体流程很简单:

  1. 选择搜索 query

  2. 发送到 Google Search API

  3. 获取 JSON results

  4. 解析 titles、URLs、snippets 和 positions

  5. 存储或在应用中使用数据

Python 中通常使用 requests library。

安装依赖

基本示例只需要一个套件:

pip install requests

建议把 API key 存成环境变量,不要直接写在代码里。

export SERP_API_KEY="your_api_key_here"

Windows PowerShell:

setx SERP_API_KEY "your_api_key_here"

示例:获取 Google 搜索结果 JSON

不同 SERP API provider 的 endpoint 和参数名称会不同。下面是一个可改造的通用结构。

import os
import requests
from typing import Any, Dict


API_KEY = os.getenv("SERP_API_KEY")

# 替换成你的 SERP API endpoint。
# 如果使用 Talordata,请使用 dashboard 或 API docs 中提供的 endpoint。
API_URL = "https://YOUR_SERP_API_ENDPOINT"


def get_google_results(query: str, country: str = "us", language: str = "en") -> Dict[str, Any]:
    if not API_KEY:
        raise RuntimeError("Missing SERP_API_KEY environment variable.")

    params = {
        "api_key": API_KEY,
        "engine": "google",
        "q": query,
        "country": country,
        "language": language,
        "device": "desktop",
        "format": "json"
    }

    response = requests.get(API_URL, params=params, timeout=30)
    response.raise_for_status()

    return response.json()


if __name__ == "__main__":
    data = get_google_results("best SERP API for SEO monitoring")
    print(data)

这会返回 API 的原始 JSON response。

正式使用时,不建议一直打印完整对象。下一步应该只解析需要的字段。

解析 organic results

多数 SEO 和搜索数据流程会先从 organic results 开始。

常见 organic result 字段包括:

字段

含义

position

排名位置

title

搜索结果标题

url

目标页面

displayed_url

显示 URL 或 breadcrumb

snippet

搜索摘要

domain

网站域名

不同 API 的 JSON 结构会有差异,但很多 API 会把自然搜索结果放在 organic_results 中。

下面是一个较保守的 parser:

from urllib.parse import urlparse
from typing import Any, Dict, List


def parse_organic_results(data: Dict[str, Any]) -> List[Dict[str, Any]]:
    results = data.get("organic_results", [])
    parsed = []

    for index, item in enumerate(results, start=1):
        url = item.get("url") or item.get("link") or ""
        domain = urlparse(url).netloc.replace("www.", "")

        parsed.append({
            "position": item.get("position", index),
            "title": item.get("title", "").strip(),
            "url": url,
            "domain": domain,
            "snippet": item.get("snippet", "").strip()
        })

    return parsed

使用方式:

if __name__ == "__main__":
    data = get_google_results("best SERP API for SEO monitoring")
    organic_results = parse_organic_results(data)

    for result in organic_results:
        print(result["position"], result["title"])
        print(result["url"])
        print(result["snippet"])
        print()

保存为 JSON 文件

如果你要做 rank tracking、competitor monitoring 或 research,应该保存不同时间点的 snapshots。

import json
from datetime import datetime, timezone


def save_results_to_file(query: str, results: List[Dict[str, Any]]) -> str:
    timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
    filename = f"google_results_{timestamp}.json"

    payload = {
        "query": query,
        "collected_at": timestamp,
        "results": results
    }

    with open(filename, "w", encoding="utf-8") as file:
        json.dump(payload, file, ensure_ascii=False, indent=2)

    return filename

完整使用:

if __name__ == "__main__":
    query = "best SERP API for SEO monitoring"

    data = get_google_results(query)
    organic_results = parse_organic_results(data)
    filename = save_results_to_file(query, organic_results)

    print(f"Saved {len(organic_results)} results to {filename}")

保存为 CSV

如果你想用 Excel、Google Sheets 或 BI 工具打开结果,CSV 很方便。

import csv


def save_results_to_csv(filename: str, results: List[Dict[str, Any]]) -> None:
    fieldnames = ["position", "title", "url", "domain", "snippet"]

    with open(filename, "w", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(results)

使用方式:

if __name__ == "__main__":
    query = "best SERP API for SEO monitoring"

    data = get_google_results(query)
    organic_results = parse_organic_results(data)

    save_results_to_csv("google_results.csv", organic_results)
    print("Saved results to google_results.csv")

加入 location 和 device

Google 搜索结果不是全球一致的。同一个 query,在 New York、London、Singapore 或 Sydney 可能结果不同。

如果要做正式 SEO monitoring,每次都应保存搜索上下文。

常见参数包括:

参数

示例

query

best coffee shop near me

country

us

language

en

city / location

New York

device

desktop 或 mobile

search engine

google

timestamp

2026-06-27T09:00:00Z

可以把 function 改成:

def get_google_results(
    query: str,
    country: str = "us",
    language: str = "en",
    location: str | None = None,
    device: str = "desktop"
) -> Dict[str, Any]:
    if not API_KEY:
        raise RuntimeError("Missing SERP_API_KEY environment variable.")

    params = {
        "api_key": API_KEY,
        "engine": "google",
        "q": query,
        "country": country,
        "language": language,
        "device": device,
        "format": "json"
    }

    if location:
        params["location"] = location

    response = requests.get(API_URL, params=params, timeout=30)
    response.raise_for_status()

    return response.json()

调用示例:

data = get_google_results(
    query="best dentist near me",
    country="us",
    language="en",
    location="Austin, Texas",
    device="mobile"
)

应该先保存哪些字段?

基础 Google Search JSON workflow,建议先保存:

字段

为什么重要

query

保留搜索上下文

country

让结果可比较

language

解释结果语言

location

本地 SEO 很重要

device

Desktop 和 mobile 可能不同

collected_at

用于历史追踪

position

衡量排名

title

显示搜索标题

url

显示排名页面

domain

方便竞品分组

snippet

显示搜索摘要

如果要做更进阶的 SEO 或 AI workflow,可以再保存:

字段

用途

ads

付费搜索压力

local results

本地 SEO

related questions

内容规划

shopping results

电商监控

news results

新鲜度追踪

sitelinks

品牌可见度

AI-style answer fields

AI search visibility analysis

如果你想获取 Google search results in JSON,但不想自己维护 scraper,可以把 SERP API provider 当成搜索数据层。

Talordata 适合这类 workflow,尤其是你需要把搜索结果用于 SEO monitoring、competitor tracking、AI agents、RAG pipelines 或 market research 时。实际价值在于,你可以请求搜索数据,获取 JSON 或 HTML output,然后把精力放在分析,而不是维护数据采集基础设施。

例如,你可以用 Talordata 采集:

Data

Use case

Organic results

Rank tracking 和 SEO reports

Titles and snippets

Content analysis

URLs and domains

Competitor monitoring

Local results

Local SEO

Multi-engine data

Google、Bing、Yandex、DuckDuckGo

Search results for AI

Agent tools 和 RAG context

结语

使用 Python 获取 Google search results in JSON,本身不复杂。关键是选对 workflow。

除非你准备长期维护 parser、location handling、anti-bot work 和 layout changes,否则不要直接抓 Google HTML。对大多数产品、SEO 和 AI 团队来说,Search Results API 会更干净。

可以先从小流程开始:

  1. 发送 query

  2. 获取 JSON

  3. 解析 organic results

  4. 保存 title、URL、snippet、position 和 timestamp

  5. 需要时再加入 location、device 和 SERP features

当搜索数据被结构化后,它就能用在 SEO dashboard、竞品报告、内容规划、AI agents、RAG systems 和市场研究中。

浏览器里的搜索结果很乱;JSON 会把它变成可搭建的积木。

立即开展您的数据业务

加入全球最强大的代理网络

免费试用