JavaScript is required

用Python抓取谷歌搜索结果:實用指南

學習如何用 Python 抓取 Google 搜尋結果、保存數據進行分析,並判斷何時應改用 SERP API 取得更穩定的搜尋數據。

用Python抓取谷歌搜索结果:實用指南
Ethan Caldwell
最後更新於
9 min read

想用 Python 收集 Google 搜尋結果,通常有兩種做法。

第一種做法是直接請求 Google 結果頁,解析 HTML,然後提取你需要的連結或文字。這種方式適合學習、快速檢查和小型內部實驗。

第二種做法是在工作流需要穩定、可重複、易維護時使用 SERP API。這通常更適合排名追蹤、競品監控、AI 搜尋工作流、RAG 流程,或任何需要定期收集搜尋數據的任務。

這篇文章會展示兩種方式,並提供實用的 Python 範例。

可以從 Google 搜尋結果中抓取哪些數據?

根據不同使用場景,Google SERP 數據可能包含:

  • 自然結果標題

  • 結果 URL

  • 摘要文字

  • 排名位置

  • 廣告可見度

  • People also ask 結果

  • 本地搜尋結果

  • 新聞或圖片結果

  • 相關搜尋

  • 可供後續檢查的搜尋結果 HTML

不同方法能取得的結構化程度不同。直接解析 HTML 時,除非你持續維護 selector,否則通常只能提取基本連結和可見文字。SERP API 通常會提供更結構化的回應,但具體欄位取決於 API 供應商。

正式使用前,應先定義你真正需要什麼。排名追蹤工具可能只需要 keyword、position、URL、title 和 timestamp。AI Agent 則可能更需要 title、URL、snippet、source 和 retrieval time。

開始之前

如果只是做一個簡單 Python 測試,可以先安裝:

pip install requests beautifulsoup4

你會用到:

  • requests 發送 HTTP 請求

  • BeautifulSoup 解析 HTML

  • csvjson 保存輸出結果

在大規模抓取任何網站之前,應先檢查適用法律、平台規則、robots.txt 指引,以及內部合規要求。搜尋結果頁經常變化,也不是為穩定 API 使用而設計的,所以直接爬取更適合學習或有限場景,除非你已經有清楚的維護計畫。

方法一:用 Python 直接抓取 Google 搜尋結果

下面是一個最小範例,用來請求 Google 搜尋頁並輸出部分可見文字。

import requests
from bs4 import BeautifulSoup

query = "best project management software"
url = "https://www.google.com/search"

params = {
    "q": query,
    "hl": "en",
    "gl": "us"
}

headers = {
    "User-Agent": "Mozilla/5.0"
}

response = requests.get(url, params=params, headers=headers, timeout=10)
response.raise_for_status()

soup = BeautifulSoup(response.text, "html.parser")

print(soup.get_text(" ", strip=True)[:1000])

這不是正式生產用爬蟲,只是展示基本流程:

  1. 發送搜尋請求。

  2. 取得 HTML。

  3. 解析頁面。

  4. 檢查內容。

下一步可以嘗試提取連結。

import requests
from bs4 import BeautifulSoup

query = "best project management software"
url = "https://www.google.com/search"

params = {
    "q": query,
    "hl": "en",
    "gl": "us"
}

headers = {
    "User-Agent": "Mozilla/5.0"
}

response = requests.get(url, params=params, headers=headers, timeout=10)
response.raise_for_status()

soup = BeautifulSoup(response.text, "html.parser")

results = []

for a_tag in soup.find_all("a"):
    href = a_tag.get("href")
    text = a_tag.get_text(" ", strip=True)

    if not href or not text:
        continue

    results.append({
        "text": text,
        "url": href
    })

for item in results[:10]:
    print(item)

這段程式會返回很多連結,不一定都是乾淨的自然搜尋結果。有些可能是導航連結、跳轉連結,或其他 SERP 模組中的連結。

這就是直接爬取的主要限制:HTML 內容可以取得,但要把它整理成乾淨的 SERP 數據,還需要額外解析和清洗。

將搜尋結果保存為 CSV

對小型研究任務來說,把提取結果保存為 CSV 通常已經夠用。

import csv
import requests
from bs4 import BeautifulSoup

query = "best project management software"
url = "https://www.google.com/search"

params = {
    "q": query,
    "hl": "en",
    "gl": "us"
}

headers = {
    "User-Agent": "Mozilla/5.0"
}

response = requests.get(url, params=params, headers=headers, timeout=10)
response.raise_for_status()

soup = BeautifulSoup(response.text, "html.parser")

rows = []

for a_tag in soup.find_all("a"):
    href = a_tag.get("href")
    text = a_tag.get_text(" ", strip=True)

    if not href or not text:
        continue

    rows.append({
        "query": query,
        "text": text,
        "url": href
    })

