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

最後更新於 April 17, 2026

如果你曾經想建立一份精準的銷售名單、開發新市場,或是比較競爭對手,應該都知道 Google 地圖有多像一座資料金礦。更關鍵的是,全球每月超過 15 億次「near me」搜尋,而且 76% 的在地搜尋者會在 24 小時內到店消費),這代表以地點為核心的最新商家資料,需求從來沒有這麼高過。

不論你是在做業務、行銷或營運,把 Google 地圖上的資料結構化提取出來,都可能直接決定你的名單是冷冰冰的陌生開發,還是更容易成交的暖名單。

我在 SaaS 與自動化領域待了很多年,也親眼看過團隊如何運用 Python(以及現在像 這類 AI 工具),把 Google 地圖變成策略資產。這篇指南會一步一步帶你了解,到了 2026 年該怎麼用 Python 擷取 Google 地圖資料——包含程式碼、合規提醒,以及與無程式碼方案的比較。不管你是 Python 老手,還是只想用最快方式拿到可行動的資料,這篇都很適合你。

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

先從基本概念說起:用 Python 擷取 Google 地圖,指的是透過程式自動抓取商家資訊——像是名稱、地址、評分、評論、電話號碼與座標——再把這些資料拿來分析、篩選和匯出,用於商務用途。

city-data-tablet-connection.webp

主要有兩種做法:

  1. Google Maps Places API:這是官方授權的做法。你使用 API key 向 Google 伺服器查詢,回傳結構化的 JSON 資料。這種方式穩定、可預期,而且大致上符合規範,但會有額度與費用限制。
  2. 擷取 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

這些套件的用途:

  • requestshttpx:HTTP 請求(API 呼叫)
  • beautifulsoup4lxml:HTML 解析(用於網頁擷取)
  • pandas:資料清理、分析與匯出
  • seleniumplaywright:瀏覽器自動化(用於 HTML 擷取)
  • googlemapsgoogle-maps-places:Google 地圖 API 用戶端
  • scheduleAPScheduler:排程任務
  • python-dotenv:從 .env 檔安全讀取 API key
  • tenacity:錯誤重試邏輯

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 美元()。
  • 使用伺服器端篩選(例如 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 class,所以這段程式可能需要定期更新。
  • 加入類似人類操作的延遲,並避免抓取太快,以降低被封鎖的風險。
  • 千萬不要嘗試繞過 CAPTCHA 或 Google 的 SearchGuard 系統——這可能帶來法律風險。

不要盲抓:如何精準鎖定你真正需要的資料

把所有資料都抓下來,往往只會浪費時間,還會讓資料集膨脹。以下是幾個只抓重點資料的方法:

  • 先建立精準 URL 名單:使用 Google 地圖本身的搜尋篩選條件(類別、地點、評分、是否營業中)先縮小範圍,再開始抓取。
  • 使用詞組比對:搜尋特定商家類型或關鍵字,例如「Austin 的 vegan bakery」。
  • 地點篩選:指定城市、區域,甚至座標與半徑,精準鎖定範圍。
  • 伺服器端篩選(API):在 API request body 中使用 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: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 會自動適應網站變動,不必一直修補壞掉的腳本。

google-maps-restaurant-scraper.webp

Thunderbit 與 Python 工作流程比較:

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

準備好把 Google 地圖變成你的業務與行銷超能力了嗎?不管你是 Python 愛好者,還是想要最快的無程式碼方案,2026 年工具都已經準備好了。你可以立刻試試 ,享受即時、AI 驅動的抓取;或者直接動手,深入 API 世界。無論哪條路,祝你的名單保持最新、匯出乾淨俐落,活動內容都充滿高轉換率的在地潛在客戶。祝抓取順利!

延伸閱讀

Ke
Ke
CTO @ Thunderbit. Ke is the person everyone pings when data gets messy. He's spent his career turning tedious, repetitive work into quiet little automations that just run. If you've ever wished a spreadsheet could fill itself in, Ke has probably already built the thing that does it.
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