Google Apps Script(GAS)でwebスクレイピング

こんにちは、こおりやまです。

Webページから情報を収集すべくGASを利用してスクレイピングしてみました。

今回、個人的に応援しているサッカーチームのカレンダーページを利用して情報を抜き出してみます。

https://www.verdy.co.jp/

GASのライブラリParserを利用すると指定したHTMLタグを利用し簡単に抽出可能です。

新しい、スプレッドシートを作成し、ライブラリとしてParserを追加します。

ID:M1lugvAXKKtUxn\_vdAG9JZleS6DrsjUUV

対象ページの情報取得はこんな感じでアクセスします。

var url = "[https://www.verdy.co.jp/calendar/202011]";  
var html = UrlFetchApp.fetch(url).getContentText('UTF-8');

あとは取得したい情報がどのような構成となっているのか確認します。

1_ZyfYrk6Rv9TT3Je1qwmGLA

最初の <table>タグ内にカレンダー情報が存在するので、まず最初の <table>タグ情報を取得します。
build()だと一番最初にヒットした情報を取得できます。

var table = Parser.data(html).from('<table>').to('</table>').build();

次にカレンダーの行情報として <tr</tr>タグ情報を取得します。
こちらは配列として取得します。
<tr> としたいところですが、タグには複数の パターンで class 定義があるため開始は <tr としています。

var listCalendar = Parser.data(table).from('<tr').to('</tr>').iterate();

取得した情報からHTMLタグ、改行情報を除きスプレッドシートに書き出す。

var sheet = SpreadsheetApp.getActive().getSheetByName("VerdyCalendar");  
for(i = 0;i < listCalendar.length; ++i ){  
    tag = '<tr' + listCalendar\[i\]  
    //タグと改行コードを除く  
    sheet.getRange(i + 1, 1).setValue(tag.replace(/<("\[^"\]\*"|'\[^'\]\*'|\[^'">\])\*>|\\r\\n|\\n|\\r/g,''));  
}

全体的なコードはこちら

function myFunction() {  
  var url = "[https://www.verdy.co.jp/calendar/202011]";  
  var html = UrlFetchApp.fetch(url).getContentText('UTF-8');

      //カレンダー部分  
  var table = Parser.data(html).from('<table>').to('</table>').build();

    //行情報を取得  
  var listCalendar = Parser.data(table).from('<tr').to('</tr>').iterate();

    //出力用のカレンダー  
  var sheet = SpreadsheetApp.getActive().getSheetByName("VerdyCalendar");  
  for(i = 0;i < listCalendar.length; ++i ){  
    tag = '<tr' + listCalendar\[i\]  
    //タグと改行コードを除く  
    sheet.getRange(i + 1, 1).setValue(tag.replace(/<("\[^"\]\*"|'\[^'\]\*'|\[^'">\])\*>|\\r\\n|\\n|\\r/g,''));  
  }  
}

抽出結果はこちら…あとは取得したデータを加工して利用するだけですね。

1_S-fpYnrRBZo6O6FKMb5Tjw

最後にスクレイピングする場合、対象サイトなどに過度な負荷をかけないよう十分注意して実行しましょう。
また、取得したデータを2次利用する場合や開示する場合など、該当サイトの規約など十分確認し利用注意が必要となります。