Tony Wang5 分で読めますTripadvisorをスクレイピングする方法 2026年版(API & Python)
2026年のTripadvisorスクレイピング — DIYのPython、ノーコード、またはホテル・レストラン・観光スポットの検索とレビューを取得する構造化API。法律上の基本もあわせて解説します。
Tripadvisorを2026年にスクレイピングする最速の方法は、TripadvisorのGraphQLエンドポイントをリバースエンジニアリングしてアンチボット対策と戦う代わりに、正規化されたJSON(ホテル・レストラン・観光スポットの検索、場所の詳細、レビュー)を返す構造化APIを呼び出すことです。DIYのスクレイパーを組むこともできますが、Tripadvisorは堅牢に防御されており、公式APIは多くの人が求めるレビュー本文を省いています。本ガイドでは3つのアプローチすべてについて、それぞれが何を返すか、どこで行き詰まるか、そして法律上の基本を解説します。
なぜTripadvisorをスクレイピングするのか
Tripadvisorは最大級の旅行データソースのひとつであり、次のような用途で価値があります。
- ホテル・レストランの市場分析 — 特定の目的地における評価、ランキング、価格を追跡する。
- レビュー・センチメント分析 — 宿泊客が何を称賛し、何に不満を抱いているかを定量化する。
- 競合インテリジェンス — ある施設をその地域内のランクや同業他社と比較する。
- 旅行コンテンツ・プロダクト — 目的地、観光スポット、「やることリスト」のリサーチを支える。
Tripadvisorのスクレイピングは合法か
選択肢1: PythonによるDIY(そしてなぜ行き詰まるのか)
Tripadvisorは検索やリスティングのデータをGraphQL経由で読み込むため、DIYのスクレイパーはそれらの呼び出しをリバースエンジニアリングします。
import httpx
# TripAdvisor's typeahead runs on a GraphQL endpoint keyed by a rotating query id
payload = [{"variables": {"request": {"query": "New York", "limit": 10, "locale": "en-US"}},
"query": "84b17ed122fbdbd4"}] # preRegisteredQueryId — changes over time
r = httpx.post("https://www.tripadvisor.com/data/graphql/ids", json=payload, http2=True,
headers={"Origin": "https://www.tripadvisor.com",
"Referer": "https://www.tripadvisor.com/Hotels",
"X-Requested-By": "<random-tracking-id>"}) # required, or you're blocked
デモでは動きますが、その後こう行き詰まります。
- DataDome + Cloudflare。 TripadvisorはCloudflare WAFの背後でDataDomeのボット検知を、TLSフィンガープリンティングとJavaScriptチャレンジとともに動かしています。データセンターIPはCAPTCHAや403を招くため、住宅用プロキシと低速なレート(おおむね毎分10リクエスト、3〜7秒の遅延)が必要です。
- ローテーションするGraphQLクエリid。 データは変化する
preRegisteredQueryIdをキーとする/data/graphql/ids呼び出しの背後にあり、加えてOrigin/Referer/X-Requested-Byヘッダーが必須です。idがローテーションすると、スクレイパーはデータを返さなくなります。 - 隠されたウェブデータと変わり続けるセレクター。 ホテルやレビューの詳細はページ内にJSONとして埋め込まれており(
aggregateRatingスクリプトブロック)、レビューは-orN-のURLオフセットでページ送りされ、data-test-targetのフックは予告なく変わります。 - 公式APIではギャップを埋められない。 TripadvisorのContent APIは月あたり約5,000コール(クレジットカード必須)を提供しますが、返すのは評価とリンクであってレビュー本文ではありません。そのため、人々が実際に求めるコンテンツを得るには結局スクレイピングが必要になります。
選択肢2: ノーコードツール
ビジュアルなエクストラクターやマーケットプレイスの「TripAdvisorレビュー」アクターはCSV/JSONをエクスポートし、単発の取得には向いています。ただし、予測可能なフィールドを持つプロダクト内のパイプラインでは扱いにくく、同じアンチボットの変化で壊れます。
選択肢3: 構造化されたTripadvisor API
繰り返し実行するワークフローには、TripadvisorスクレイピングAPIが、動かすべきブラウザなしに正規化されたJSONを返します。まずロケーションを解決します。
curl "https://api.crawlora.net/api/v1/tripadvisor/autocomplete?q=New%20York" \
-H "x-api-key: $CRAWLORA_API_KEY"
続いて、Pythonでオートコンプリート → 検索 → レビューを連鎖させます。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/tripadvisor"
# 1) resolve a location to a geo_id
geo = requests.get(f"{base}/autocomplete", headers=h, params={"q": "New York"}).json()["data"]["results"][0]
geo_id = geo["id"]
# 2) search hotels (or restaurants / attractions) in that geo
hotels = requests.get(f"{base}/search", headers=h,
params={"geo_id": geo_id, "type": "hotel", "limit": 20}).json()["data"]["results"]
# 3) pull a place's reviews by its own id
place_id = hotels[0]["id"]
reviews = requests.get(f"{base}/reviews", headers=h,
params={"id": place_id, "page": 1, "language": "en"}).json()["data"]["reviews"]
レビューのレスポンスは、そのまま保存できる正規化されたJSONです(フィールドは説明用です。ドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"id": "113311",
"page": 1,
"language": "en",
"total": 1517,
"reviews": [
{
"id": "1060008752",
"title": "Outstanding weekend",
"text": "Excellent stay with attentive service.",
"author": "Jane D.",
"date": "May 2026",
"rating": 5,
"helpful_votes": 1,
"photos": ["https://dynamic-media-cdn.tripadvisor.com/media/photo.jpg"]
}
]
}
}
検索結果にはid、title、type、url、rating、review_count、rank_label、price_level、address、categories、booking_urlが含まれます。price/star_rating付きのホテル特化の結果には/tripadvisor/hotelsを、場所の完全な詳細には/tripadvisor/placeを、有効なtype/sortの値には/tripadvisor/enumsを使ってください。レビューはpageでページ送りされ、languageとsort_byを渡せます。1件のレビューにつき1行を保存し、スケジュールに沿って再取得してください。
収集できるもの
公開ページで公開されている範囲で、次のものを収集できます。ロケーションのオートコンプリート(geo idと親)、ホテル・レストラン・観光スポットの検索結果(rating、review_count、rank_label、price_levelまたはprice、categories、booking_url)、場所の詳細(address、画像、rating、レビュー総数)、そしてレビュー(title、text、author、date、rating、helpful_votes、photos)で、いずれもgeoとロケール/通貨でスコープされます。公開された事実ベースの項目にとどめてください。
制約とよくある課題
- レビュー本文への簡単な公式ルートはない。 Content APIは月あたり約5,000コール(カード必須)が上限で、レビュー本文は省かれ、直接スクレイピングは大規模になるとDataDome/CloudflareのCAPTCHAを招きます。構造化APIはプロキシとアンチボットをひとつのキーの背後で吸収します。
- geo_id対place id。 ロケーションは
geo_id(オートコンプリート由来)でアドレス指定し、個々のホテル・レストラン・観光スポットはそれぞれ固有のidでアドレス指定します。まずgeoを解決してください。 - レビューはロケールごとであり、個人データである。 レビューは言語/ロケールに紐づいており、投稿者名とレビュー本文はGDPR/CCPA上の個人データです。適法な根拠に基づいて、公開された事実ベースの項目を収集してください。
- ランキングと価格は動的である。 ランクのラベルや1泊あたりの価格は変動するため、一度きりのスナップショットを信頼するのではなく、スケジュールに沿って再取得してください。
どこで使われるか
- 旅行・ホスピタリティのリサーチ — 目的地をまたいでホテル・レストラン・観光スポットを追跡する。旅行・ホスピタリティのリサーチのユースケースを参照してください。
- レビュー・評判のモニタリング — 施設の評価とレビューのセンチメントを見守る。レビュー・評判のモニタリングを参照してください。
- 市場・競合分析 — 会場をその地域内のランクや同業他社と比較する。
出典
収集を始める
まずは無料で試す: 任意の公開URLを無料ウェブスクレイパーで実行するか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップは不要です。
検索とレビューのエンドポイントをPlaygroundでテストし、APIドキュメントでスキーマを確認し、料金を確認してください。旅行スタックの残りについてはAirbnbのスクレイピング方法を、レビューソースをさらに知るにはTrustpilotレビューのスクレイピング方法とApp Storeレビューのスクレイピング方法を、ウェブスクレイピングAPIの選び方、そしてウェブスクレイピングは合法かもあわせて参照してください。
よくある質問
ブロックされずにTripadvisorをスクレイピングできますか?
TripadvisorはCloudflare WAFの背後でDataDomeのボット検知を、TLSフィンガープリンティングとJavaScriptチャレンジとともに動かしているため、データセンターIPはCAPTCHAや403を招きます。DIYには住宅用プロキシと低速なレート(毎分10リクエスト程度)が必要です。構造化APIは、公開の検索・レビューデータについて、プロキシとアンチボットをひとつのキーの背後で処理します。
Tripadvisorに公式APIはありますか?
はい、ただし制約があります。TripadvisorのContent APIは月あたりおおむね5,000コールの無料枠(クレジットカードが必須)を提供し、評価とリンクを返しますが、レビュー本文は返しません。そのため、人々が実際に求めるレビューコンテンツを収集するには結局スクレイピングが必要になります。
ホテルやレストランのレビューはどうやって取得しますか?
ロケーションを/tripadvisor/autocompleteでgeo_idに解決し、/tripadvisor/search(typeにhotel、restaurant、attraction)でそのgeoを検索して場所のidを取得し、そのidで/tripadvisor/reviewsを呼び出します。レビューはpageでページ送りされ、languageとsort_byを受け付けます。
geo_idとplace idの違いは何ですか?
geo_idはロケーション(都市、地域)を識別するもので、オートコンプリート由来です。place idは特定のホテル・レストラン・観光スポットを識別するもので、検索結果由来です。まずgeoを解決し、次に場所を固有のidでアドレス指定します。
Tripadvisorのどんなデータを収集できますか?
公開フィールドを収集できます。ロケーションのオートコンプリート、ホテル/レストラン/観光スポットの検索結果(rating、review_count、rank_label、価格レベル、categories、booking_url)、場所の詳細(address、画像、rating)、そしてレビュー(title、text、author、date、rating、helpful_votes、photos)で、geoとロケールでスコープされます。
Tripadvisorのレビューは個人データですか?
はい。投稿者名とレビュー本文はGDPR/CCPA上の個人データです。適法な根拠に基づいて公開された事実ベースの項目のみを収集し、レビュアーの身元を再公開しないでください。
どのくらいの頻度で更新できますか?
ランキングと価格は変化するため、継続的にポーリングするのではなく、プランと責任ある利用の範囲内でスケジュールに沿って再取得してください。