🥳Scrapeless Communityに参加して、強力なWebスクレイピングツールキットにアクセスするために無料トライアルを取得してください!
ブログに戻ります

Pythonを使ってGoogleマップをスクレイピングする方法

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

13-Feb-2025

Google Mapsスクレイピングとは、自動化ツールやスクリプトを使用して、Google Mapsからビジネス名、場所、レビューなどの情報を抽出するプロセスです。

このブログ記事では、Google Mapsスクレイピングの利点について説明し、Pythonと自動化ツールを使用してこれを実現する方法について説明します。

Google Mapsスクレイピングの利点とは?

Google Mapsのスクレイピングは、貴重なビジネスインテリジェンスと場所に基づくインサイトを提供します。主な利点は次のとおりです。

ビジネス情報の抽出 – ビジネス名、住所、電話番号、ウェブサイト、評価、レビュー、営業時間などの重要な詳細情報を収集します。このデータは、リードジェネレーション、ディレクトリリスト、顧客へのアウトリーチに役立ちます。

市場分析と競合他社調査の実施 – 市場トレンドを分析し、主要な競合他社を特定し、特定の場所でのビジネス密度を評価します。これにより、企業は拡張、価格戦略、顧客エンゲージメントに関する情報に基づいた意思決定を行うことができます。

地理データの視覚化と最適化の強化 – リアルワールドのビジネス分布に基づいて、サービス範囲を改善し、配送ルートを最適化し、店舗の場所を計画します。企業はこのデータを使用して、運用効率と顧客アクセシビリティを向上させることができます。

Google Mapsスクレイピングの課題

Google Mapsは厳格な反スクレイピングメカニズムのため、スクレイピングには大きな課題があります。Googleは、自動化されたデータ抽出を防ぐために、レート制限、CAPTCHA、API制限を課しています。そのため、ブロックに遭遇することなく大規模なスクレイピングを行うことは困難です。

もう1つの課題は、Google Mapsの動的な性質です。Google Mapsは、ビジネス情報をロードするためにJavaScriptに依存しています。静的なHTML解析に依存する従来のスクレイピング方法は効果がなく、ページと対話し、データを抽出するには、ヘッドレスブラウザまたは自動化フレームワークを使用する必要があります。

これらの制限を回避するために、スクレイパーはプロキシローテーションやユーザーエージェントのスプーフィングなどの手法を実装する必要があります。これらの方法は、複数のIPにわたってリクエストを分散し、リアルユーザーの動作をシミュレートすることにより、検出の可能性を低減し、より安定したスクレイピングプロセスを確保します。

Google Mapsをスクレイピングする2つの特別な方法

1. Google MapsスクレイピングAPI

GoogleはスクレイピングAPIを提供していますか?
はい。

TwitterやAmazonなどの多くの一般的なウェブサイトは独自のAPIを提供しており、Googleも例外ではありません。Google Maps APIが最初にリリースされたとき、それはすぐに広く注目され、採用されました。ただし、公式APIを使用する前に、次のことを自問自答してください。Google Maps APIを使用する必要があるかどうか?

公式Google Maps APIを使用することがニーズに合わないのはなぜですか?

価格から始めましょう。各ユーザーは、Google Maps APIに月額200ドルの無料枠を受け取ります。これには以下が含まれます。

  • 最大40,000件のジオコーディングリクエスト
  • 最大100,000件の静的マップ読み込み
  • 最大28,000件の動的マップ読み込み
  • 最大40,000件のルートプランニングリクエスト

一見すると、このクォータは十分に思えますが、実際には不十分な場合があります。他の多くのAPIと同様に、Google Maps APIは無料クォータを超えたリクエストごとに課金され、その価格は比較的高いです。次のようなシナリオを考えてみましょう。埋め込みAPIを使用する場合、単一のマップ読み込みによって、住所検索、ルートプランニング、距離計算など、複数のAPI呼び出しがトリガーされ、クォータがすぐに消費される可能性があります。ビジネスの規模が拡大すると、API呼び出しが増加し、Google Maps APIは高額な費用になる可能性があります。

価格以外にも、Google Maps APIには厳格なリクエスト制限があります。現在、Googleは1秒あたり100リクエストのレート制限を適用しているため、高並列処理のシナリオではアクセスが制限され、データ取得効率に影響を与える可能性があります。

