過剰な頻度でのWebサイトスクレイピングは、サーバーに負荷をかけとても被害の大きい行為です。
良識的な範囲でのスクレイピング頻度と、回数を心がけましょう。
加えて、取得データの悪用は違法行為として罰せられる可能性があります。
取得データの取り扱いにもご注意ください。
以上の点に留意したうえで、今回のGASスクレイピング記事をご覧ください。
一休.COMのサイトでスクレイピング対象のホテルを探す
今回は、一休.COMサイトのとあるホテルの宿泊プランをGASでスクレイピングして、毎日その価格をログとしてスプレッドシートに残したいと思います。
こういうことをしてみたくなったのは、コロナ禍が明けて、どれくらいのペースでホテルの宿泊価格が上昇していくのか、時系列データで確かめてみたくなったからです。
では一休.COMサイトに飛び、調べてみたいホテルをそれぞれ探してみてください。
私は今回、スクレイピング対象として「アパホテル 秋葉原駅電気街口」を選択しました。支店名がすでに良い雰囲気を醸し出しています。
スクレイピングURLを決定する
Webサイトのスクレイピングをするには、対象のURLと取得コンテンツのHTMLタグを見極める必要があります。
今回は、当日の宿泊プランを取得できるURLを選びます。
一休.COMのサイトでは、URLに含めるパラメータで様々な宿泊条件を設定することが可能です。
今表示しているページのURLは下のようなものなのですが、
https://www.ikyu.com/00081391/?adc=1&lc=1&ppc=1&rc=1&si=1&st=1&top=plans
URLの「?」以降、7つのパラメータが付属しています。
このURLが意味する宿泊条件は「日付指定なし 1泊 大人1名 宿泊プランを安い順」に表示するというものになります。
URLパラメータの解説
ここで簡単にパラメータの解説をしたいと思います。
- abc – 表示順を指定する。1なら「安い順」、2なら「高い順」になる。
- lc – 宿泊日数を指定。1は1泊、5に設定すると5泊分の宿泊価格が表示される。
- ppc – 大人の宿泊人数。1なら1人、2なら2人と人数を設定できる。
- rc – 宿泊部屋数。宿泊する部屋数を指定する。3部屋押さえたければ3と設定する。
- top – 部屋か、プランでのソートを指定。planならプランソート、roomなら部屋の条件で価格を表示する。
今回使用しませんでしたが、他にもいろいろなパラメータがあるようです。
- cid,cod – 宿泊する日付を指定できる。例えば「cid=20240308&cod=20240310」のように指定すると、2024年3月8日~3月10日までの2泊価格が表示できます。
- cac – 小学生高学年の人数。
- cbc – 小学生低学年の人数。
ほかにも乳幼児の設定などをするパラメータもあり、特定条件での宿泊価格スクレイピングも可能です。
欲しい情報があるHTMLタグを特定する
スクレイピングURLが決まったところで、宿泊価格情報がおさめられているHTMLタグを特定します。
※スクレイピングURLは用途によって使い分けてください。
今回は「日付指定なし 1泊 大人2名 宿泊プランを安い順」で表示させたページのHTMLタグの特定を行います。
https://www.ikyu.com/00081391/?adc=1&lc=1&ppc=2&rc=1&si=1&st=1&top=plans
デベローパーツールを立ち上げて、まずプラン名のHTMLタグを探すと
class=”mb-4 inline text-xl font-bold text-gray-800″というクラス名を持つ、h3タグに収まっていました。
次に、ルーム名の収まっているタグを調べます。
class=”mb-2 inline-block cursor-pointer text-lg text-blue-700″というクラス名の、spanタグだとわかります。
最後に、料金情報について調べます。
class=”text-3xl font-bold”というクラス名の、spanタグにあることがわかりました。
では、わかった要素からスクレイピングスクリプトを書いていきます。
cheerio for Google Apps Scriptの導入
今回のスクレイピングには、CheerioというスクレイピングライブラリをGAS向けにカスタマイズされた「cheerio for Google Apps Script」を利用します。
では、任意のApps Scriptを開き、GASで利用できるようにするためライブラリを追加します。
[
ライブラリの追加を選択して、
スクリプトIDに下のコードを登録してください。
Script ID: 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
ライブラリに「Cheerio」が追加されれば完了です。
コメント