Tony Wang5 分で読めますGoogle Mapsをスクレイピングする方法(2026年版):APIとPythonガイド
2026年にGoogle Mapsのビジネス情報とレビューをスクレイピングする3つの方法 — 自作Python、ノーコード、構造化API — それぞれで何が取得できるか、そして法律の基本を解説します。
2026年にGoogle Mapsをスクレイピングする最速の方法は、自分でヘッドレスブラウザを動かすのではなく、正規化されたJSON — ビジネス名・住所・電話番号・ウェブサイト・評価・レビュー・座標 — を返す構造化されたMaps APIを呼び出すことです。もちろんPythonで自作のスクレイパーを作ることもできますが、Mapsの無限スクロール、頻繁なレイアウト変更、アンチボット対策によって、その維持コストは高くつきます。このガイドでは3つのアプローチすべて、それぞれで何が取得できるか、どこで破綻するか、そして法律の基本を扱います。
Google Mapsのスクレイピングは合法ですか?
公開されている Google Mapsのデータ(ビジネス名、住所、評価、レビュー)をスクレイピングすることは、他の公開ウェブのスクレイピングと概ね同じカテゴリに位置づけられます。米国では、hiQ Labs対LinkedIn の訴訟において、公開されているデータへのアクセスはコンピュータ詐欺および濫用防止法(CFAA)に違反しないと判断されました。とはいえ、Googleの利用規約は自動アクセスを禁止しているため、アカウントのブロックや停止通告(cease-and-desist)を受ける可能性は依然としてあり、個人データはGDPRやCCPAといったプライバシー法の対象になります。目安としては次のとおりです。
- 公開されている ビジネスデータのみを収集し、個人データやログインの背後にあるものは避けてください。
- レート制限を尊重し、サービスの品質を低下させないでください。
- Googleの利用規約と、ご自身のコンプライアンス要件を確認してください。
これは法的助言ではありません — 判断に迷う場合は弁護士に相談してください。
選択肢1:Pythonで自作する(そしてなぜ破綻するのか)
自作のスクレイパーは通常、ヘッドレスブラウザ(PlaywrightまたはSelenium)を意味します。MapsはJavaScriptで結果をレンダリングし、無限スクロールでさらに読み込むためです。
import csv
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://www.google.com/maps/search/coffee+shops+in+Austin")
# scroll the results panel until no new cards load (Maps caps ~120 per search)
panel = page.locator('div[role="feed"]')
for _ in range(10):
panel.evaluate("el => el.scrollBy(0, el.scrollHeight)")
page.wait_for_timeout(1500)
rows = [
{"name": a.get_attribute("aria-label"), "url": a.get_attribute("href")}
for a in page.locator('div[role="feed"] a[href*="/maps/place/"]').all()
]
with open("places.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=["name", "url"])
w.writeheader(); w.writerows(rows)
# ...then add proxies, CAPTCHA handling, geographic tiling, and a detail request per place.
これはデモでは動作しますが、本番環境ではあなたを苦しめます。
- 無限スクロール — 新しいカードが読み込まれなくなるまで、結果パネルのスクロールをスクリプト化する必要があります。
- 約120件の上限 — Mapsは検索ビューポートあたり最大でおよそ100〜200件のプレイスしか返さないため、より深く網羅するには、エリアを地理的なタイルに分割し、プレイスIDで重複を排除する必要があります。
- レイアウト変更 — GoogleがDOMを変更すると、あなたのセレクタは静かに壊れます。
- アンチボット — CAPTCHAやIP禁止によって、プロキシのローテーションやフィンガープリンティングへと追い込まれます。
- スケール — クエリごとに1つのブラウザは遅いため、結局はブラウザクラスタを運用・監視することになります。
コストの大半は最初のスクレイプではなく、それを動かし続けることにあります。
選択肢2:既製のスクレイパーツール
ノーコードのエクストラクタやマーケットプレイスのアクターは、ブラウザの処理を代行し、CSVまたはJSONでエクスポートします。単発のリスト作成には最適ですが、Mapsのデータを 製品やパイプラインの中で、スケジュールに従って、予測可能なフィールドで必要とする場合には不便です。
選択肢3:構造化されたGoogle Maps API
反復可能な、製品内のワークフローには、Google MapsスクレイピングAPI が、正規化されたJSONを返す文書化されたエンドポイントを提供します — ブラウザも、セレクタも、運用するプロキシプールも不要です。クエリと所在地で検索します。
curl -X POST https://api.crawlora.net/api/v1/google/map/search \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "coffee shops in Austin, TX", "limit": 20}'
同じ呼び出しをPythonで書くと次のようになります。
import requests
resp = requests.post(
"https://api.crawlora.net/api/v1/google/map/search",
headers={"x-api-key": "YOUR_API_KEY"},
json={"query": "coffee shops in Austin, TX", "limit": 20},
)
for place in resp.json()["data"]:
print(place["name"], place.get("rating"), place.get("address"))
レスポンスは、そのまま保存できる正規化されたJSONです(示されているフィールドは説明用です — 現在のスキーマはドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": [
{
"name": "Example Coffee",
"place_id": "ChIJ...",
"category": ["coffee_shop"],
"address": "123 Example St, Austin, TX",
"phone": "+1 512-555-0100",
"website": "https://example.com",
"rating": 4.6,
"reviews": 318,
"latitude": 30.2672,
"longitude": -97.7431
}
]
}
特定の場所の完全なプロフィールが必要ですか?プレイス詳細エンドポイントで補完してください。
curl https://api.crawlora.net/api/v1/google/map/place/CHIJ_PLACE_ID \
-H "x-api-key: $CRAWLORA_API_KEY"
取得できるもの
公開プロフィールに掲載されている範囲で、フィールドはいくつかのグループに分けられます。
- ビジネスの識別情報 — 名前、カテゴリ、プレイスID、そしてMapsのURL。
- 連絡先 — 住所、電話番号、ウェブサイト、営業時間。
- 所在地 — マッピングや半径検索のための緯度と経度。
- 社会的証明 — 平均評価とレビュー件数、そしてレビュー。公式のPlaces APIは、あなたがそのリスティングを所有していない限りレビューを1件あたり約5件に制限するため、多数のビジネスにまたがる感情分析には専用のレビュー抽出が必要です。
スケジュールで再実行し、実行ごとにプレイスあたり1行を保存することで、評価や掲載状況の推移を追跡できます。
制約とよくある課題
計画に織り込んでおくべきGoogle Mapsの現実がいくつかあります。
- 約120件の上限。 Mapsは検索ビューポートあたりの結果を制限するため、都市やカテゴリを深く網羅するには、エリアをより小さな検索へとタイル分割し、プレイスIDで重複を排除することになります。
- パーソナライゼーション。 結果は所在地や履歴によって変わります。ロケールパラメータでこれを軽減できますが、完全になくすことはできません。
- 公式APIではレビューが制限される。 Place Detailsはプレイスあたり約5件のレビューを返します。フルなレビュー収集には専用のスクレイパーが必要であり、レビュアーの名前やテキストは個人データである可能性があります。
- 自作の場合のアンチボット。 直接スクレイピングは無限スクロール、CAPTCHA、フィンガープリンティングに直面します。構造化APIは、スクロール、プロキシルーティング、リトライをエンドポイントの背後で吸収します。
どこで使われるか
構造化されたMapsデータは、いくつかの一般的なワークフローを支えます。
- リードジェネレーション — 地域のビジネスリストを構築し、CRMを補完します。Google MapsリードジェネレーションとリードジェネレーションAPIのユースケースを参照してください。
- 地域市場のインテリジェンス — 競合の密度、評価、ウェブサイトの有無をエリアごとにマッピングします。
- ローカルSEOリサーチ — 所在地をまたいでカテゴリと評価を追跡します。
出典
収集を始める
まずは無料でお試しください: 無料ウェブスクレイパーで任意の公開URLを実行するか、アンチボットチェッカーでサイトがボットをブロックしているかどうかを確認できます — サインアップ不要です。
プレイグラウンドで検索エンドポイントをテストし、APIドキュメントでレスポンススキーマを確認し、料金ページでクレジットコストを確認してください。地域のビジネス情報をLinkedIn企業データと組み合わせてB2Bのリード補完に活用したり、Google Trendsと組み合わせて地域ごとのカテゴリ需要を把握したりできます。同じブランドやカテゴリの語句をBrave Searchをスクレイピングする方法で実行すれば、マップ上だけでなくウェブ検索結果で誰が上位にいるかがわかります。ツールを選ぶには2026年のベストGoogle MapsスクレイピングAPIを、より大局的な視点にはウェブスクレイピングAPIの選び方を、そしてルールについては2026年、ウェブスクレイピングは合法か?をご覧ください。
よくある質問
ブロックされずにGoogle Mapsをスクレイピングできますか?
構造化APIを使えば、スクロール、プロキシルーティング、ブラウザの実行がエンドポイントの背後で処理されるため、ブロックを自分で管理する必要はありません。自作のスクレイパーは無限スクロール、CAPTCHA、フィンガープリンティングに直面するため、ヘッドレスブラウザ、プロキシ、そして慎重なペース配分が必要になります。
Google Mapsのレビューをスクレイピングできますか?
はい、公開されている範囲では可能です。公式のPlaces APIは、あなたがそのリスティングを所有していない限りレビューを1件あたり約5件に制限するため、多数のビジネスにまたがる感情分析には専用のレビュー抽出が必要です。レビュアーの名前やテキストは個人データである可能性があるものとして扱い、必要なものだけを収集してください。
なぜ検索ごとに約120件しか取得できないのですか?
Google Mapsは結果を検索ビューポートに紐づけ、クエリあたりおよそ100〜200件に制限します。より深く取得するには、エリアをより小さな地理的タイルや複数のクエリに分割し、プレイスIDで重複を排除してください。優れたMaps APIはこれを処理するため、網羅性を失うことはありません。
Google Mapsからどのようなデータを取得できますか?
公開されているビジネスフィールド:名前、カテゴリ、住所、電話番号、ウェブサイト、営業時間、評価、レビュー件数、プレイスID、そして利用可能な場合は座標に加え、専用のレビュー抽出によるレビュー。
データはどのくらいの頻度で更新できますか?
ご利用のプランと責任ある利用の制約が許す限りの頻度で可能です。多くのチームはスケジュール化されたスナップショットを実行し、各実行を前回と比較しています。
これは公式のGoogle Places APIですか?
いいえ。これは公開されているGoogle Mapsのデータを抽出するものであり、Google公式のPlaces APIとは独立しています。公式APIはスコープが限定され、クォータ制限があり、レビューを1件あたり約5件に制限し、大規模には高額になります。