Tony Wang4 分で読めますDoorDashのレストラン・メニューデータをスクレイピングする方法(2026年版・API & Python)
2026年にDoorDashのレストラン検索、メニュー、レビューをスクレイピング — DIY、ノーコード、またはDoorDash自身のアプリバックエンドを使う構造化APIで。法的な基本事項も解説します。
2026年にDoorDashのレストラン・メニューデータをスクレイピングする最速の方法は、DoorDashのモバイルアプリのバックエンドを自力でリバースエンジニアリングする代わりに、正規化されたJSONを返す構造化APIを呼び出すことです。このJSONにはピックアップ検索、ストアメニュー、商品詳細、配送手段情報、レビューが含まれます。本ガイドでは、3つのアプローチすべてについて、それぞれが何を返し、どこで破綻し、そして法的な基本事項がどうなっているのかを解説します。
なぜDoorDashをスクレイピングするのか?
DoorDashは米国のフードデリバリー市場の大部分において、レストランの発見、メニュー、配送/受け取りのロジスティクスを一元化しており、次のような用途に役立ちます。
- レストラン・メニューインテリジェンス — 市場全体にわたるメニュー項目、価格、在庫状況を追跡します。
- デリバリー市場リサーチ — エリアごとの料理ジャンルのカバレッジ、DashPass対象状況、受け取りと配達の割合。
- レビュー・評判モニタリング — レストランの評価とレビュー数の推移を追跡します。
- 競合価格分析 — 近隣のストア間で同じ料理ジャンルの価格を比較します。
DoorDashのスクレイピングは合法か?
選択肢 1: Python での DIY(そしてなぜ破綻するのか)
DoorDashのウェブサイトとアプリは、アンチボット対策で守られた内部APIから検索、メニュー、レビューをレンダリングしています。
import requests
# DoorDash's public search page calls an internal API behind anti-bot defenses
resp = requests.get("https://www.doordash.com/search/store/pizza/?lat=37.7825&lng=-122.461")
デモでは動きますが、その後すぐに破綻します。
- 公式の公開APIがない。 DoorDashはサードパーティによる検索、メニュー、レビューアクセス向けのデベロッパーAPIを公開していないため、ドキュメント化されたエンドポイントもキーもありません。コンシューマーアプリのプライベートな呼び出しを再現することになります。
- 位置情報でゲートされたレスポンス。 在庫状況、価格、メニューはすべて配送/受け取りの場所に紐づいているため、スクレイパーはリクエストごとに実際の座標ペアを必要とし、1つのレスポンスを複数の市場で使い回すことはできません。
- アンチボット対策。 検索やストアのエンドポイントへの繰り返し自動リクエストはレート制限やブロックを引き起こすため、現実的なヘッダー、プロキシ、そして絶え間ないメンテナンスが必要です。
- 移り変わる内部スキーマ。 プライベートなアプリバックエンドのレスポンス形式は予告なく変更され、再現したクエリを破綻させます。
選択肢 2: ノーコードツール
マーケットプレイスの「DoorDashスクレイパー」アクターはCSV/JSONをエクスポートし、単発の取得には適していますが、スケジュール実行するパイプラインでは扱いづらく、同じ内部APIの脆さを引き継ぎます。
選択肢 3: 構造化された DoorDash API
繰り返し行うワークフローには、DoorDashスクレイピング APIがDoorDash自身のアプリが使用しているのと同じ匿名のAndroidモバイルゲストフローを呼び出し、正規化されたJSONを返します — DoorDashのアカウント、Cookie、トークンは一切不要です。ある位置情報の近くでピックアップ可能なレストランを検索するには次のようにします。
curl "https://api.crawlora.net/api/v1/doordash/search?query=pizza&latitude=37.7825&longitude=-122.461" \
-H "x-api-key: $CRAWLORA_API_KEY"
続いて、ストアidを解決し、Pythonでメニュー、配送手段情報、レビューを取得します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/doordash"
loc = {"latitude": 37.7825, "longitude": -122.461}
results = requests.get(f"{base}/search", headers=h,
params={"query": "pizza", **loc}).json()["data"]["results"]
store_id = results[0]["storeId"]
menu = requests.get(f"{base}/store/{store_id}/menu", headers=h, params=loc).json()["data"]
reviews = requests.get(f"{base}/store/{store_id}/reviews", headers=h, params=loc).json()["data"]
fulfillment = requests.get(f"{base}/store/{store_id}/fulfillment", headers=h, params=loc).json()["data"]
検索レスポンスは、そのまま保存できる正規化されたJSONです(実際のフィールド)。
{
"code": 200,
"msg": "OK",
"data": {
"query": "pizza",
"results": [
{ "storeId": "123", "name": "Pizza Place", "url": "https://www.doordash.com/store/pizza-place-123/", "tags": ["Pizza"], "asapAvailable": true, "pickupAvailable": true, "dashPassEligible": true, "distance": "1.2 mi", "address": { "city": "San Francisco", "region": "CA" } }
]
}
}
メニュー価格はDoorDash自身の表示フォーマットを保持しています。
{ "storeId": "26282644", "name": "Eats", "sections": [{ "title": "Popular Items", "items": [{ "name": "ShackBurger", "price": "$8.99" }] }] }
検索以外にも、同じキーで /doordash/search/autocomplete(先行入力候補)、/doordash/search/filters(ある位置での料理カテゴリーとフィルターオプション)、/doordash/search/items(近隣の加盟店をまたいだ料理での検索)、/doordash/explore と /doordash/feed(クエリなしの位置情報ベースの閲覧 — 何も入力しないうちからアプリが表示するのと同じ画面)、/doordash/store/{id}/info(住所/電話番号カード)、そして /doordash/store/{id}/item/{item_id}(単一メニュー項目の詳細)にアクセスできます。ストアまたは項目ごとに1行を保存し、スケジュールに沿って再取得してください。
収集できるもの
公開されたフィールド: ピックアップ検索結果(store id、name、url、tags、distance、address、ASAP/DashPass/pickupのフラグ)、先行入力候補、料理カテゴリーとフィルター、加盟店をまたいだ項目単位の検索、ストアメニュー(sections、items、表示用文字列としての価格)、単一項目の詳細、配送手段と配達時間帯、ストアの連絡先情報(住所、電話番号、座標)、そしてストアレビュー(平均評価、件数、レビュー本文)。
制約とよくある課題
- 任意のレストランデータを取得できる公式APIがない。 サードパーティによる検索、メニュー、レビューへのアクセスは、DoorDashの内部アプリバックエンドをスクレイピングすることを意味します。構造化APIなら1つのキーの裏でこれを処理します。
- すべてが位置情報に紐づいています。 メニュー、価格、在庫状況は配送/受け取りの座標によって変化します — 1つのキャッシュされた位置ではなく、リクエストごとに実際の位置情報を渡してください。
- レビューは個人データ。 レビュアー名とレビュー本文はGDPR/CCPAのもとで個人データです。適法な根拠のもと、公開された事実に基づくフィールドを収集してください。
- 価格やメニューは変動する。 価格リサーチでは、一度きりのスナップショットを当てにするのではなく、スケジュールに沿って再取得してください。
どのような場面で使われるか
- レストラン・メニューインテリジェンス — デリバリー市場全体にわたる価格と品揃えを追跡します。Eコマースプロダクトインテリジェンスのユースケースを参照してください。
- レビュー・評判モニタリング — レストランの評価とセンチメントの推移を追跡します。レビュー・評判モニタリングのユースケースを参照してください。
- デリバリー市場リサーチ — 料理ジャンルの密度、DashPassのカバレッジ、エリアごとの受け取りと配達の割合。
出典
収集を始める
まずは無料で試す: 任意の公開URLを無料ウェブスクレイパーで実行するか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップは不要です。
Playgroundで検索エンドポイントをテストし、APIドキュメントでスキーマを確認し、料金を確認してください。あわせて、デリバリー市場の反対側についてはUber Eatsをスクレイピングする方法、ローカルビジネスの評価についてはYelpをスクレイピングする方法、このデータが実際にどう流れるかについてはモバイルアプリAPIの仕組み、そしてウェブスクレイピングは合法かもあわせて参照してください。
本記事はhow-to-scrapeガイドシリーズの一部です — 私たちが扱うすべてのプラットフォームを、1つのインデックスにまとめています。
よくある質問
DoorDashには公式APIがありますか?
サードパーティによる検索、メニュー、レビューアクセス向けの公開デベロッパーAPIはありません。DoorDashのレストランデータを収集するには、その内部アプリバックエンドをスクレイピングする必要があります。構造化APIなら1つのキーの裏でこれを処理し、アプリが使用しているのと同じ匿名のAndroidモバイルゲストフローを呼び出します。
DoorDashのストアはどうやって指定しますか?
ストアは数値のstore idで指定され、/doordash/search、/doordash/explore、または /doordash/feed が返します。メニューと在庫状況は位置情報に紐づいているため、すべてのストア・検索エンドポイントは緯度/経度も必要とします。
レストランではなく特定の料理を検索できますか?
はい。/doordash/search/items は近隣の加盟店をまたいで料理やメニュー項目を検索し、一致した項目をその親ストアidと距離とともに返します — レストラン単位の /doordash/search とは別のエンドポイントです。
DoorDashのどのようなデータを収集できますか?
公開されたフィールドです: ピックアップ検索結果と先行入力候補、料理カテゴリーとフィルター、項目単位の検索、表示フォーマット済みの価格を持つストアメニュー、単一メニュー項目の詳細、配送手段と配達時間帯、ストアの連絡先情報、そしてストアレビュー(評価、件数、本文)。
DoorDashのレビューは個人データですか?
はい。レビュアー名とレビュー本文はGDPR/CCPAのもとで個人データです。適法な根拠のもと、公開された事実に基づくフィールドのみを収集し、レビュアーの身元を再公開しないでください。
どのくらいの頻度で更新できますか?
メニュー、価格、在庫状況は変動するため、継続的にポーリングするのではなく、プランと責任ある利用の範囲内でスケジュールに沿って再取得してください。