残りの人生は~シラフで~

断酒をした事で生まれたシラフの時間に、思う事を書いていきます

GASで出走表を引っ張ってみる

GASでやってみたかったことの、ほんのひとつ。

競馬データの収集。

 

手始めに、出走表を引っ張ってみた。

 

試してみたのは、GASのUrl Fetchサービスの利用。

これで指定したURLからHTMLを取ってきます。

 

そして、そのHTMLの変換には「Parser」という

ライブラリが便利と聞き、それも利用。

 

コードを書いてみては動かしてログを覗き、

実際の動作を体験してみる、を繰り返して、

ひとまずはやりたいことを達成。

 

const horseList = [];
function getHorseList() {
  let html = UrlFetchApp.fetch(url).getContentText('shift-jis');
  let tbody = Parser.data(html).from('<tbody>').to('</tbody>').build(); //馬柱にあたるtbodyを抽出
  let trs = Parser.data(tbody).from('<tr>').to('</tr>').iterate(); //馬番毎のデータをtrsに格納

  for(const tr of trs) {
    let num = Parser.data(tr).from('<td class="num">').to('</td>').build(); //馬番を取得

    let name_line = Parser.data(tr).from('<div class="name_line">').to('</div>').build();
    let nameClass = name_line.replace('<div class="name">',''); //divのまとまりがズレる
    let aTag = nameClass.slice(061); //DBの値が異なるので、一旦桁数で文字列を抽出
    let name = Parser.data(nameClass).from(aTag).to('</a>').build();

    horseList.push(num + ':' + name); //馬番と馬名を配列に格納
  }
Logger.log(horseList);
}

 

今回はJRA大阪杯の出走表をURLに指定。

このあたりはおいおい別の形で柔軟に指定したいところ。

 

当たり前ながら、普段は「予想」の観点でしか馬柱を見ていないが、

HTMLソースを覗いてびっくり!

なかなかに複雑な構成になっていました。(当たり前か)

 

現状の所感として・・・

  • letとconstの使い分けがまだ怪しい
  • 文字抽出にParserだけでは不足がありそう
  • たのしい

 

特にGASでのスクレイピングではセットで紹介されているParserが、

divなど同じタグがネストされている時に、呼応する閉じタグを見れていない様子。

このあたりは理解が追い付いていない可能性もあり、引き続き調べてみよう。

 

やりたいことをやってみる、がこの手の学習には不可欠ですね。