如何使用 Python 擷取 Google 地圖資料

最後更新於 April 30, 2026

如果您曾經試著建立精準的銷售名單、開拓新市場,或是比較競爭對手,一定知道 Google 地圖有多像一座資料金礦。但重點來了:每個月超過 15 億次「near me」搜尋,而且 76% 的在地搜尋者會在 24 小時內造訪商家),這代表對即時、以地點為基礎的商業資料需求,從來沒有這麼高過。

無論您是做銷售、行銷還是營運,從 Google 地圖擷取結構化資料,都可能決定您拿到的是冷名單,還是高轉換率的溫名單。

我在 SaaS 和自動化領域待了很多年,也親眼看過團隊如何使用 Python(以及現在像 這類 AI 工具)把 Google 地圖變成策略資產。

在這篇指南裡,我會一步一步拆解如何在 2026 年用 Python 擷取 Google 地圖資料——包含程式碼、合規建議,以及和無程式碼解決方案的比較。不管您是 Python 老手,還是只想最快拿到可行動資料的人,這篇都很適合您。

用 Python 擷取 Google 地圖是什麼意思?

先從基礎說起:用 Python 擷取 Google 地圖,就是以程式化方式從 Google 地圖抓取商家資訊——例如名稱、地址、評分、評論、電話號碼和座標——讓您能分析、篩選,並匯出作商業用途。

city-data-tablet-connection.webp

主要有兩種做法:

  1. Google Maps Places API:官方、授權的方式。您使用 API 金鑰向 Google 伺服器查詢,取得結構化 JSON 資料。這種方式穩定、可預測,而且大致合規,但有配額與費用限制。
  2. 擷取 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

這些工具的用途:

  • requestshttpx:HTTP 請求(API 呼叫)
  • beautifulsoup4lxml:HTML 解析(用於網頁擷取)
  • pandas:資料清理、分析、匯出
  • seleniumplaywright:瀏覽器自動化(用於 HTML 擷取)
  • googlemapsgoogle-maps-places:Google 地圖 API 用戶端
  • scheduleAPScheduler:任務排程
  • 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 美元()。
  • 使用伺服器端篩選(例如 minRatingincludedTypelocationBias)來避免把配額浪費在無關結果上。
  • 快取 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 請求內容中使用 minRatingincludedTypelocationBias
  • 客戶端篩選(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 會自動適應網站變動,不需要您一直修壞掉的腳本。

google-maps-restaurant-scraper.webp

Thunderbit vs Python 工作流程:

步驟Python 爬蟲Thunderbit
安裝工具30–60 分鐘(Python、pip、函式庫)2 分鐘(Chrome 擴充功能)
API 金鑰設定10–30 分鐘(Cloud Console)不需要
欄位選擇手動寫程式、設定 field maskAI 建議欄位(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 的話,可以使用 scheduleAPScheduler 這類排程函式庫,讓爬蟲按固定間隔執行(每天、每週等等)。加入隨機抖動可降低被偵測的機率,並監控 API 配額。使用 Thunderbit 的話,您可以直接在介面中設定定期擷取,不需要寫程式或架設伺服器。

準備好把 Google 地圖變成您的銷售與行銷超能力了嗎?不管您是 Python 愛好者,還是想找最快的無程式碼方案,2026 年這些工具都已經準備好了。現在就試試 來進行即時、AI 驅動的擷取——或者捲起袖子直接進入 API。無論哪種方式,祝您的名單永遠最新、匯出永遠乾淨、行銷活動永遠充滿高轉換率的在地潛客。快樂爬取!

延伸閱讀

Ke
Ke
Thunderbit 的 CTO。Ke 是每當資料變得一團亂,大家第一個會去找的人。他整個職涯都在把繁瑣、重複的工作,變成安靜運作的小自動化流程。如果你曾經希望試算表能自己填好,Ke 很可能早就把那套工具做出來了。
Topics
使用 Python 擷取 Google 地圖Python Google 地圖爬蟲使用 Python 從 Google 地圖擷取資料
目錄

試試 Thunderbit

只需 2 次點擊即可擷取潛在客戶與其他資料。由 AI 驅動。

取得 Thunderbit 免費使用
使用 AI 擷取資料
輕鬆將資料轉移到 Google Sheets、Airtable 或 Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week