APIを使用してGoogle Mapsをスクレイピングすることはできますか?

もちろんです!手頃な価格で、安定していて安全なAPIサービスが必要なだけです。しかし、これらの基準をすべて満たすものを見つけることは非常に困難です!幸いなことに、Scrapeless Google Maps APIは、多くのAPI製品の中でも際立っています。

🔴 コスト削減: 各API呼び出しの費用はわずか0.80ドルで、49ドルのサブスクリプションでは10%の割引が適用されます!

🔴 正確なデータ: 私たちの開発者は、Googleのスクレイピングアルゴリズムと制限を常に分析して、APIが更新され、最適化されていることを保証します。

🔴 安定性と高い成功率: Scrapelessは99%の成功率と信頼性を保証します。Googleトレンドスクレイピングの安定性と精度はほぼ100%に達しました!現在の平均応答時間は約3秒で、ほとんどのAPIプロバイダーよりも大幅に高速です。さらに、データは標準化されたJSON形式で返されるため、すぐに使用できます。

Scrapelessはすでに2,000を超えるエンタープライズユーザーの信頼を獲得しています!今すぐDiscordに参加して無料トライアルを請求しましょう! 期間限定で1,000枠のみです—お早めに!

さらに読む:

2. Webスクレイピング

Webスクレイパーは、ウェブサイトスクレイピングで最も一般的な方法の1つです。特定のデータを抽出するための独自のGoogle Mapsスクレイピングツールを構築できます。この記事では、Python Google Mapsスクレイパーを使用して、マップから特定の場所とルートをスクレイピングします。

スクロールを続けましょう!

方法1. Google Maps APIを使用したスクレイピング

手順1. APIキーの取得

開始するには、ScrapelessダッシュボードからAPIキーを取得する必要があります。

  • Scrapelessダッシュボードにログインします。
  • APIキー管理に移動します。
  • 作成をクリックして、独自のAPIキーを生成します。
  • 作成したら、APIキーをクリックしてコピーします。
APIキーの取得

手順2:APIキーの入力

これで、APIキーを使用してScrapelessをプロジェクトに統合できます。次の手順に従って、APIをテストおよび実装します。

  • APIドキュメントにアクセスします。
  • 目的のエンドポイントで「試してみる」をクリックします。
  • Auth」フィールドにAPIキーを入力します。
  • 送信」をクリックして、スクレイピング応答を取得します。
コードでのAPIキーの使用

以下は、Google Mapsスクレイパーに直接統合できるサンプルコードスニペットです。

Python

Python Copy
import http.client
import json

conn = http.client.HTTPSConnection("api.scrapeless.com")
payload = json.dumps({
   "actor": "scraper.google.maps",
   "input": {
      "engine": "google_maps",
      "q": "coffee",
      "type": "search",
      "ll": "@40.7455096,-74.0083012,14z",
      "hl": "en",
      "gl": "us"
   }
})
headers = {
   'Content-Type': 'application/json'
}
conn.request("POST", "/api/v1/scraper/request", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

JavaScript

JavaScript Copy
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
   "actor": "scraper.google.maps",
   "input": {
      "engine": "google_maps",
      "q": "coffee",
      "type": "search",
      "ll": "@40.7455096,-74.0083012,14z",
      "hl": "en",
      "gl": "us"
   }
});

var requestOptions = {
   method: 'POST',
   headers: myHeaders,
   body: raw,
   redirect: 'follow'
};

fetch("https://api.scrapeless.com/api/v1/scraper/request", requestOptions)
   .then(response => response.text())
   .then(result => console.log(result))
   .catch(error => console.log('error', error));

方法2. Pythonを使用した最初のGoogle Mapsスクレイパーの構築

環境設定

まず、次のツールを用意して、Webスクレイピング環境を設定する必要があります。

  1. Python: Pythonの公式ウェブサイトからダウンロードします。最新バージョンではなく、最新バージョンから1つまたは2つ前のバージョンをインストールすることをお勧めします。
Python
  1. Python IDE: Python対応のIDEであればどれでも機能しますが、専門的なPython開発ツールであるPyCharmをお勧めします。無料のPyCharm Community Editionで十分です。
Python IDE

