如何擷取 Google Local Pack 搜尋結果
了解如何使用 SERP API 擷取 Google Local Pack 結果,提取商家名稱、排名、評分、評論數、地址、網站、電話和本地 SEO metadata。
Google Local Pack 是當使用者搜尋帶有本地意圖的 query 時,Google 搜尋結果中出現的本地商家列表,例如 “dentist near me”、“coffee shop in Austin” 或 “best plumber in Chicago”。
對 Local SEO 團隊來說,Local Pack 往往比普通 organic links 更重要。它能顯示某個城市、街區或服務範圍內,哪些商家真正出現在使用者面前。
要擷取 Google Local Pack results,較穩定的方式是使用 SERP API:發送本地化 search query,取得結構化 JSON,然後提取 business name、ranking position、rating、review count、address、phone number、website 和 place ID 等欄位。
可以擷取哪些資料?
Google Local Pack result 通常是商家級資料,而不是普通網頁結果。
|
欄位 |
為什麼重要 |
|
|
本地排名位置 |
|
|
商家名稱 |
|
|
平均評分 |
|
|
評論數 |
|
|
商家地址 |
|
|
聯絡電話 |
|
|
商家網站 |
|
|
穩定商家識別碼 |
|
|
經緯度 |
|
|
商家分類 |
|
|
營業時間,如果有 |
基礎 Local Pack Request
一個通用 request 可能像這樣:
{
"engine": "google_local",
"query": "coffee shops in Seattle",
"location": "Seattle, Washington, United States",
"language": "en",
"device": "desktop",
"output": "json"
}
不同供應商可能使用 google_maps、google_local,或在標準 google engine 中返回 local results。參數命名可能不同,但核心概念一致:定義 query、location、language 和 output format。
對 Local SEO 來說,location 不是可有可無的參數。同一個 “emergency dentist”,在 New York、Dallas、Miami 和 San Jose 可能返回完全不同的商家。
Python 範例:抓取並解析 Local Pack Results
下面是 provider-neutral 範例。你可以根據所選 SERP API 調整 endpoint 和 authentication。
import os
import csv
import requests
SERP_API_KEY = os.getenv("SERP_API_KEY")
SERP_API_ENDPOINT = os.getenv("SERP_API_ENDPOINT")
def clean_text(value):
if not value:
return ""
return " ".join(str(value).split())
def fetch_local_pack(query, location):
params = {
"engine": "google_local",
"query": query,
"location": location,
"language": "en",
"device": "desktop",
"output": "json"
}
headers = {
"Authorization": f"Bearer {SERP_API_KEY}"
}
response = requests.get(
SERP_API_ENDPOINT,
params=params,
headers=headers,
timeout=30
)
response.raise_for_status()
return response.json()
def extract_local_results(serp_json):
raw_results = (
serp_json.get("local_results")
or serp_json.get("places_results")
or serp_json.get("maps_results")
or []
)
extracted = []
for index, item in enumerate(raw_results, start=1):
coordinates = item.get("gps_coordinates") or {}
extracted.append({
"position": item.get("position") or index,
"business_name": clean_text(item.get("title") or item.get("name")),
"rating": item.get("rating"),
"reviews": item.get("reviews"),
"address": clean_text(item.get("address")),
"phone": clean_text(item.get("phone")),
"website": item.get("website") or item.get("link") or "",
"place_id": item.get("place_id") or item.get("data_id") or "",
"latitude": coordinates.get("latitude"),
"longitude": coordinates.get("longitude"),
"category": clean_text(item.get("type") or item.get("category"))
})
return extracted
這樣可以把原始 Local Pack JSON 轉成乾淨的商家列表。
匯出為 CSV
def save_to_csv(results, filename="google_local_pack_results.csv"):
fieldnames = [
"position",
"business_name",
"rating",
"reviews",
"address",
"phone",
"website",
"place_id",
"latitude",
"longitude",
"category"
]
with open(filename, "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(results)
CSV 可用於 Local SEO reporting、competitor analysis、lead research 或 dashboard 匯入。
加入 Search Metadata
Local Pack data 必須和搜尋上下文一起保存。
def add_metadata(results, query, location, language="en", device="desktop"):
for result in results:
result["query"] = query
result["location"] = location
result["language"] = language
result["device"] = device
return results
某商家在 Seattle 的 “coffee shops” 排名第一,不代表它在 Portland 也排名第一。Query、location、language、device 和 timestamp 都應保存。
常見使用場景
Local SEO Rank Tracking
Local SEO 團隊可以監測目標 keyword 在不同城市中出現的商家。
常見 query 包括:
dentist in Austin
personal injury lawyer in Miami
best coffee shop in Seattle
emergency plumber in Chicago
nearby car repair shop
Competitor Monitoring
你可以追蹤哪些 competitors 出現在 Local Pack 中、排名如何變化,以及是否有新商家進入結果集。
Multi-Location Brand Monitoring
對多門店品牌來說,Local Pack data 可以幫助比較不同城市、街區和服務範圍的搜尋可見度。
AI Agent 和 RAG Workflow
AI Agent 可以把 Local Pack results 當作 location-based task 的 source discovery layer。例如,Agent 可以先收集本地商家,再按 rating 和 review count 篩選,最後抓取網站或評論做 deeper analysis。
如何選擇 SERP API?
Local Pack scraping 應重點比較 field completeness、location control、schema stability 和 successful-request billing。
SerpApi 有 Google Local 和 Google Maps API,可提取 rating、review、address、hours、GPS coordinates 和 place ID 等本地商家欄位。
Bright Data 的 SERP API 強調 JSON、HTML、Markdown output、geo-location targeting,以及 pay-only-for-successful-delivery billing。
Serper.dev 支援 Google Maps 和 Places 等 search types,並提供免費 queries 用於測試。
如果 workflow 需要 structured SERP data、geo-targeted search results、JSON / HTML output 和 multi-engine coverage,也可以將 Talordata 放入測試名單。Talordata 產品頁說明其 SERP API 支援 Google 和其他主要搜尋引擎、geo targeting、structured output,以及 successful-request-based usage。獲取1000次免費測試額度>>
實際選型方式很簡單:用同一個本地 query 和同一個城市,在 2–3 個 API 中測試,然後比較 business name、position、rating、review count、address、coordinates、missing fields 和 cost per usable result。
FAQ
什麼是 Google Local Pack scraping?
Google Local Pack scraping 是指從本地化 Google query 中收集 local business results 的結構化資料,包括商家名稱、評分、評論數、地址、網站、電話和排名位置。
Google Local Pack 和 Google Maps 一樣嗎?
不完全一樣。Local Pack 通常出現在 Google Search results 中,而 Google Maps 是基於地圖的商家搜尋體驗。它們可能共享商家資料,但 layout、ranking context 和可用欄位可能不同。
Local Pack results 應該提取哪些欄位?
Local SEO 建議提取 position、business name、rating、review count、address、website、phone number、place ID、category、coordinates、query、location、device 和 timestamp。
可以用 Python 擷取 Google Local Pack results 嗎?
可以。最簡單的方式是用 Python 調用 SERP API,接收 structured JSON,解析 local result array,normalize 欄位,並將資料匯出為 CSV 或寫入資料庫。
結語
擷取 Google Local Pack results,本質上是從搜尋結果中收集結構化本地商家資料。
先從清晰的 query 和 location 開始,再提取 workflow 需要的欄位:business name、position、rating、reviews、address、website、phone、place ID 和 coordinates。
對 Local SEO 來說,它可以追蹤不同城市或街區的搜尋可見度。對競品研究來說,它能顯示誰出現在高意圖本地 query 中。對 AI Agent 來說,它能建立結構化本地任務 source list。
最好的 workflow 很簡單:發送 localized query,接收 Local Pack JSON,normalize fields,保存 metadata,並隨時間比較結果變化。