如何从 SERP JSON 中提取标题、链接和摘要
了解如何使用 Python 从 SERP JSON 中提取 title、link、snippet、position、domain 和搜索 metadata,包含 JSON 示例、解析代码、CSV 导出,以及 SEO 和 AI 工作流实用建议。
要从 SERP JSON 中提取 title、link 和 snippet,通常需要读取 organic_results array,遍历每条 result,然后提取 title、link 或 url、snippet 或 description 等字段。正式使用时,还建议同时保存 position、domain、query、location、language、device 和 timestamp。
SERP JSON 是 SERP API 返回的结构化搜索结果 response。它通常包含 organic results、ads、local results、news results、shopping results、related searches,以及 query、location、language、device 等搜索 metadata。
对很多工作流来说,最先需要的通常是三个字段:
-
title -
link -
snippet
这些字段足以建立搜索结果表格、把 URL 传给 crawler、监测排名变化,或为 AI Agent / RAG workflow 准备数据来源。
SERP JSON 通常长什么样?
一个典型 SERP API response 可能像这样:
{
"search_parameters": {
"engine": "google",
"query": "best project management software",
"location": "United States",
"language": "en",
"device": "desktop"
},
"organic_results": [
{
"position": 1,
"title": "Best Project Management Software of 2026",
"link": "https://example.com/project-management-software",
"snippet": "Compare the best project management software for teams, pricing, features, and integrations."
}
]
}
核心通常是 organic_results。这个 array 里的每个 item,代表一条 organic search result。
常见 SERP JSON 字段
|
SERP JSON 字段 |
含义 |
|
|
Organic search results 列表 |
|
|
搜索结果排名位置 |
|
|
搜索结果标题 |
|
|
目标页面 URL |
|
|
搜索结果摘要 |
|
|
从 URL 中提取的网站 domain |
|
|
query、engine、location、language、device 等上下文 |
对 SEO 和 AI workflow 来说,不应只保存 title、link 和 snippet。Search metadata 也很重要,因为同一个 query 在不同国家、城市、语言和设备下,可能返回不同结果。
基础 Python 示例
最简单的提取方式如下:
results = []
for item in serp_json.get("organic_results", []):
results.append({
"position": item.get("position"),
"title": item.get("title"),
"link": item.get("link"),
"snippet": item.get("snippet")
})
print(results)
如果你的 JSON schema 稳定,且字段固定为 title、link 和 snippet,这种方式已经可以工作。
提取 Title、Link、Snippet、Position 和 Domain
不同 SERP API 的字段命名可能略有不同。
例如,有些 API 使用 url 而不是 link,有些使用 description 而不是 snippet。
更安全的 parser 应该兼容这些差异。
from urllib.parse import urlparse
def get_domain(url: str | None) -> str | None:
if not url:
return None
parsed = urlparse(url)
return parsed.netloc.replace("www.", "") if parsed.netloc else None
def extract_organic_results(serp_json: dict) -> list[dict]:
organic_results = serp_json.get("organic_results", [])
extracted = []
for index, item in enumerate(organic_results, start=1):
link = item.get("link") or item.get("url")
extracted.append({
"position": item.get("position") or index,
"title": item.get("title"),
"link": link,
"domain": get_domain(link),
"snippet": item.get("snippet") or item.get("description")
})
return extracted
domain 对 competitor tracking、去重和来源筛选很有用。
将 SERP JSON 结果导出为 CSV
提取字段后,可以将结果保存为 CSV。
import csv
def save_results_to_csv(results: list[dict], filename: str = "serp_results.csv") -> None:
fieldnames = ["position", "title", "link", "domain", "snippet"]
with open(filename, mode="w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(results)
results = extract_organic_results(serp_json)
save_results_to_csv(results)
CSV 适合用于 spreadsheet 查看、dashboard 导入,或与 SEO 团队共享原始搜索结果。
从 API Response 解析 SERP JSON
在真实项目中,SERP JSON 通常来自 API request。
整体流程通常是:
Send query parameters
→ Receive SERP JSON
→ Extract organic results
→ Normalize fields
→ Store or export the data
简化 Python 示例:
import os
import requests
API_KEY = os.getenv("SERP_API_KEY")
params = {
"query": "best project management software",
"location": "United States",
"language": "en",
"device": "desktop"
}
headers = {
"Authorization": f"Bearer {API_KEY}"
}
response = requests.get(
"https://api.example.com/search",
params=params,
headers=headers,
timeout=30
)
response.raise_for_status()
serp_json = response.json()
results = extract_organic_results(serp_json)
不同 provider 的 endpoint 和 authentication method 可能不同。重点是解析层:只要拿到 JSON,就应该把它 normalize 成你的系统可直接使用的数据结构。
你可以用 SerpApi、SearchAPI、Bright Data 或 Talordata 测试这类 workflow。真正重要的是 JSON response 是否足够干净,能让 SEO tool、AI Agent 或 data pipeline 直接使用。
安全处理缺失字段
SERP results 并不总是完全一致。
有些结果可能没有 snippet;有些 link 可能缺失;有些结果可能属于 news、shopping、images 或 local pack,而不是标准 organic result。
Parser 不应因为某个字段缺失就中断。
def clean_text(value: str | None) -> str:
if not value:
return ""
return " ".join(value.split())
def extract_organic_results_safe(serp_json: dict) -> list[dict]:
organic_results = serp_json.get("organic_results", [])
extracted = []
for index, item in enumerate(organic_results, start=1):
link = item.get("link") or item.get("url")
result = {
"position": item.get("position") or index,
"title": clean_text(item.get("title")),
"link": link or "",
"domain": get_domain(link) or "",
"snippet": clean_text(item.get("snippet") or item.get("description"))
}
if result["title"] and result["link"]:
extracted.append(result)
return extracted
这个版本会清理多余空格,并跳过没有 title 或 link 的结果。
加入搜索 Metadata
Title、link 和 snippet 本身有用,但与 search metadata 一起保存时,价值更高。
def add_search_metadata(results: list[dict], serp_json: dict) -> list[dict]:
params = serp_json.get("search_parameters", {})
for result in results:
result["query"] = params.get("query") or params.get("q") or ""
result["engine"] = params.get("engine") or ""
result["location"] = params.get("location") or ""
result["language"] = params.get("language") or ""
result["device"] = params.get("device") or ""
return results
这对 SEO tracking 尤其重要。没有 query、location、language、device 和 timestamp 的 ranking position,很难在之后进行比较。
实作前,也可以 review SERP API query parameters,了解 query、location、language、device 和 result controls 通常如何设计。
使用场景
SEO Rank Tracking
对 SEO 来说,提取后的 SERP 字段可以帮助监测排名变化和竞争对手可见度。
|
字段 |
作用 |
|
|
追踪排名变化 |
|
|
查看搜索结果展示标题 |
|
|
确认排名 URL |
|
|
用于 competitor analysis |
|
|
分析搜索结果摘要 |
|
|
让排名数据具备市场上下文 |
|
|
区分 desktop 和 mobile 结果 |
AI Agent
AI Agent 可以把 SERP JSON 作为 source discovery layer。
常见流程是:
User question
→ Generate search query
→ Get SERP JSON
→ Extract titles, links, and snippets
→ Filter useful sources
→ Fetch selected pages
→ Generate grounded answer
Agent 不应抓取所有 URL,而应先根据 title、snippet、domain 和 result type 进行筛选。
RAG Pipeline
对 RAG 来说,SERP JSON 可以帮助发现最新公开来源。
常用字段包括:
|
字段 |
用途 |
|
|
Source label |
|
|
抓取和引用 URL |
|
|
初步相关性判断 |
|
|
来源筛选 |
|
|
Search visibility signal |
|
|
Retrieval context |
|
|
Freshness tracking |
FAQ
什么是 SERP JSON?
SERP JSON 是 SERP API 返回的结构化搜索结果 response,通常包含 organic results、ads、local results、news results、shopping results,以及 query、location、language、device 等 search metadata。
Title、link 和 snippet 通常存在哪里?
在很多 SERP API response 中,title、link 和 snippet 通常位于 organic_results array 中。每个 item 可能包含 position、title、link 和 snippet。部分 API 可能使用 url 或 description 等替代字段。
如何将 SERP API 结果导出为 CSV?
可以遍历 organic_results array,把字段 normalize 成 dictionary,然后使用 Python 内置的 csv.DictWriter 导出。常见字段包括 query、location、device、position、title、link、domain 和 snippet。
SEO tracking 应该保存哪些字段?
SEO tracking 建议保存 query、location、language、device、timestamp、position、title、link、domain 和 snippet。这些字段可以让排名数据在不同市场、设备和时间段之间可比较。
结语
从 SERP JSON 中提取 title、link 和 snippet,通常是搜索数据工作流的第一步。
对 SEO 团队来说,这些字段支持 ranking analysis 和 competitor monitoring。
对 AI Agent 来说,它们可以帮助发现并筛选有用来源。
对 RAG pipeline 来说,它们能在抓取完整页面前提供 citation-ready metadata。
关键是将 response normalize 成简单、稳定的结构。当你拥有 position、title、link、domain、snippet 和 search metadata 后,SERP data 会更容易保存、分析和重复使用。