如果你曾經想建立一份精準的銷售名單、開發新市場,或是比較競爭對手,應該都知道 Google 地圖有多像一座資料金礦。更關鍵的是,全球每月超過 15 億次「near me」搜尋,而且 76% 的在地搜尋者會在 24 小時內到店消費(),這代表以地點為核心的最新商家資料,需求從來沒有這麼高過。
不論你是在做業務、行銷或營運,把 Google 地圖上的資料結構化提取出來,都可能直接決定你的名單是冷冰冰的陌生開發,還是更容易成交的暖名單。
我在 SaaS 與自動化領域待了很多年,也親眼看過團隊如何運用 Python(以及現在像 這類 AI 工具),把 Google 地圖變成策略資產。這篇指南會一步一步帶你了解,到了 2026 年該怎麼用 Python 擷取 Google 地圖資料——包含程式碼、合規提醒,以及與無程式碼方案的比較。不管你是 Python 老手,還是只想用最快方式拿到可行動的資料,這篇都很適合你。
用 Python 擷取 Google 地圖是什麼意思?
先從基本概念說起:用 Python 擷取 Google 地圖,指的是透過程式自動抓取商家資訊——像是名稱、地址、評分、評論、電話號碼與座標——再把這些資料拿來分析、篩選和匯出,用於商務用途。

