如何使用 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

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 會更乾淨。

可以先從小流程開始:

  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 會把它變成可搭建的積木。

立即開展您的數據業務

加入全球最強大的代理網絡

免費試用