【入門】GASで簡単スクレイピング

こんにちは、虎の穴ラボのおおばです。

※社員紹介ページの緑髪の子です。
yumenosora.co.jp

皆さんスクレイピングというものをご存知でしょうか?
簡単に説明すると、サイトから情報を収集する行為です。
例:とらのあな通販デイリーランキング1〜100位迄のタイトルの一覧を収集する

私は仕組みやスクレイピングとはどういったものかは少し知ってる程度で、実際に行った経験はありませんでした・・・

今回はGASでスクレイピングが簡単に出来るということなので、入門用としてはうってつけだと思い実践してみました。



試しに映画ランキングサイトから1位の情報を取得しようと思います。
(とらのあなのランキング取得は入門用としては難しいので、機会があれば・・・)

あっという間に出来上がったのが以下のコードです。

■コード

function getMovieRanking() {
  const URL = '';//とある映画ランキングサイト
  try{
    var response = UrlFetchApp.fetch(URL);
    var json = response.getContentText('UTF-8');  
    var myRegexp = /<td><a href="\/mv[0-9]{1,8}\/">([\s\S]*?)<\/a><\/td>/;
    var movieTitle = json.match(myRegexp);
    return "日本映画興行成績ランキング1位は、" + movieTitle[1] + "でした。";
  } catch(e){
    return "日本映画興行成績ランキング1位を取得出来ませんでした。";
  } 
}

function call() {
 Logger.log(getMovieRanking()) 
}

※ 2行目の実際のURLは削除しています。

とある映画ランキングのサイトをURLに指定して、
callを実行すると日本映画興行成績ランキング1位をログに吐き出します。

■ざっくりとした流れ

1. HTTPおよびHTTPS要求を発行し、HTMLを取得(UTF-8形式)。
    var response = UrlFetchApp.fetch(URL);
    var json = response.getContentText('UTF-8');  

2.正規表現パターンに引っ掛けてランキング情報を取得
    var myRegexp = /<td><a href="\/mv[0-9]{1,8}\/">([\s\S]*?)<\/a><\/td>/;
    var movieTitle = json.match(myRegexp);

実際にparseして対象のデータを取得するまでに、4行のコード記述で済む為、学習コストが低く、スクレイピングを経験が無い私でも簡単にスクレイピングが出来ました。

ちなみに・・・スクレイピングには著作権の問題とスクレイピング対象のサーバーに、負荷をかけないようにするというマナーがありますので実際に行う際にはご注意ください。

P.S.
虎の穴ではJavaエンジニアをはじめとして一緒に働く仲間を絶賛募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
yumenosora.co.jp