主要有兩種做法:
- Google Maps Places API:這是官方授權的做法。你使用 API key 向 Google 伺服器查詢,回傳結構化的 JSON 資料。這種方式穩定、可預期,而且大致上符合規範,但會有額度與費用限制。
- 擷取 HTML 頁面:你透過瀏覽器自動化工具(像 Playwright 或 Selenium)開啟 Google 地圖、執行搜尋,然後解析渲染後的頁面。這種方式彈性較高,但也更脆弱——Google 經常調整網站結構,而且擷取 HTML 可能違反其服務條款。
常見可擷取的資料欄位:
- 商家名稱
- 類別/業種
- 完整地址(含城市、州/省、郵遞區號、國家)
- 緯度與經度
- 電話號碼
- 網站 URL
- 評分與評論數
- 價格等級
- 商家狀態(營業中/已歇業)
- 營業時間
- Place ID(Google 的唯一識別碼)
- Google 地圖網址
為什麼這很重要? 因為這些欄位能支撐從潛在客戶開發、區域規劃,到競品比較與市場研究等各種應用。重點不是亂抓一通,而是鎖定真正對你的業務目標有價值的資料。
為什麼業務與行銷團隊會用 Python 從 Google 地圖提取資料
來點實務面的。為什麼到了 2026 年,這麼多業務與行銷團隊都對 Google 地圖資料這麼著迷?
- 潛在客戶開發:建立高度精準的在地商家名單,連同聯絡資訊與評分,一起用於開發活動。
- 區域規劃:根據真實商家密度與類型,規劃銷售區域、配送範圍或服務範圍。
- 競爭對手監測:長期追蹤競品的位置、評分與評論,找出趨勢與機會。
- 市場研究:分析商家類別、營業時間與評論情緒,幫助制定上市策略。
- 地點選址:對房地產與零售業來說,可以根據周邊設施、人流與競爭狀況評估潛在據點。
真實影響: 根據 ,92% 的銷售團隊計畫增加 AI/資料投資;而使用精準在地資料的團隊,其轉換率最高可比一般冷名單高出 8 倍()。另有一項加盟商名單開發研究發現,透過 Google 地圖名單,每投入 1 美元可帶來 15 美元的新營收。
把商業目標對應到 Google 地圖欄位:
| 商業目標 | 需要的 Google 地圖欄位 |
|---|---|
| 在地名單開發 | name, address, phone, website, category |
| 區域規劃 | name, lat/lng, business_status, opening_hours |
| 競品基準比較 | name, rating, userRatingCount, priceLevel, reviews |
| 地點選址 | category, lat/lng, review density, openingDate |
| 情緒/菜單情報 | reviews, editorialSummary, photos, types |
| Email/電話開發 | nationalPhoneNumber, websiteUri(之後可再補強) |
建立你的 Python Google 地圖爬蟲:工具與需求
在開始抓資料前,你需要先把 Python 環境準備好,並備齊對應工具。以下是 2026 年的建議配置:
1. 安裝 Python 與必要套件
建議 Python 版本: 3.10 以上。
安裝核心套件:
1pip install \
2 requests==2.33.1 httpx==0.28.1 \
3 beautifulsoup4==4.14.3 lxml==6.0.3 \
4 pandas==2.3.3 \
5 selenium==4.43.0 playwright==1.58.0 \
6 googlemaps==4.10.0 google-maps-places==0.8.0 \
7 schedule==1.2.2 APScheduler==3.11.2 \
8 python-dotenv==1.2.2 tenacity==9.1.4
9playwright install chromium
這些套件的用途:
requests、httpx:HTTP 請求(API 呼叫)beautifulsoup4、lxml:HTML 解析(用於網頁擷取)pandas:資料清理、分析與匯出selenium、playwright:瀏覽器自動化(用於 HTML 擷取)googlemaps、google-maps-places:Google 地圖 API 用戶端schedule、APScheduler:排程任務python-dotenv:從.env檔安全讀取 API keytenacity:錯誤重試邏輯
2. 取得 Google 地圖 API Key(適用於 API 擷取)
- 前往 。
- 建立或選取專案。
- 啟用計費(即使是免費額度也需要)。
- 在 APIs & Services > Library 啟用 “Places API (New)”。
- 前往 Credentials > Create Credentials > API Key。
- 將你的金鑰限制在特定 API 與 IP 範圍內,以提升安全性。
- 把 API key 存在
.env檔中(不要直接提交到程式碼庫):
1GOOGLE_MAPS_API_KEY=your_actual_api_key_here
注意: 截至 2025 年 3 月,Google 已不再提供每月通用的 200 美元免費額度。現在改為依 API 層級提供每月免費門檻(詳見 )。
如何用 Python 從 Google 地圖提取資料:逐步教學
接下來我們分別拆解兩種主要方式——API 方式與HTML 擷取——讓你可以依需求選擇。
方法 1:使用 Google Maps Places API(推薦)
步驟 1:安裝並匯入必要套件
1import os
2import httpx
3import pandas as pd
4from dotenv import load_dotenv
步驟 2:安全載入 API Key
1load_dotenv()
2API_KEY = os.environ["GOOGLE_MAPS_API_KEY"]
步驟 3:建立搜尋查詢
你會使用 Text Search 端點來找出符合條件的商家。
1URL = "https://places.googleapis.com/v1/places:searchText"
2FIELD_MASK = ",".join([
3 "places.id", "places.displayName", "places.formattedAddress",
4 "places.location", "places.rating", "places.userRatingCount",
5 "places.priceLevel", "places.types",
6 "places.nationalPhoneNumber", "places.websiteUri",
7 "nextPageToken",
8])
步驟 4:發送 API 請求
1def text_search(query, lat, lng, radius=3000, min_rating=4.0):
2 body = {
3 "textQuery": query,
4 "minRating": min_rating, # 伺服器端篩選
5 "includedType": "restaurant",
6 "openNow": False,
7 "pageSize": 20,
8 "locationBias": {
9 "circle": {
10 "center": {"latitude": lat, "longitude": lng},
11 "radius": radius,
12 }
13 },
14 }
15 headers = {
16 "Content-Type": "application/json",
17 "X-Goog-Api-Key": API_KEY,
18 "X-Goog-FieldMask": FIELD_MASK, # 一定要設定!
19 }
20 r = httpx.post(URL, json=body, headers=headers, timeout=30)
21 r.raise_for_status()
22 return r.json()
步驟 5:處理分頁並收集結果
1def collect_all_results(query, lat, lng, radius=3000, min_rating=4.0):
2 results = []
3 next_page_token = None
4 while True:
5 data = text_search(query, lat, lng, radius, min_rating)
6 places = data.get('places', [])
7 results.extend(places)
8 next_page_token = data.get('nextPageToken')
9 if not next_page_token:
10 break
11 return results
步驟 6:使用 Pandas 匯出資料
1df = pd.DataFrame(collect_all_results("coffee shops in Brooklyn", 40.6782, -73.9442))
2df.to_csv("brooklyn_coffee_shops.csv", index=False)
實用建議:
- 務必設定
X-Goog-FieldMask標頭來控制成本。如果你要求評論或照片,每 1,000 次請求的價格可能會從 5 美元飆到 25 美元()。 - 使用伺服器端篩選(例如
minRating、includedType、locationBias)避免把配額浪費在不相關的結果上。 - 快取
place_id,方便去重與後續更新。
方法 2:擷取 Google 地圖 HTML(適合教學/一次性使用)
警告: Google 地圖是一個單頁應用程式。你必須使用瀏覽器自動化(Playwright 或 Selenium),而且擷取 HTML 可能違反 Google 的條款。這種方式建議只用於研究,不適合正式生產環境。
步驟 1:安裝 Playwright 並啟動瀏覽器
1from playwright.sync_api import sync_playwright
2import time, re
3def scrape_maps(query, max_results=100):
4 with sync_playwright() as pw:
5 browser = pw.chromium.launch(headless=True)
6 ctx = browser.new_context(
7 user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
8 locale="en-US",
9 )
10 page = ctx.new_page()
11 page.goto("https://www.google.com/maps", timeout=60_000)
12 page.fill("#searchboxinput", query)
13 page.click('button[aria-label="Search"]')
14 page.wait_for_selector('div[role="feed"]')
15 feed = page.locator('div[role="feed"]')
16 prev = 0
17 while True:
18 feed.evaluate("el => el.scrollBy(0, el.scrollHeight)")
19 time.sleep(2)
20 count = page.locator('div[role="feed"] > div > div[jsaction]').count()
21 if count == prev or count >= max_results:
22 break
23 prev = count
24 if page.locator("text=You've reached the end of the list").count():
25 break
26 rows = []
27 cards = page.locator('div[role="feed"] > div > div[jsaction]')
28 for i in range(cards.count()):
29 c = cards.nth(i)
30 name = c.locator("div.fontHeadlineSmall").inner_text() if c.locator("div.fontHeadlineSmall").count() else ""
31 rating_el = c.locator('span[role="img"]').first
32 raw = rating_el.get_attribute("aria-label") if rating_el.count() else ""
33 m = re.search(r"([\d.]+)\s+stars?\s+([\d,]+)\s+Reviews", raw or "")
34 rating = float(m.group(1)) if m else None
35 reviews = int(m.group(2).replace(",", "")) if m else None
36 rows.append({"name": name, "rating": rating, "reviews": reviews})
37 browser.close()
38 return rows
建議:
- Google 會不定期隨機化 CSS class,所以這段程式可能需要定期更新。
- 加入類似人類操作的延遲,並避免抓取太快,以降低被封鎖的風險。
- 千萬不要嘗試繞過 CAPTCHA 或 Google 的 SearchGuard 系統——這可能帶來法律風險。
不要盲抓:如何精準鎖定你真正需要的資料
把所有資料都抓下來,往往只會浪費時間,還會讓資料集膨脹。以下是幾個只抓重點資料的方法:
- 先建立精準 URL 名單:使用 Google 地圖本身的搜尋篩選條件(類別、地點、評分、是否營業中)先縮小範圍,再開始抓取。
- 使用詞組比對:搜尋特定商家類型或關鍵字,例如「Austin 的 vegan bakery」。
- 地點篩選:指定城市、區域,甚至座標與半徑,精準鎖定範圍。
- 伺服器端篩選(API):在 API request body 中使用
minRating、includedType與locationBias。 - 客戶端篩選(Python):抓完之後,再用 pandas 篩選評分高於 4.0、評論數超過 50,或屬於特定類別的商家。
範例:只篩選曼哈頓中評分高於 4.0 的餐廳
1df = pd.DataFrame(results)
2filtered = df[(df['rating'] >= 4.0) & (df['types'].apply(lambda x: 'restaurant' in x))]
3filtered.to_csv("manhattan_top_restaurants.csv", index=False)
使用 Python 套件整理並匯出 Google 地圖資料
當你把資料抓下來之後,就該進行清理、分析,並匯出給團隊使用。
使用 Pandas 清理與結構化資料
1import pandas as pd
2df = pd.read_json("brooklyn_restaurants.json")
3df = (
4 df.dropna(subset=["name", "address"])
5 .drop_duplicates(subset=["place_id"])
6 .assign(
7 name=lambda d: d["name"].str.strip(),
8 phone=lambda d: d["phone"].astype(str)
9 .str.replace(r"\D", "", regex=True)
10 .str.replace(r"^1?(\d{10})$", r"+1\1", regex=True),
11 rating=lambda d: pd.to_numeric(d["rating"], errors="coerce"),
12 user_ratings_total=lambda d: pd.to_numeric(
13 d["user_ratings_total"], errors="coerce"
14 ).fillna(0).astype("int32"),
15 )
16)
分析與彙整資料
範例:依社區計算平均評分
1by_neighborhood = (
2 df.groupby("neighborhood", as_index=False)
3 .agg(avg_rating=("rating", "mean"),
4 n_places=("place_id", "nunique"),
5 median_reviews=("user_ratings_total", "median"))
6 .sort_values("avg_rating", ascending=False)
7)
匯出成 Excel 或 CSV
1df.to_csv("brooklyn_top.csv", index=False)
2df.to_excel("brooklyn_top.xlsx", index=False, sheet_name="Top Rated")
資料量很大? 可以改用 Parquet 格式,速度更快、空間更省:
1df.to_parquet("brooklyn_top.parquet", compression="zstd")
Thunderbit:AI 驅動的 Python Google 地圖爬蟲替代方案
如果你心裡正在想:「光是建立這些流程,就只是為了一份簡單名單,會不會太麻煩了?」你不是唯一這麼想的人。這也是我們打造 的原因——一款 AI 驅動、無程式碼的網頁爬蟲,讓你抓取 Google 地圖資料(以及更多網站資料)變得像按幾下滑鼠一樣簡單。
為什麼選 Thunderbit?
- 不需要寫程式或 API key:只要打開 ,前往 Google 地圖,然後點一下 “AI Suggest Fields”。
- AI 欄位辨識:Thunderbit 的 AI 會自動讀取頁面,建議合適的欄位——名稱、地址、評分、電話、網站等等。
- 子頁面抓取:如果你想從每個商家網站補充更多資料,Thunderbit 可以自動逐一造訪子頁面並擷取額外資訊。
- 匯出到 Excel、Google Sheets、Airtable 或 Notion:不用再手動整理 pandas,按一下 “Export” 就能交付給團隊使用。
- 排程抓取:可設定定期任務,自動監控競品或更新名單。
- 零維護成本:Thunderbit 的 AI 會自動適應網站變動,不必一直修補壞掉的腳本。