Windowsユーザー向けの注記:
インストール中に、「python.exeをPATHに追加」オプションが選択されていることを確認します。これにより、ターミナルでPythonコマンドを使用できます。Python 3.4以降にはデフォルトでこれが含まれているため、手動での設定は必要ありません。

python.exeをPATHに追加

Pythonがインストールされているかどうかを確認するには、ターミナルまたはコマンドプロンプトを開き、次を実行します。

Bash Copy
python --version
  1. 仮想環境: 依存関係を管理し、他のPythonプロジェクトとの競合を回避するために、仮想環境を作成することをお勧めします。ターミナルでプロジェクトディレクトリに移動し、次のコマンドを実行して「google_flights_env」という仮想環境を作成します。
Bash Copy
python -m venv google_flights_env

OSに適したコマンドを使用して仮想環境をアクティブにします。

  • Windows:
Bash Copy
google_flights_env\Scripts\activate
  • macOS/Linux:
Bash Copy
source google_flights_env/bin/activate
  1. 必要なライブラリのインストール: 仮想環境をアクティブにした後、Webスクレイピングに必要なPythonライブラリ(requestsBeautifulSoup4)をインストールします。次のコマンドに従ってインストールします。
Bash Copy
pip install requests
pip install beautifulsoup4
  1. 自動化ツールのインストール: Google Mapsは直接HTMLページを解析用に返さないため、生のHTMLを取得するには自動化ツールが必要です。
  • Pythonの自動化パッケージであるSeleniumをインストールします。
Bash Copy
pip install selenium
  • ブラウザドライバーをダウンロードする必要もあります。最も一般的に使用されているGoogle Chromeを例にとると、公式ウェブサイトでブラウザバージョンに一致するChromeDriverを見つけて、ローカルにダウンロードしてインストールし、PyCharmのコードディレクトリに配置します。
ChromeDriver

Pythonを使用した場所またはナビゲーションルートデータのスクレイピング

場所のスクレイピング

手順1: Google Mapsを開き、「coffee」を検索します。

場所のスクレイピング

手順2. Google Maps検索結果から特定のフィールドをスクレイピングします。

BeautifulSoupを使用してHTMLを解析し、必要な情報を含む要素を見つけることができます。いくつか例を示します。

  • コーヒーショップの名前をスクレイピングする:
コーヒーショップの名前をスクレイピングする

要素を抽出し、Pythonを使用してテキストデータをスクレイピングします。

Python Copy
def scrape_title(listing):
    maps_element = listing.select_one('div.NrDZNb div.qBF1Pd.fonHeadlineSmall')
    return maps_element.text.strip()
  • 評価をスクレイピングする:
評価をスクレイピングする

要素を抽出し、Pythonを使用してテキストデータをスクレイピングします。評価が空の可能性があるため、nullチェックを追加しました。

Python Copy
def scrape_rating(listing):
    maps_element = listing.select_one('span.MW4etd[aria-hidden="true"]')
    if maps_element is None:
        return None
    else:
        return maps_element.text.strip()
  • 画像リンクをスクレイピングする:
画像リンクをスクレイピングする

要素のhref属性を抽出し、Pythonを使用して画像リンクをスクレイピングします。

Python Copy
def scrape_image_links(listing):
    maps_image_link = listing.select_one('div.SpFAAb').select_one("img")
    return maps_image_link['src']

上記は部分的なデモに過ぎません。以下の最終コードを参照してください。

Python Copy
# 必要なライブラリのインポート
import time

from bs4 import BeautifulSoup
import json
from selenium import webdriver

driver = webdriver.Chrome()

# Google Mapsからリスト要素をスクレイピングする関数
def scrape_listings(soup):
    return soup.select('div.Nv2PK.THOPZb.CpccDe')

# google_mapsからタイトルをスクレイピングする関数
def scrape_title(listing):
    maps_element = listing.select_one('div.NrDZNb').select_one('div.qBF1Pd.fontHeadlineSmall')
    return maps_element.text.strip()

# google_mapsから評価をスクレイピングする関数
def scrape_rating(listing):
    maps_element = listing.select_one('span.MW4etd[aria-hidden="true"]')
    if maps_element is None:
        return None
    else:
        return maps_element.text.strip()

def scrape_image_links(listing):
    maps_image_link = listing.select_one('div.SpFAAb').select_one("img")
    return maps_image_link['src']

