如何使用 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 |
Talordata 適合放在哪裡?
如果你想取得 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 comparison |
|
Search results for AI |
Agent tools 和 RAG context |
常見錯誤
只保存最新結果
如果覆蓋昨天的資料,就無法追蹤 ranking changes。應該保存 snapshots。
忽略 location
Google results 會因地理位置變化。應該保存 country、language 和 location。
把 position 當成全部
Organic position 1 可能仍然被 ads、maps、videos 或 AI-style blocks 壓到下面。
不處理錯誤
應該使用 timeout、retry 和清楚的 error message。
硬編碼 API key
請使用環境變數或 secret manager,不要直接把 API key 寫進程式碼。
結語
使用 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 會把它變成可搭建的積木。