Thunderbit 與 Python 工作流程比較:
| 步驟 | Python 爬蟲 | Thunderbit |
|---|---|---|
| 安裝工具 | 30–60 分鐘(Python、pip、函式庫) | 2 分鐘(Chrome 擴充功能) |
| API key 設定 | 10–30 分鐘(Cloud Console) | 不需要 |
| 欄位選擇 | 手動寫程式、設定 field mask | AI Suggest Fields(點一下即可) |
| 資料擷取 | 撰寫/執行腳本、處理錯誤 | 點擊 “Scrape” |
| 匯出 | pandas 匯出 CSV/Excel | 匯出到 Excel/Sheets/Notion |
| 維護 | 網站改版需手動更新 | AI 自動適應 |
加分項: Thunderbit 目前受到全球超過 信賴,且免費方案可無成本擷取最多 6 頁(試用加值後可到 10 頁)。
遵守規範:Google 地圖服務條款與擷取倫理
這也是許多 Python 教學容易過時、甚至危險的地方。到了 2026 年,你需要知道這些:
- Google Maps Platform ToS §3.2.3 明確禁止透過官方 API 以外的方式擷取、快取或匯出資料()。唯一例外是:緯度/經度可快取 30 天,Place ID 可無限期儲存。
- API 使用者受合約約束:只要你使用 API key,就等於同意遵守 Google 條款——即使你抓的是公開資料也一樣。
- 繞過技術防護(CAPTCHA、SearchGuard) 現在可能涉及 DMCA §1201 違規,甚至有刑事風險()。
- GDPR 與隱私法規:如果你從 Google 地圖收集個資(例如 email、電話、評論者姓名),就必須有合法依據,並且尊重刪除請求。法國 CNIL 於 2024 年因抓取 LinkedIn 聯絡人資訊,對 KASPR 開罰 20 萬歐元()。
- 最佳實務:
- 盡量以 Places API 為主。
- 限制請求頻率(API ≤10 QPS,HTML 擷取則每秒 1–2 次)。
- 絕對不要繞過 CAPTCHA 或技術阻擋。
- 不要散布擷取來的個資。
- 尊重退訂與刪除請求。
- 隨時檢查當地法規——GDPR、CCPA 等都在積極執行。
總結: 如果你在意合規,就盡量用 API,並把收集的資料量降到最低。對大多數商務使用者來說,像 Thunderbit 這類無程式碼工具能明顯降低風險(不用 API key,也不涉及再分發)。
用 Python 排程與自動化 Google 地圖抓取
如果你需要讓資料保持最新——例如每週監控競品,或每月更新名單——自動化就是你的好朋友。
使用 schedule 做簡單排程
1import schedule, time
2from my_scraper import run_job
3schedule.every().day.at("03:00").do(run_job, query="restaurants in Brooklyn")
4schedule.every(6).hours.do(run_job, query="coffee shops in Manhattan")
5while True:
6 schedule.run_pending()
7 time.sleep(30)
使用 APScheduler 做正式環境排程
1from apscheduler.schedulers.background import BackgroundScheduler
2from apscheduler.triggers.cron import CronTrigger
3sched = BackgroundScheduler(timezone="America/New_York")
4sched.add_job(
5 run_job,
6 CronTrigger(hour=3, minute=15, jitter=600), # 上午 3:15 ± 10 分鐘
7 kwargs={"query": "restaurants in Brooklyn"},
8 id="brooklyn_daily",
9 max_instances=1,
10 coalesce=True,
11 misfire_grace_time=3600,
12)
13sched.start()
安全自動化的小技巧
- 在排程中加入隨機抖動,避免形成可預測的抓取模式。
- 若是 HTML 擷取,每秒不要超過 1–2 次請求。
- 使用 API 時,記得監控配額並設定帳單警示。
- 務必記錄錯誤,並為失敗請求保留一份「死信」檔案。
Thunderbit 加分項: 使用 Thunderbit,你可以直接在介面中設定定期抓取——不用寫程式、不要 cron、也不需要自己架伺服器。
重點整理:高效、精準、合規地提取 Google 地圖資料
最後整理一下重點:
- Google 地圖是商家地點資料的第一來源,從名單開發到市場研究都離不開它。
- Python 擷取彈性高、控制力強,但也伴隨設定、維護與合規成本——尤其是當 Google 的反機器人措施與法律執法越來越嚴格時。
- 以 API 擷取對大多數團隊來說是最安全、也最可擴充的做法。記得使用 field mask 與伺服器端篩選來控制成本。
- HTML 擷取脆弱又有風險——只適合一次性研究,而且絕對不要繞過技術防護。
- 資料要精準鎖定:善用詞組比對、地點篩選與 pandas 工作流,只抓你真正需要的內容。
- Thunderbit 是非技術使用者的最快路徑:AI 驅動、免設定、即時匯出、內建排程。
- 合規很重要:尊重 Google 條款、隱私法與速率限制,才能避免法律麻煩。
想看更多教學與技巧,歡迎參考 與我們的 。
常見問題
1. 到了 2026 年,用 Python 擷取 Google 地圖資料是否合法?
透過官方 API 擷取 Google 地圖資料,只要遵守 Google 條款、配額限制,且不重新分發受限資料,就是允許的。直接擷取 Google 地圖 HTML 則明確違反 Google 服務條款,且有法律風險,特別是當你繞過技術防護或未經同意收集個資時。務必留意當地法規(GDPR、CCPA 等),並遵循合規最佳實務。
2. Google Maps API 跟擷取 HTML 有什麼差別?
API 穩定、合法授權,而且就是為資料提取而設計的,但需要 API key,並受額度與費用限制。HTML 擷取則是用瀏覽器自動化從渲染頁面抓資料,雖然彈性較大,但脆弱、容易因網站變動失效,且法律風險較高。對多數商務用途來說,API 是比較推薦的方式。
3. 2026 年用 Python 擷取 Google 地圖資料要花多少錢?
Google 的 Places API 是按每 1,000 次請求計費,依照你要求的欄位不同,價格大約從 5 美元(Essentials)到 25 美元(Enterprise+Atmosphere)不等。雖然有每月免費門檻(Essentials 10,000、Pro 5,000、Enterprise 1,000),但大規模抓取還是很快會累積成本。一定要使用 field mask 與伺服器端篩選來控制費用。
4. Thunderbit 跟 Python 型 Google 地圖爬蟲有什麼不同?
Thunderbit 是一款無程式碼、AI 驅動的網頁爬蟲,讓你不需要寫程式、設定 API key 或維護腳本,就能擷取 Google 地圖資料(以及其他網站資料)。它特別適合銷售與行銷團隊,能快速、穩定地匯出到 Excel、Google Sheets、Airtable 或 Notion。對需要客製化邏輯的技術使用者來說,Python 更有彈性,但也需要更多設定與合規管理。
5. 我可以怎麼自動定期擷取 Google 地圖資料?
如果用 Python,可以搭配 schedule 或 APScheduler 這類排程套件,讓爬蟲按固定間隔執行(每天、每週等)。建議加入隨機抖動以降低被偵測風險,並監控 API 配額。若使用 Thunderbit,你可以直接在介面中設定定期抓取,不需要寫程式或自己架伺服器。
準備好把 Google 地圖變成你的業務與行銷超能力了嗎?不管你是 Python 愛好者,還是想要最快的無程式碼方案,2026 年工具都已經準備好了。你可以立刻試試 ,享受即時、AI 驅動的抓取;或者直接動手,深入 API 世界。無論哪條路,祝你的名單保持最新、匯出乾淨俐落,活動內容都充滿高轉換率的在地潛在客戶。祝抓取順利!
延伸閱讀
