コンテンツにスキップ

Google マップからデータをスクレイピングする方法: 非公式 API ガイド

200 億以上の企業が掲載され、月間ユーザー数が 1 億人を超える Google マップは、位置データの不可欠な情報源となっています。このガイドでは、Web スクレイピングを使用して Google マップから大規模に価値を引き出す方法を説明します。

概要

Google マップは、企業名、住所、電話番号、営業時間、顧客レビュー、画像、ライブ人気指標など、豊富なデータを提供します。このデータは、市場調査、見込み顧客発掘、ターゲットを絞った広告、位置情報ベースのサービスに関する重要な競争上の洞察を提供します。

Google は Maps API を提供していますが、無料リクエストは月あたり 100,000 件に制限されており、追加リクエストには 7 件あたり 1000 ドルの費用がかかります。大規模なスクレイピング プロジェクトの場合、これは法外に高価になる可能性があります。 Web スクレイピングは、Google マップ データに大規模にアクセスするための柔軟で低コストの代替手段を提供します。

公開オンライン データを Web スクレイピングすることは、一般に、コンピュータ詐欺および濫用法などの米国の法律に基づいて合法とみなされます。ただし、過剰なスクレイピング、破壊的なスクレイピング、またはシステムを回避するスクレイピングを禁止する Google の利用規約を必ず遵守してください。あまりにも積極的にスクレイピングすると、IP アドレスがブロックされる可能性があります。

ニーズに関連するデータのみを収集し、スクレイピングされたコンテンツをそのまま再公開しないでください。 Google マップには、電子メールや電話番号などの個人情報が含まれており、保存および分析する前に匿名化または仮名化する必要があります。

倫理原則を遵守することで、Web スクレイピングが確実に社会に価値をもたらすことができます。 ACM 倫理規定は、責任あるコンピューティングの実践のための優れたガイドです。

Google マップ データの価値

Google マップで利用できる膨大な量のデータを示す重要な統計をいくつか紹介します。

  • 200 年の時点で、世界中で 2021 億以上のビジネスが Google マップに掲載されています
  • 世界中で月間 1 億人を超える Google マップのアクティブ ユーザー
  • ビジネスに関する何百万ものレビュー、画像、営業時間、その他のデータポイント
  • 世界中の 10 万以上の場所のライブ人気指標
  • 15 年以上遡るストリートビュー画像の歴史アーカイブ

このデータを大規模に活用することで、データに基づいた意思決定のための強力な競争力のあるインテリジェンスを提供できます。

スクレイピングの課題を克服する

Google は、サービスの悪用を防ぐために高度なボット検出システムを採用しています。スクレイピング中にブロックされないようにするためのテクニックをいくつか紹介します。

  • Selenium ブラウザの自動化 – Chrome などの実際のブラウザを自動化することで、スクロールやクリックなどの実際のユーザーのアクションを模倣します。リクエストよりもボットの検出に対して耐性があります。
  • プロキシ – 異なる IP アドレスをローテーションしてリクエストを分散し、スクレイピング アクティビティをマスクします。 BrightData のようなプロキシ サービスは、数千の IP を提供します。
  • キャプチャの解決 – Google はマップで reCAPTCHA v2 を使用しているため、視覚的な問題を手動で解決する必要があります。 Anti-Captcha などのツールは、これを自動化するのに役立ちます。
  • クリーンなデータ – スクレイピングされたデータには、分析前にクリーニングが必要な不一致や重複が含まれています。データ ラングリングにかかる​​時間を確保します。

適切なツールとテクニックを使用すれば、これらの課題を克服して Google マップ データに大規模にアクセスできます。

Selenium を使用して Google マップをスクレイピングする

Selenium と Python を使用して Google マップをスクレイピングするためのステップバイステップ ガイドは次のとおりです。

必要なパッケージをインストールする

pip install selenium pandas numpy regex pymongo

ドライバーのセットアップ

from selenium import webdriver

driver = webdriver.Chrome()

必要に応じてプロキシとオプションを構成します。

場所を検索する

driver.get("https://www.google.com/maps/search/restaurants+in+Los+Angeles")

データを抽出

要素セレクターを使用してキー フィールドを抽出します。

places = driver.find_elements(By.CLASS_NAME, "section-result")

names = [place.find_element(By.CLASS_NAME, "section-result-title").text for place in places]

addresses = [place.find_element(By.CLASS_NAME, "section-result-location").text for place in places]

