🎯 カスタマイズ可能で検出回避型のクラウドブラウザ。自社開発のChromiumを搭載し、ウェブクローラーAIエージェント向けに設計されています。👉今すぐ試す
ブログに戻ります

GoogleローカルスクレーパーAPI: ローカルパックをJSONに変換する

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

10-Jun-2026

主なポイント:

  • 1つのリクエスト、1つのアクター。 Scrapeless Scraper APIは、Googleのローカルパックをscraper.google.searchアクターに対する単一のPOSTに変換します。ブラウザーを操作する必要もなく、マークアップを解析する必要もありません。
  • tbm: "lcl"がスイッチです。 入力 { "q": "サンフランシスコのコーヒーショップ", "tbm": "lcl" } を送信すると、アクターはウェブSERPの代わりに地図に基づいたビジネスリスティングを返します。
  • 生のHTMLではなく構造化されたフィールド。 レスポンスは解析されたローカルオブジェクトであり、local_results.places[]には、タイトル、評価、レビュー数、住所、価格帯、および写真サムネイルが含まれ、最上位レベルでフラット化されています。
  • フィルターチップも含まれます。 suggested_searchesは「現在営業中 / 評価が高い / 安い」のチップを、フォローしやすいGoogleのURLとして提供するので、同じクエリを再構築することなく切り替え可能です。
  • プロキシもボット対策もあなたの側では不要。 自宅用の出口、ジオルーティング、およびレンダリングはサーバー側で実行されます。あなたはクエリを送信し、JSONを読み取るだけです。
  • 無料で開始可能。 新しいScrapelessアカウントには、無料のScraper APIクレジットが含まれています。app.scrapeless.comでサインアップしてください。

イントロダクション:GoogleのローカルパックをJSONに変換

Googleのローカルパックは、ローカル検索の最上部に表示されるビジネスリスティングのボックスセットで、誰かが「サンフランシスコのコーヒーショップ」や「近くの配管工」を検索すると表示される地図に基づいたカードです。各カードには、名前、カテゴリ、星評価、レビュー数、住所、および価格帯が含まれています。これは、表面的なローカル意図の検索によって実際にクリックされるものであり、多くの実用的な作業の背後にあるデータセットとなっています。

  • ローカルランク追跡 — 指定した都市のクエリに対するビジネスのランキングを確認します。
  • 競合モニタリング — 時間をかけて競合の評価とレビュー数を追跡します。
  • リードリスト — カテゴリーとローカリティのクエリに対してランキングされているビジネスを構造化された表に引き出します。
  • レビューと感情サンプリング — 各カードは、スケールで収集可能な代表的なレビューのスニペットを表示します。
  • 市場規模の測定 — metro内でどのタイプのビジネスがランクインしているか、評価がどのようにクラスター化されているかをカウントします。

手作業でそのパックを引き出すことは、JavaScript重視の検索ページをレンダリングし、Googleのレート制限をクリアし、マークアップに対してセレクターを書くことを意味します。Scraper APIはこれら3つをサーバー側で処理し、解析されたオブジェクトを手渡します。


Scraper APIの利点

従来のローカルスクレーパーは、ボット対策層をクリアし、ページをレンダリングし、カードを解析するという3つの仕事を組み合わせたものです。Scrapeless Scraper APIは、それらを1回の呼び出しに統合します。scraper.google.searchアクターを指定し、クエリとtbm: "lcl"を渡すと、解析されたローカルパックが返ってきます。

  • ブラウザもパーサーも維持する必要なし。 アクターはGoogleのローカル結果をレンダリングし、解析します。フィールドが返され、DOMを渡る必要はありません。
  • 住宅用出口とジオルーティングが組み込まれています。 クエリ文字列を送信すると、アクターがネットワーク層とJavaScriptのレンダリングを処理します。
  • 1つのキー、1つの形。 単一のx-api-tokenが呼び出しを認証し、ローカルパックは常に同じ解析された形で返されるため、1回書いたクライアントはクエリや都市を超えて再利用されます。

無料プランでAPIキーを取得するには、app.scrapeless.comにアクセスしてください。Googleのローカルパックは、他のGoogle検索の表面と共にDeep SerpApiファミリーの内側に存在します。価格表に記載されています。


前提条件

  • ScrapelessアカウントとAPIキー — app.scrapeless.comでサインアップしてください。
  • クイックテスト用のcurl、または下記のクライアント用にPython 3.10以上が必要です。
  • HTTPとJSONの基本的な理解。

キーを環境に保存して、コード内に残らないようにします:

bash Copy
export SCRAPELESS_API_KEY=your_api_token_here

リクエスト

ローカルパックはv1 Scraper APIエンドポイントとGoogle検索アクターを使用します。ローカルパックを選択するには1つの入力フィールドが必要で、そのtbmlclに設定します。

  • エンドポイント: POST https://api.scrapeless.com/api/v1/scraper/request
  • 認証: ヘッダー x-api-token: $SCRAPELESS_API_KEY
  • アクター: scraper.google.searchtbm: "lcl"はウェブSERPの代わりにローカルパックを選択します)

