【ITニュース解説】How to track Google Hotels prices with Python (no browser, no API key)
2026年09月25日に「Dev.to」が公開したITニュース「How to track Google Hotels prices with Python (no browser, no API key)」について初心者にもわかりやすく解説しています。
ITニュース概要
Google Hotelsの価格追跡はAPIがなく不便だが、Python/Node.jsで使えるスクレイピングツールが開発された。これは、ウェブページ内のデータを直接解析し、高速でホテル価格を取得できる。日々の価格変動を自動でGoogleシートに記録・分析する活用例も紹介されており、システムエンジニア初心者でも手軽に利用し、旅行計画などに役立てられる。Apifyで提供中だ。
ITニュース解説
Web上には膨大な情報が存在するが、それら全てが簡単に利用できるわけではない。特に、企業が提供するWebサービスの中には、そのデータにアクセスするための「公式API」と呼ばれる仕組みを提供していない場合がある。APIとは、プログラムが他のプログラムと連携するための窓口のようなもので、これがあれば自動的にデータを取得したり、操作したりできる。Google Hotelsの価格情報もその一つで、特定の都市のホテル価格を一覧で表示してくれる便利なサービスだが、公式APIがないため、もし宿泊料金の変動を追跡したり、複数のホテルを比較したりしたい場合、従来は手作業でWebページから数字をコピーするしかなかった。これは非常に手間がかかり、効率的ではない作業だ。
この課題を解決するために開発されたのが、「Google Hotels Scraper」というツールである。これは、Webサイトから必要な情報を自動的に収集する「Webスクレイピング」という技術を用いて、Google Hotelsの価格データを取得するプログラムだ。特に注目すべき点は、一般的にWebスクレイピングで用いられる「ヘッドレスブラウザ」(画面表示を伴わないWebブラウザ)を必要としないことである。ヘッドレスブラウザは、実際のブラウザのように動作するため、処理に時間がかかり、サーバーに大きな負荷をかけることがあるが、このツールは異なるアプローチをとる。Google Hotelsのページには、ホテルの検索結果データが最初からHTMLソースコード内の特定のスクリプトブロック(AF_initDataCallbackという部分)に埋め込まれており、このツールはその部分を直接解析することで、非常に高速にデータを取得できる。例えば、50件のホテル情報であれば、1分もかからずに処理を完了できるという。
このGoogle Hotels Scraperは、「Apify」というクラウドプラットフォーム上で「Actor」と呼ばれる形で提供されている。Apifyは、Webスクレイピングやデータ抽出のためのツールを開発・実行・管理できるサービスで、様々なActorが公開されている。このActorを利用するには、Apifyクライアントライブラリを自分のプログラムにインストールし、Apifyのアクセストークンを使ってクライアントを初期化する。例えばPythonで利用する場合、「pip install apify-client」というコマンドでライブラリをインストールし、以下のコードのようにApifyクライアントをセットアップする。
1from apify_client import ApifyClient 2client = ApifyClient("<YOUR_APIFY_TOKEN>")
次に、特定の条件(検索クエリ、チェックイン日、チェックアウト日、人数、通貨、最大結果数など)を指定して、Actorを呼び出す。この呼び出しはApifyのサーバー上で実行され、完了すると結果データが生成される。
1run = client.actor("rel8ble/google-hotels-scraper").call(run_input={ 2 "queries": ["hotels in Charlotte"], 3 "checkIn": "2026-10-15", 4 "checkOut": "2026-10-18", 5 "adults": 2, 6 "currency": "USD", 7 "maxResults": 50, 8})
Actorの実行が成功すると、結果データはApifyの「データセット」と呼ばれる場所に保存される。このデータセットから、プログラムを使ってホテル情報を一つずつ取り出すことができる。取得できるデータは多岐にわたり、ホテルの名前、1泊あたりの料金、税金込みの料金、合計料金、通貨、特定の割引情報、評価、レビュー数、ホテルのクラス、緯度・経度、チェックイン・チェックアウト時刻、GoogleマップのURL、そしてデータがスクレイピングされた時刻などが含まれる。さらに、includeDetailsというオプションを有効にすれば、住所や電話番号といった詳細情報も取得できる。
特に重要なのは「entityToken」という項目で、これは各ホテルを一意に識別するためのIDのようなものだ。このentityTokenは、異なる日にスクレイピングを行っても同じホテルであれば変わらないため、今日の価格と昨日の価格を比較したり、長期にわたる価格変動を追跡したりする際のキーとして非常に有用だ。
このスクレイピングツールを活用した具体的な例として、シャーロットのホテル価格を毎日Google Sheetsに記録するプロジェクトがある。この目的は、特定の宿泊期間に対するホテルの価格がどのように日々変動するかを可視化することだ。PythonのgspreadライブラリとGoogleサービスアカウントを使用し、Google Sheetsと連携させる。毎日このスクリプトを実行することで、entityTokenをキーとして日付ごとにホテルの価格データを追加していく。数週間後には、どのホテルが価格を下げているか、または上げているかを分析できるようなデータがGoogle Sheets上に蓄積される。この日次処理は、cron(Linuxのスケジュール機能)、Task Scheduler(Windowsのスケジュール機能)、GitHub Actionsのスケジュール機能などを使って自動化できる。また、Apify Console自体にもスケジュール機能があり、Google Sheetsとの連携も提供されているため、自分でスクリプトを書かずに自動化することも可能だ。ここで重要なのは、価格変動を正確に追跡するために、常に同じチェックイン日とチェックアウト日を設定しておくことである。異なる期間の価格を比較しても、価格変動の傾向は捉えられないからだ。
このGoogle Hotels Scraperは有料ツールであり、1,000件の結果(ホテルの情報1件が1結果とカウントされる)あたり3.50ドルの料金がかかる。同じホテル情報を重複して取得した場合や、リクエストが失敗した場合には料金は発生しない。例えば、毎日50件のホテル情報を1ヶ月間(30日)取得し続ける場合、合計1,500件の結果となるため、約5.25ドル(約800円)の費用がかかる計算だ。Apifyの無料プランには月額5ドルのクレジットが付与されるため、この範囲内であれば約1,400件のホテル情報を無料でスクレイピングできる。
利用上のいくつかの制限も存在する。一つのクエリで取得できるユニークなホテル数は約150〜250件が上限であり、それ以上はバケーションレンタルが含まれたり、重複した情報が返されたりすることがある。大規模な都市のホテル情報を網羅したい場合は、「新宿のホテル」「渋谷のホテル」のように地域を分割して検索する必要がある。取得される価格は、Google Hotelsが表示する「からの」価格、つまり指定した日程と人数における、複数の予約パートナーで提供される最も低い価格だ。また、指定した日程で空室がないホテルの場合は、pricePerNightの項目がnullになる。現行バージョンでは、特定の予約サイトごとの価格比較や、レビューの本文テキストは取得できない。前述したように、住所や電話番号などの詳細情報を取得するには追加のリクエストが必要となり、処理速度が低下する可能性がある。さらに、Googleの検索結果はページの区切りで表示順がシャッフルされることがあり、次のページを読み込んでも新しいホテルが期待したほど追加されない場合もある。
このように、Google Hotels Scraperは、公式APIが存在しないWebサービスからでも、プログラムの力で効率的にデータを収集し、分析・活用できる可能性を示している。システムエンジニアを目指す皆さんにとって、Webスクレイピングは、データ活用の幅を広げ、さまざまなビジネス課題を解決するための強力な武器となる技術の一つであると言えるだろう。