place_urls = [place.find_element(By.CSS_SELECTOR, "a.section-result-action-icon").get_attribute("href") for place in places]

各場所をクリックして、レビューなどの追加データを収集します。

for url in place_urls:
    driver.get(url)

    reviews = driver.find_elements(By.CLASS_NAME, "section-review-text")

プロキシを継続的にローテーションする

大規模にスクレイピングするには、検出を避けるためにプロキシを循環させる必要があります。

from brightdata.brightdata_service import BrightDataService

resolver = BrightDataService.create_proxy_resolver() 

while True:
    driver.quit()
    driver = webdriver.Chrome(resolver=resolver)
    driver.get(next_url)

これにより、何千もの場所を確実にスクレイピングできます。

Google は、API エンドポイント経由で場所のライブ人気データを提供します。応答例:

"popularTimes": [
  {
   "day": 0,
   "data": [  
     {"hour": 8, "percent": 24},
     {"hour": 9, "percent": 100},  
     {"hour": 10, "percent": 88},
   ]
  }
] 

パーセントフィールドには、0 ~ 100 の範囲のライブ忙しさのメトリックが含まれます。 Python で抽出する方法は次のとおりです。

import requests
import pandas as pd

api_url = place_url + "/data/details/json" 

times_data = requests.get(api_url).json()["popularTimes"] 

df = pd.DataFrame(times_data)[["day","hour","percent"]]

このデータを視覚化すると、週ごとのパターンが明らかになります。

画像のスクレイピング

プレイス ページには、スクレイピングできる画像ギャラリーが含まれています。

images = driver.find_elements(By.CLASS_NAME, "section-image")

image_urls = [img.get_attribute("src") for img in images]

緯度や経度などの位置データは URL にエンコードされます。

大規模なデータの保存

大規模なスクレイパーの場合、CSV や Excel シートと比較して、MongoDB がストレージとして最適です。いくつかのベストプラクティス:

  • NoSQL ドキュメント スキーマを使用して、フィールドの変更に柔軟に対応できるようにする
  • ビジネス名や所在地など、クエリを実行するフィールドにインデックスを作成します。
  • 地理空間検索のために住所ではなくポイントなどの地理データをエンコードします
  • スクレイピングにより時間の経過とともにデータが蓄積されるため、定期的なバックアップをスケジュールする

挿入コードのサンプルを次に示します。

from pymongo import MongoClient

client = MongoClient()
db = client["google_maps"]
places = db["places"] 

post = {
    "name": name,
    "url" : url,
    "address": address,
    "location": {
        "type": "Point",  
        "coordinates": [lat, lng]
    },
    "images" : image_urls
}

places.insert_one(post)

分析と可視化

データが収集されると、分析と視覚化から真の価値が生まれます。ここではいくつかの例を示します。

Analysis Type説明ライブラリ
感情分析レビュー内の肯定的なテーマと否定的なテーマを特定するNLTK、テキストブロブ
トピックモデリングLDA を使用してレビューからトレンドのトピックを発見するゲンシム、pyLDAvis
画像認識OCRを使用してメニューやその他の画像からテキストを抽出しますOpenCV、pytesseract
Geospatial Analysis分析のために地図上にデータを重ねて視覚化するフォリウム、プロットリーエクスプレス

高度な分析により、ビジネス上の意思決定を導くための競合インテリジェンスが提供されます。

使用事例

収集された Google マップ データにより、強力な位置情報ベースのサービスが可能になります。

  • 市場調査 – 競合他社の人気とセンチメントを拠点間で比較する
  • リードジ​​ェネレーション – アウトリーチのために対象を絞った電子メールと電話のリストを作成する
  • サイト選択 – 人口動態と客足に基づいて新しい場所を最適化する
  • 広告運用 – 顧客の動きに基づいてハイパーローカルな広告キャンペーンを作成する
  • 需要予測 – 店舗の混雑を予測して週末の人員配置を最適化
  • 物流 – リアルタイムの交通データに基づいて最適な配送ルートを計画

これらは、Web スクレイピングされた Google マップ データがどのようにイノベーションと成長を促進できるかを示すほんの一例です。

まとめ

Google マップは限定的な無料 API を提供しますが、Web スクレイピングは大規模な地図データへの完全なアクセスを提供します。これらの技術を責任を持って使用することで、個人や組織は位置ベースのデータの力を活用して競争上の優位性を得ることができます。

マッピングされた世界の情報はそこにあります。さあ、取りに行きましょう!

参加する

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *