如果您曾經試著建立精準的銷售名單、開拓新市場,或是比較競爭對手,一定知道 Google 地圖有多像一座資料金礦。但重點來了:每個月超過 15 億次「near me」搜尋,而且 76% 的在地搜尋者會在 24 小時內造訪商家(),這代表對即時、以地點為基礎的商業資料需求,從來沒有這麼高過。
無論您是做銷售、行銷還是營運,從 Google 地圖擷取結構化資料,都可能決定您拿到的是冷名單,還是高轉換率的溫名單。
我在 SaaS 和自動化領域待了很多年,也親眼看過團隊如何使用 Python(以及現在像 這類 AI 工具)把 Google 地圖變成策略資產。
在這篇指南裡,我會一步一步拆解如何在 2026 年用 Python 擷取 Google 地圖資料——包含程式碼、合規建議,以及和無程式碼解決方案的比較。不管您是 Python 老手,還是只想最快拿到可行動資料的人,這篇都很適合您。
用 Python 擷取 Google 地圖是什麼意思?
先從基礎說起:用 Python 擷取 Google 地圖,就是以程式化方式從 Google 地圖抓取商家資訊——例如名稱、地址、評分、評論、電話號碼和座標——讓您能分析、篩選,並匯出作商業用途。

主要有兩種做法:
- Google Maps Places API:官方、授權的方式。您使用 API 金鑰向 Google 伺服器查詢,取得結構化 JSON 資料。這種方式穩定、可預測,而且大致合規,但有配額與費用限制。
- 擷取 HTML 網頁內容:您用瀏覽器自動化工具(例如 Playwright 或 Selenium)載入 Google 地圖、執行搜尋,然後解析渲染後的頁面。這種方式更彈性,但也更脆弱——Google 很常改版,而擷取 HTML 也可能違反 Google 條款。
您通常可以擷取的資料欄位:
- 商家名稱
- 類別/類型
- 完整地址(加上城市、州/省、郵遞區號、國家)
- 緯度與經度
- 電話號碼
- 網站網址
- 評分與評論數
- 價格等級
- 商家狀態(營業中/歇業)
- 營業時間
- 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 金鑰tenacity:錯誤處理的重試邏輯
2. 取得 Google Maps API 金鑰(供 API 型擷取使用)
- 前往 。
- 建立或選取專案。
- 啟用帳單(即使是免費額度也需要)。
- 在 APIs & Services > Library 啟用 “Places API (New)”。
- 前往 Credentials > Create Credentials > API Key。
- 限制您的金鑰只能用於特定 API 與 IP,以提高安全性。
- 將 API 金鑰存到
.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 金鑰
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, # server-side filter
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, # Always set this!
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 類別,因此這段程式可能需要定期更新。
- 使用像真人一樣的延遲,避免抓得太快而被封鎖。
- 絕不要嘗試繞過 CAPTCHAs 或 Google 的 SearchGuard 系統——這可能讓您承擔法律風險。
不要盲目擷取:如何精準鎖定您需要的資料
把所有東西都抓下來,只會浪費時間,也會讓資料集膨脹。以下是如何 只鎖定真正重要的資料:
- 產生精準的網址清單:先用 Google 地圖自己的搜尋篩選條件(類別、地點、評分、目前營業中)縮小結果,再開始抓取。
- 使用詞組比對:搜尋精確的商家類型或關鍵字(例如 “vegan bakery in Austin”)。
- 地點篩選:指定城市、社區,甚至座標與半徑,提升準確度。
- 伺服器端篩選(API):在 API 請求內容中使用
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:Python Google 地圖爬蟲的 AI 替代方案
如果您心想:「為了做一份簡單名單,這些設定也太多了吧」,那您不是一個人。這正是我們打造 的原因——一款 AI 驅動、無程式碼的網頁爬蟲,讓擷取 Google 地圖資料(以及更多內容)變得像點幾下滑鼠一樣簡單。
為什麼選 Thunderbit?
- 不需要寫程式或 API 金鑰:只要打開 ,進入 Google 地圖,然後點擊「AI 建議欄位」。
- AI 欄位辨識:Thunderbit 的 AI 會讀取頁面,並自動建議正確欄位——名稱、地址、評分、電話、網站等等。
- 子頁面擷取:如果您想從每家商家的網站補充資料,Thunderbit 可以自動進入每個子頁並擷取額外資訊。
- 匯出到 Excel、Google Sheets、Airtable 或 Notion:不必再折騰 pandas,只要點「匯出」,資料就能交給團隊使用。
- 排程擷取:可設定定期任務,自動監控競爭對手或更新名單。
- 零維護:Thunderbit 的 AI 會自動適應網站變動,不需要您一直修壞掉的腳本。

Thunderbit vs Python 工作流程:
| 步驟 | Python 爬蟲 | Thunderbit |
|---|---|---|
| 安裝工具 | 30–60 分鐘(Python、pip、函式庫) | 2 分鐘(Chrome 擴充功能) |
| API 金鑰設定 | 10–30 分鐘(Cloud Console) | 不需要 |
| 欄位選擇 | 手動寫程式、設定 field mask | AI 建議欄位(1 次點擊) |
| 資料擷取 | 撰寫/執行腳本,處理錯誤 | 點一下「爬取」 |
| 匯出 | 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 金鑰,就等於同意 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 金鑰,也不用負責再散佈資料)。
使用 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 地圖資料是否合法?
只要遵守 Google 條款與配額、且不再散佈受限制資料,透過官方 API 擷取 Google 地圖是允許的。Google 的 ToS 明確禁止擷取 Google 地圖 HTML,而且若您繞過技術限制或未經同意蒐集個人資料,就有法律風險。務必檢查當地法規(GDPR、CCPA 等),並遵守合規最佳實務。
2. 使用 Google Maps API 與擷取 HTML 有什麼差別?
API 穩定、授權明確,也專為資料擷取設計,但需要 API 金鑰,而且受配額與費用限制。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 金鑰、也不用維護腳本的情況下擷取 Google 地圖資料(以及更多內容)。它非常適合希望快速、穩定匯出到 Excel、Google Sheets、Airtable 或 Notion 的銷售與行銷團隊。對於需要自訂邏輯的技術使用者來說,Python 更有彈性,但也需要更多設定與合規管理。
5. 我要如何自動化定期的 Google 地圖資料擷取?
用 Python 的話,可以使用 schedule 或 APScheduler 這類排程函式庫,讓爬蟲按固定間隔執行(每天、每週等等)。加入隨機抖動可降低被偵測的機率,並監控 API 配額。使用 Thunderbit 的話,您可以直接在介面中設定定期擷取,不需要寫程式或架設伺服器。
準備好把 Google 地圖變成您的銷售與行銷超能力了嗎?不管您是 Python 愛好者,還是想找最快的無程式碼方案,2026 年這些工具都已經準備好了。現在就試試 來進行即時、AI 驅動的擷取——或者捲起袖子直接進入 API。無論哪種方式,祝您的名單永遠最新、匯出永遠乾淨、行銷活動永遠充滿高轉換率的在地潛客。快樂爬取!
延伸閱讀
