用Python抓取谷歌搜索结果:实用指南
了解如何使用Python抓取Google搜索结果,保存结果以供分析,并决定什么时候SERP API更适合稳定的搜索数据收集。
想用 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 -
csv或json保存輸出結果
在大規模抓取任何網站之前,應先檢查適用法律、平台規則、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])
這不是正式生產用爬蟲,只是展示基本流程:
-
發送搜尋請求。
-
取得 HTML。
-
解析頁面。
-
檢查內容。
下一步可以嘗試提取連結。
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。
比較安全的工作流是:
-
保存原始 API response。
-
檢查 JSON 結構。
-
決定應用需要哪些欄位。
-
只標準化真正需要的欄位。
-
每條數據都保存請求參數。
例如,檢查回應後,你可能會建立包含以下欄位的標準化數據表:
-
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 是否適合你的請求量和數據工作流。