リクエストボディは { "actor": "<name>", "input": { … } } です:

json Copy
{
  "actor": "scraper.google.search",
  "input": { "q": "サンフランシスコのコーヒーショップ", "tbm": "lcl" }
}
入力フィールド 必須 説明
q はい ローカル検索クエリ — もっとも関連性の高いパックを得るために都市や地域を含めます(例:サンフランシスコのコーヒーショップ
tbm はい ローカルパックを選択するにはlclに設定します。ウェブSERPを得るには省略または変更します。

最速のチェックは1つのcurlです。これはアクターと入力を投稿し、解析されたローカルオブジェクトを印刷します:

bash Copy
curl -sS -X POST https://api.scrapeless.com/api/v1/scraper/request \
  -H "Content-Type: application/json" \
  -H "x-api-token: $SCRAPELESS_API_KEY" \
  -d '{
    "actor": "scraper.google.search",
    "input": { "q": "サンフランシスコのコーヒーショップ", "tbm": "lcl" }
  }'

同じ呼び出しをPythonで行うと、環境からキーを読み取り、解析された応答を返します:

python Copy
import os
import json
import requests

ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"


def scrape_local(query: str) -> dict:
    resp = requests.post(
        ENDPOINT,
        headers={
            "Content-Type": "application/json",
            "x-api-token": os.environ["SCRAPELESS_API_KEY"],
        },
        json={"actor": "scraper.google.search", "input": {"q": query, "tbm": "lcl"}},
        timeout=120,
    )
    resp.raise_for_status()
    return resp.json()


if __name__ == "__main__":
    data = scrape_local("サンフランシスコのコーヒーショップ")
    for place in data["local_results"]["places"]:
        print(place["position"], place["title"], place["rating"], place["address"])

scraper.google.searchは解析されたローカルパックを最上位レベルにフラット化します。resultラッパーを展開する必要はありません。直接local_results.places[]を読み取ります。

無料プランでAPIキーを取得する:app.scrapeless.com


返されるもの

アクターは解析されたローカルオブジェクトを直接返し、保存されたレンダリングされたHTMLを指すmetadataエンベロープを含んでいます。q: "サンフランシスコのコーヒーショップ", tbm: "lcl"のキャプチャされた実行は、20のランク付けされた場所を返しました:

json Copy
// live scraper.google.search (tbm: "lcl") 実行からの最上位の形状です。
// サムネイルのbase64とほとんどのplaces[]エントリは削除されています;フィールドの値は実際のものです。
{
  "local_results": {
    "places": [
      {
        "position": 1,
        "title": "The Coffee Berry SF",
        "type": " コーヒーショップ",
        "rating": 4.9,
        "reviews": 588,
        "reviews_original": "(588)",
        "price": "$",
        "address": "1410 Lombard St",
        "phone": " $1–10 ",
        "hours": "4.9(588) ",
        "extensions": ["エスプレッソは美味しく、スタッフはとても親切で歓迎してくれました。"],
        "thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABA…",
        "place_id": "",
        "place_id_search": "",
        "lsig": "",
        "gps_coordinates": { "latitude": 0, "longitude": 0 }
      },
      {
        "position": 8,
        "title": "Delah Coffee",
        "type": " コーヒーショップ",
        "rating": 4.7,
        "reviews": 1100,
        "reviews_original": "(1.1K)",
        "price": "$",
        "address": "370 4th St",
        "phone": "カーブサイドピックアップ",
        "hours": "店内飲食",
        "extensions": ["店内飲食", "カーブサイドピックアップ", "接触なし配達"],
        "thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABA…",
        "place_id": "",
        "place_id_search": "",
        "lsig": "",
        "gps_coordinates": { "latitude": 0, "longitude": 0 }
      }
    ]
  },
  "search_information": {
    "query_displayed": "サンフランシスコのコーヒーショップ",
    "organic_results_state": "正確なスペルの結果",
    "total_results": 0,
    "time_taken_displayed": ""
  },
  "suggested_searches": [
    {
      "name": "今営業中",
      "q": "今営業中のサンフランシスコのコーヒーショップ",
      "link": "https://www.google.com/search?…&udm=1&q=coffee+shops+in+San+Francisco+open+now",
      "uds": "",
      "thumbnail": ""
    }
  ],
  "pagination": {},
  "metadata": {
    "engine": "google.search",
    "rawUrl": "https://api.scrapeless.com/storage/scrapeless.scraper.google.search/…html"
  }
}

places[]カードのフィールド:

