如何使用 Python 获取 JSON 格式的 Google 搜索结果
学习如何使用 Python 获取 JSON 格式的 Google 搜索结果,解析自然搜索结果,提取标题、URL、摘要及排名位置,并将搜索数据保存下来,以用于 SEO、AI 智能体、RAG(检索增强生成)及竞争对手监测。
如果你需要把 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。
基本流程
整体流程很简单:
-
选择搜索 query
-
获取 JSON results
-
解析 titles、URLs、snippets 和 positions
-
存储或在应用中使用数据
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 |
|
|
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 会更干净。
可以先从小流程开始:
-
获取 JSON
-
解析 organic results
-
保存 title、URL、snippet、position 和 timestamp
-
需要时再加入 location、device 和 SERP features
当搜索数据被结构化后,它就能用在 SEO dashboard、竞品报告、内容规划、AI agents、RAG systems 和市场研究中。
浏览器里的搜索结果很乱;JSON 会把它变成可搭建的积木。