如何抓取 Google 搜尋結果:逐步教學
了解如何逐步抓取 Google 搜尋結果,包含 Python 範例、可提取資料、常見挑戰,以及何時應使用 SERP API。

Google 搜尋結果是 SEO 工具、市場研究、AI Agent、競品監控與內容情報常用的公開資料來源。一個搜尋結果頁可能包含自然排名、頁面標題、摘要、URL、廣告、相關問題、本地結果、新聞、影片與其他搜尋功能。
但抓取 Google Search 並不是送出一個 HTTP request、解析幾個連結就結束。搜尋結果會受到地區、語言、裝置、個人化、查詢意圖與版面影響。Google 也有反自動化保護、請求限制與動態版面,這些都會讓原始爬蟲在大規模場景下變得脆弱。
這篇文章會說明實務流程:Google SERP 包含什麼、為什麼難抓、如何用 Python 建立小型教學用爬蟲,以及什麼時候應該改用 SERP API。
Google SERP 是什麼?
Google Search Engine Results Page,也就是 SERP,是使用者提交搜尋查詢後看到的結果頁。對一般資訊型關鍵字,頁面可能顯示自然結果、標題、URL、摘要與網站連結。
對商業或本地查詢,頁面可能包含廣告、購物結果、本地包、地圖、影片、圖片、People Also Ask 或知識面板。
常見 SERP 元素
· 自然搜尋結果
· 付費搜尋廣告
· People Also Ask 問題
· 相關搜尋
· 本地包與地圖結果
· 購物結果
· 新聞或 Top Stories
· 圖片與影片
寫爬蟲前,先確認你真正需要哪一部分 SERP。排名追蹤工具可能只需要自然結果位置;內容研究工具可能需要標題、摘要、URL 與相關問題;AI Agent 則可能只需要前幾個來源與摘要作為上下文。
為什麼抓取 Google Search 有難度?
版面會變
Google 經常調整搜尋結果版面。今天可用的 CSS selector,可能因為 Google 更新標記、新增 SERP feature 或測試新版面而失效。
反自動化保護
高頻請求可能觸發 CAPTCHA、暫時封鎖或不一致回應。如果你自建爬蟲,通常需要代理輪換、請求節流、類瀏覽器 headers、重試邏輯與監控。
地區與語言差異
同一個關鍵字在美國、德國、日本或巴西可能返回不同結果。結果也會因語言、裝置與城市級位置而不同。如果不保存這些參數,排名資料之後很難重現。
結果類型混合
Google Search 不再只是十個藍色連結。如果你的工作流需要本地、購物、新聞或影片結果,就需要把不同結果類型分開建模。
設定 Python 環境
如果只是建立小型教學爬蟲,可以安裝 Python 與以下套件:
pip install requests beautifulsoup4 pandas
requests 用於發送 HTTP 請求,BeautifulSoup 用於解析 HTML,pandas 用於將結果保存為 CSV。
方法一:使用 Python 抓取 Google Search
下面範例刻意保持簡單,適合理解基礎流程,但不應視為正式環境可用的 Google 爬蟲。
1. 匯入套件並設定 headers
import requests
from bs4 import BeautifulSoup
import pandas as pd
from urllib.parse import quote_plus
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9"
}
2. 發送搜尋請求
query = "best project management tools"
url = f"https://www.google.com/search?q={quote_plus(query)}&hl=en&gl=us"
response = requests.get(url, headers=headers, timeout=15)
response.raise_for_status()
hl 與 gl 可以幫助控制語言與國家訊號,但實際結果仍可能變動。對正式排名追蹤來說,應把所有參數和結果一起保存。
3. 解析自然搜尋結果
soup = BeautifulSoup(response.text, "html.parser")
results = []
for block in soup.select("div.g"):
title_el = block.select_one("h3")
link_el = block.select_one("a")
if not title_el or not link_el:
continue
results.append({
"title": title_el.get_text(strip=True),
"url": link_el.get("href"),
"query": query
})
print(results[:3])
Google markup 可能不同,所以 selector 可能需要調整。如果回傳空結果,請檢查 HTML,確認你沒有拿到 consent page、CAPTCHA 或替代版面。
4. 保存為 CSV
df = pd.DataFrame(results)
df.to_csv("google_search_results.csv", index=False)
方法二:使用 SERP API
對正式環境來說,許多團隊會使用 SERP API,而不是直接解析 Google HTML。這可以減少代理、CAPTCHA、版面變動、重試與結果標準化的維護成本。
import requests
payload = {
"query": "best project management tools",
"engine": "google",
"location": "United States",
"language": "en",
"device": "desktop",
"output": "json"
}
response = requests.post(
"YOUR_SERP_API_ENDPOINT",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json=payload,
timeout=30
)
response.raise_for_status()
data = response.json()
不同供應商的參數名稱可能不同。如果使用 TalorData SERP API,正式導入前請查看 Google Search 參數文件。
應該保存哪些資料?
不要只保存 title 和 URL。為了讓分析可重現,應同時保存搜尋上下文:
· 查詢詞
· 搜尋引擎
· 地區與國家
· 語言
· 裝置類型
· 結果類型
· 排名位置
· 標題、URL、網域與摘要
· 時間戳記
不同抓取方式比較
原始 Python 爬蟲
適合學習與小型實驗,成本低,但遇到版面變化或封鎖時很脆弱。
搭配代理的 Python 爬蟲
比直接請求穩定,但仍需要管理代理品質、headers、重試、解析與合規。
無頭瀏覽器
適合 JavaScript 較重的頁面或視覺測試,但速度較慢,大規模成本較高。
SERP API
較適合正式資料管線、排名追蹤、AI 搜尋上下文與定期監控。缺點是有供應商成本,但通常能降低工程維護負擔。
最佳實務
保持參數一致
追蹤長期變化時,應使用相同查詢、地區、語言與裝置設定。
分開結果類型
自然結果、本地包、廣告、購物結果與新聞結果應使用不同欄位或資料表。
注意法律與合規
抓取任何網站前,請確認適用法律、平台條款、隱私要求與內部合規規範。
監控失敗狀態
追蹤空回應、CAPTCHA 頁、封鎖請求、解析失敗與結果數量異常變化。
FAQ
可以用 Python 抓取 Google Search 結果嗎?
可以,用於小型測試與學習專案。但正式環境中,直接抓取會受到版面變化、CAPTCHA、封鎖與本地化問題影響。
大規模抓取 Google Search 的最佳方式是什麼?
大規模場景通常更適合使用 SERP API 或受管理的抓取基礎設施,而不是自行維護原始 HTML 爬蟲。
可以從 Google Search 結果提取哪些資料?
常見欄位包括標題、URL、摘要、網域、排名位置、結果類型、查詢、地區、語言、裝置與時間戳記。
結論
抓取 Google Search 結果對 SEO 工具、AI Agent、市場研究與競品監控都很有用。小型 Python 爬蟲可以幫助你理解基礎流程,但正式系統需要一致參數、結構化輸出、錯誤處理與可靠的資料收集基礎設施。
如果團隊需要定期取得 Google SERP 資料,又不想維護自建爬蟲基礎設施,SERP API 通常是更務實的選擇。