フィールド タイプ 説明
position 数字 ローカルパック内の順位、1から始まる
title 文字列 ビジネス名
type 文字列 ビジネスカテゴリ(例:コーヒーショップ、元の値には前の空白が含まれます)
rating 数字 星評価(例:4.9
reviews 数字 整数に正規化されたレビュー数(例:5883.4K3400になる))
reviews_original 文字列 Googleが表示するレビュー数(例:(3.4K)
price 文字列 価格区分(例:$
address 文字列 住所(例:1410 Lombard St
phone 文字列 フリーテキストカードスロット - 下記の注を参照
hours 文字列 フリーテキストカードスロット - 下記の注を参照
extensions 文字列[] 代表的なレビューの抜粋、またはオーダーを示すカードのサービスオプションリスト
thumbnail 文字列 インラインのdata:image/jpeg;base64,…の場所の写真のブロブ
place_id / place_id_search / lsig 文字列 場所識別子;このキャプチャでは空です
gps_coordinates オブジェクト { 緯度, 経度 }; このキャプチャでは 0/0

カードの周りのトップレベルキー:

キー 含まれるもの
local_results.places[] ランキングされたビジネスカード
search_information クエリのエコーと結果の状態
suggested_searches[] ローカルフィルターチップ(今開いている / 高評価 / 安い / 高級 / 配達)をGoogleのURLとして
pagination ページングリンク(このクエリでは空)
metadata enginerawUrl、レンダリングされたHTMLの保存されたコピー

キャプチャされた形からのいくつかの正直な観察:

  • オブジェクトはフラット化されています。 local_results.places[]は繰り返す配列です — 他のアクターとは異なり、resultラッパーはありません。
  • reviewsreviews_originalは同じ数を持っています。 一つは数学用の整数、もう一つはGoogleの表示文字列((3.4K))。パイプラインに必要な方を読み取ってください。
  • phonehoursはGoogleが各カードスロットに表示する内容を追跡します。 多くのローカルカードでは、それは価格帯("$1–10")やサービスフラグ(Curbside pickup, Dine-in)であり、リテラルな電話番号や営業時間ではありません。両方を自由テキストとして扱い、依存する前に検証してください。
  • extensionsはカードごとに分岐します。 ほとんどのカードは単一のレビューのスニペットを返します; 注文オプションがあるカードはサービスリスト(Dine-in, Curbside pickup, No-contact delivery)を返します。どれを受け取ったかを確認してください。
  • 識別子と座標フィールドは空で戻ることがあります。 place_idplace_id_searchlsig、およびgps_coordinatesはスキーマに存在しますが、カードごとに空またはゼロである可能性があります — 欠如したフィールドはnullableとして扱ってください。
  • metadata.rawUrlはあなたの脱出ハッチです。 解析されたオブジェクトに表れないフィールドが必要な場合、レンダリングされたHTMLを保存します。

結論

Googleのローカルパックをスクレイピングすることは、一つの決定と一つのリクエストに還元されます:scraper.google.searchアクターを選択し、{ "q": "<query>", "tbm": "lcl" }をあなたのx-api-tokenで送信し、local_results.places[]を解析されたJSONとして読み取り返します。プロキシのローテーション、JavaScriptレンダリング、および解析はすべてサーバー側で実行されるため、同じクライアントがクエリ文字列を変更することで任意の都市やカテゴリを指します。Google検索のAI応答側については、Google AI Overview scraper guideが、同じ方法で回答ブロックとその引用をキャプチャする手順を説明しています。qにローカリティを固定し、tbm: "lcl"を設定し、自由テキストと識別子フィールドをnullableとして扱ってください。

AI搭載のローカル検索パイプラインを構築する準備はできましたか?

コミュニティに参加して無料プランを取得し、ローカル検索パイプラインを構築している開発者とつながりましょう: Discord · Telegram

app.scrapeless.comで無料のScraper APIクレジットにサインアップし、あなたのパイプラインが必要とするクエリ、都市、カテゴリにscraper.google.searchアクターを指し示してください。

FAQ

Q: Google Localをスクレイピングすることは合法ですか?

ローカルパックは公に表示されるデータです。ルールは管轄区域やGoogleの利用規約によって異なるため、規定のToSを確認し、スケールで運用する前に使用事例について相談してください。GDPRやCCPAで保護されている個人データを決して収集しないでください。

Q: プロキシは必要ですか?

いいえ。住宅用の出口とジオルーティングはアクターに組み込まれています — あなたがクエリを送信すると、アクターがネットワーク層とレンダリングを処理します。

Q: tbm: "lcl"は何をするのですか?

Googleのローカルパック — 地図に基づいたビジネスリスティング — を選択します。これを省略するか変更すると、同じアクターがクエリに対するオーガニックなウェブ結果を返します。

Q: いくつの場所が戻りますか?

アクターは、クエリに対してGoogleがランク付けしたカードを返します。「サンフランシスコのコーヒーショップ」のキャプチャされた実行は20を返しました。カウントはクエリ、カテゴリ、ローカリティによって異なります。

Q: 別の都市をターゲットにするにはどうすればいいですか?

ローカリティをqに入れます。アクターはクエリ文字列を読み取るため、AustinのコーヒーショップChicagoの配管工がその地域のローカルパックを返します。

Q: フィールドが欠けている場合、生のHTMLはどこにありますか?

metadata.rawUrlはレンダリングされたページのコピーを保存します。アクターが解析されたオブジェクトに表れない任意のフィールドを解析するために使用します。

Q: AIエージェントやSDKなしで実行できますか?

はい。これは通常のHTTPです — curl、Pythonのrequests、Nodeのfetch、または任意のHTTPクライアントが直接動作します。SDKは必要ありません。

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

最も人気のある記事

カタログ