with open("google_search_results.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=["query", "text", "url"])
    writer.writeheader()
    writer.writerows(rows)

print(f"Saved {len(rows)} rows to google_search_results.csv")

這適合做數據檢查,但仍然無法解決排名位置、SERP 功能識別、本地化一致性或重複數據清洗。這些都需要你額外處理。

為什麼直接爬取會變難?

直接爬取很容易開始,但不容易長期穩定。

Google 搜尋結果頁可能隨時變化。今天有效的 selector,之後可能失效。不同查詢也可能觸發不同版面。產品查詢可能出現購物結果,本地查詢可能出現地圖,新聞相關查詢可能出現 Top Stories,資訊型查詢可能出現 People also ask。

搜尋結果也會受到以下因素影響:

  • 國家

  • 語言

  • 裝置

  • 位置

  • 搜尋意圖

  • 搜尋時間

對 SEO 和 AI 工作流來說,這些細節很重要。如果沒有保存查詢上下文,數據後續就很難比較。

至少應保存:

  • query

  • search engine

  • country 或 location

  • language

  • device

  • timestamp

  • raw response 或 raw HTML

一旦你需要定時收集、大量關鍵字、多地區結果或結構化輸出,這件事就不再只是寫 Python,而是維護一條搜尋數據管線。

方法二:用 Python 調用 SERP API

SERP API 讓你把搜尋參數發送到 API endpoint,並取得更結構化的搜尋結果。這可以減少 HTML 解析、本地化控制、重試和數據清洗方面的工作。

下面是一個通用 Python 範例,endpoint 和 API key 都使用占位符。

import requests
import json

endpoint = "YOUR_TALORDATA_SERP_API_ENDPOINT"
api_key = "YOUR_API_KEY"

params = {
    "engine": "google",
    "q": "best project management software",
    "location": "United States",
    "language": "en",
    "device": "desktop"
}

headers = {
    # Adjust this according to the provider's official authentication method.
    "Authorization": f"Bearer {api_key}"
}

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

data = response.json()

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

print("Saved SERP response to google_serp_response.json")

具體的認證方式、參數名稱、支援值和回應結構取決於 API 供應商。如果使用 TalorData,建議先查看 SERP API 查詢參數文件,再進行正式串接。

當你需要的是可重複的搜尋數據,而不是一次性抓取頁面時,這種方式通常更實用。

如何處理 API 回應?

在查看文件和實際回應之前,不要預設 response structure。

比較安全的工作流是:

  1. 保存原始 API response。

  2. 檢查 JSON 結構。

  3. 決定應用需要哪些欄位。

  4. 只標準化真正需要的欄位。

  5. 每條數據都保存請求參數。

例如,檢查回應後,你可能會建立包含以下欄位的標準化數據表:

  • query

  • location

  • language

  • device

  • result type

  • title

  • URL

  • position

  • timestamp

具體欄位映射應以 API 供應商的官方 response format 為準。不要基於未確認的欄位建立正式邏輯。

什麼情況下可以直接爬取?

以下情況下,直接爬取可能已經足夠:

  • 你正在學習搜尋頁如何運作

  • 你只需要做快速內部測試

  • 你只是人工檢查少量頁面

  • 你不需要穩定的結構化輸出

  • 你不打算大規模執行

如果產品每天都依賴穩定搜尋數據,直接爬取通常不是最佳選擇。

什麼情況下應該使用 SERP API?

當搜尋結果成為固定工作流的一部分時,SERP API 通常更合適。

常見場景包括:

  • SEO 排名追蹤

  • 競品監控

  • 廣告可見度檢查

  • 本地搜尋分析

  • 市場研究

  • AI Agent 搜尋上下文

  • RAG 外部數據檢索

  • 內容情報工作流

比較 SERP API 時,建議關注這些實際細節:

  • 支援哪些搜尋引擎

  • 地區與語言控制能力

  • 是否提供 JSON 和 HTML response

  • 計費模式

  • 文件品質

  • 錯誤處理方式

  • 請求成功規則

如果你的工作流需要 SEO、監控或 AI 搜尋場景中的結構化 SERP 數據,TalorData SERP API 可以作為其中一個評估選項。你也可以閱讀這篇相關文章:Google SERP API: Collect Real-Time Search Results at Scale

總結

Python 是理解 Google 搜尋結果收集方式的好起點。簡單腳本可以幫你理解請求、HTML 解析和基本數據提取。

但如果目標是穩定 SERP 數據,直接爬取的維護成本會逐漸上升。真正困難的不是發送一次請求,而是在不同關鍵字、地區、裝置、版面和時間下保持工作流可靠。

對小型實驗來說,直接爬取可能沒問題。對正式 SEO 工具、AI Agent、RAG 系統或週期性市場研究來說,SERP API 通常是更乾淨的做法。

在選擇任何方案之前,先定義需要哪些參數,估算請求量,並確認成本如何隨關鍵字數量、地區數量和更新頻率增長。如果你正在評估 TalorData,可以查看 SERP API pricing page SERP API 查詢參數文件

FAQ

可以用 Python 抓取 Google 搜尋結果嗎?

可以。Python 可以請求 Google 搜尋結果頁,解析回傳的 HTML,並提取連結或可見文字。但直接爬取通常不穩定,因為頁面結構會變,結果也會受到地區、語言、裝置和搜尋意圖影響。

為什麼我的 Google 爬蟲會返回很多混亂連結?

Google 結果頁包含很多不屬於自然搜尋結果的連結,例如導航連結、跳轉連結、廣告、SERP 模組和其他頁面元素。你需要額外的過濾邏輯,才能從頁面噪音中分離出有用結果。

應該使用 BeautifulSoup 還是 SERP API?

BeautifulSoup 適合學習、檢查 HTML,或做小型實驗。如果你需要結構化輸出、可重複結果、地區控制、定時收集,或數據會支撐正式工作流,SERP API 通常更合適。

選擇 SERP API 前應該檢查什麼?

應檢查支援的搜尋引擎、地區與語言控制、回應格式、計費方式、文件品質、錯誤處理方式,以及 API 是否適合你的請求量和數據工作流。

立即开展您的數據業務

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