# メイン関数
def main():
    # Google MapsのURLにリクエストを行い、HTMLを解析する
    url = 'https://www.google.com/maps/search/coffee/@47.4641284,-122.3855982,11z?entry=ttu&g_ep=EgoyMDI1MDIwOS4wIKXMDSoASAFQAw=='
    driver.get(url)
    time.sleep(2)
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'html.parser')

    # マップリストのスクレイピング
    listings = scrape_listings(soup)

    # 各リストを反復処理し、マップ情報を抽出する
    maps_data = []
    for listing in listings:
        title = scrape_title(listing)
        rating = scrape_rating(listing)
        image_link = scrape_image_links(listing)

        # マップ情報を辞書に格納する
        maps_info = {
            'title': title,
            'rating': rating,
            'image_link': image_link
        }

        maps_data.append(maps_info)

    # 結果をJSONファイルに保存する
    with open('google_maps_data.json', 'w') as json_file:
        json.dump(maps_data, json_file, indent=4)

if __name__ == "__main__":
    main()

手順3. 結果をスクレイピングし、データを保存する。

スクレイピングされたデータを含むgoogle_maps_data.jsonという名前のJSONファイルが、PyCharmディレクトリに生成されます。スクレイピングされた結果の例を以下に示します。

JSON Copy
[
    {
        "title": "Lucky Mugs",
        "rating": null,
        "image_link": "https://streetviewpixels-pa.googleapis.com/v1/thumbnail?panoid=36eAZcAEe5VpSUaFnPcOVA&cb_client=search.gws-prod.gps&w=80&h=92&yaw=139.65103&pitch=0&thumbfov=100"
    },
    {
        "title": "Retro Coffee",
        "rating": "4.4",
        "image_link": "https://lh5.googleusercontent.com/p/AF1QipPxJNNq_ddJeY4metdP0-Yv1gfAb8hwqtdjEk3R=w80-h106-k-no"
    },
    {
        "title": "Caffe Migliore.",
        "rating": "4.4",
        "image_link": "https://lh5.googleusercontent.com/p/AF1QipN5LhTxOs7TEicnyDcaeIwp5iOVD46aQ-vMpco=w80-h106-k-no"
    },
    {
        "title": "Local Coffee Spot",
        "rating": "4.2",
        "image_link": "https://lh5.googleusercontent.com/p/AF1QipO9UVq4zJ3G-xw62mFyQEj8jTdlehq7eLlZ4RyL=w163-h92-k-no"
    },
    {
        "title": "BigFoot Java",
        "rating": "4.1",
        "image_link": "https://lh3.googleusercontent.com/gps-proxy/ALd4DhGHbsVNZu27z_GxIxq3jTyZbJI5MUY_rpPTL7yZQX0Mbx4BEbKTwMTz6vJ16y1u1qVA97qxlMtjejRYMjEk7Riqx2dLl1CeDEcGfIWKWmIF5E3qcna_9faDEBRwLvhoiBcJywVx_TZ7jtM1tKUmynpAZdn-vvYju1pEGKDA34jUT38S8qip3Drk=w92-h92-k-no"
    },
    {
        "title": "Caffe Ladro - Downtown on Pine Street",
        "rating": "4.3",
        "image_link": "https://lh5.googleusercontent.com/p/AF1QipO84r3OrCAb6IjtMYbki4pAMpuWf8KoK5_ods89=w92-h92-k-no"
    },
    {
        "title": "Coffee Tree",
        "rating": "4.4",
        "image_link": "https://lh5.googleusercontent.com/p/AF1QipPYbEDGEskTGDCcpBHxF-nQqrFhR2yFi5cBt6Lu=w122-h92-k-no"
    }
]

ナビゲーションルートのスクレイピング

手順1. Google Mapsに起点と終点を記入します。

ナビゲーションルートのスクレイピング

手順2. Google Mapsのナビゲーションルート検索結果から特定のフィールドをスクレイピングします。

BeautifulSoupを使用してHTMLを解析し、必要な情報を含む要素を見つけることができます。

  • 「経由」フィールドをスクレイピングする:
「経由」フィールドをスクレイピングする

要素を抽出し、Pythonを使用してテキストデータをスクレイピングします。

Python Copy
def scrape_via(listing):
    maps_element = listing.select_one('h1.VuCHmb.fontHeadlineSmall')
    return maps_element.text.strip()
  • 時間をスクレイピングする:
時間をスクレイピングする

要素を抽出し、Pythonを使用してテキストデータをスクレイピングします。

Python Copy
def scrape_time(listing):
    maps_element = listing.select_one('div.Fk3sm.fontHeadlineSmall.delay-light')
    return maps_element.text.strip()
  • 距離をスクレイピングする:
距離をスクレイピングする
Python Copy
def scrape_distance(listing):
    maps_element = listing.select_one('div.ivN21e.tUEI83.fontBodyMedium').select_one('div')
    return maps_element.text.strip()
  • ここに最終コードを示します。
Python Copy
# 必要なライブラリのインポート
import time

from bs4 import BeautifulSoup
import json
from selenium import webdriver

driver = webdriver.Chrome()

# Google Mapsからリスト要素をスクレイピングする関数
def scrape_listings(soup):
    return soup.select('div.UgZKXd')

# google_mapsから経由をスクレイピングする関数
def scrape_via(listing):
    maps_element = listing.select_one('h1.VuCHmb.fontHeadlineSmall')
    return maps_element.text.strip()

# google_mapsから時間をスクレイピングする関数
def scrape_time(listing):
    maps_element = listing.select_one('div.Fk3sm.fontHeadlineSmall.delay-light')
    return maps_element.text.strip()

# google_mapsから距離をスクレイピングする関数
def scrape_distance(listing):
    maps_element = listing.select_one('div.ivN21e.tUEI8e.fontBodyMedium').select_one('div')
    return maps_element.text.strip()

# メイン関数
def main():
    # google mapsのURLにリクエストを行い、HTMLを解析する
    url = 'https://www.google.com/maps/dir/Austin-Bergstrom+International+Airport/5540+N+Lamar+Blvd,+Austin,+TX+78756/@30.2603068,-97.7871692,12z/data=!3m1!4b1!4m13!4m12!1m5!1m1!1s0x8644b13b8b4aff45:0x1ca7fca8c9dc2768!2m2!1d-97.6710889!2d30.194085!1m5!1m1!1s0x8644cba140fad1fb:0x2db903443245739c!2m2!1d-97.7286733!2d30.3247493?hl=en&entry=ttu&g_ep=EgoyMDI1MDIwOS4wIKXMDSoASAFQAw%3D%3D'
    driver.get(url)
    time.sleep(2)
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'html.parser')

    # マップリストのスクレイピング
    listings = scrape_listings(soup)

    # 各リストを反復処理し、マップ情報を抽出する
    maps_data = []
    for listing in listings:
        via = scrape_via(listing)
        time_consuming = scrape_time(listing)
        distance = scrape_distance(listing)

        # マップ情報を辞書に格納する
        maps_info = {
            'via': via,
            'time': time_consuming,
            'distance': distance
        }

        maps_data.append(maps_info)

    # 結果をJSONファイルに保存する
    with open('google_maps_dir_data.json', 'w') as json_file:
        json.dump(maps_data, json_file, indent=4)

if __name__ == "__main__":
    main()

手順3. 結果をスクレイピングし、データを保存する。

スクレイピングされたデータを含むgoogle_maps_dir_data.jsonという名前のJSONファイルが、PyCharmディレクトリに生成されます。スクレイピングされた結果の例を以下に示します。

JSON Copy
[
    {
        "via": "via 183 Toll",
        "time": "17 min",
        "distance": "13.4 miles"
    },
    {
        "via": "via State Hwy 71 W and I-35 N",
        "time": "19 min",
        "distance": "15.5 miles"
    },
    {
        "via": "via S Hwy 183 and 183 Toll",
        "time": "17 min",
        "distance": "13.6 miles"
    }
]

まとめ

これで、プロのようにGoogle Mapsをスクレイピングするスキルが身につきました!このブログの2つの方法は、間違いなく時間を節約し、お財布を救済します!そんなに時間がない?複雑なコーディングプロセスに混乱していますか?APIキーを使用して無料でGoogle Maps APIを呼び出しましょう!データスクレイピングを簡単に完了できます!

あなたはAPI愛好家ですか、それとも熱心なWebスクレイパーですか?私たちのコミュニティであなたの経験を共有しましょう

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