【GAS】GASでスクレイピングを試してみる

はじめに

こんにちは、がんがんです。
GWも終わり、なにか作りたいなと思っている今日この頃です。

以前イベント用のLINE Botを作成しました。
gangannikki.hatenadiary.jp

これを応用して自分の生活を助けるためのLINE Botを作成していきます。
今回はGASでスクレイピングの方法を学習していきます。

今回の目標

  1. GASでスクレイピングする方法を取得する

最終目的

  1. GASでスクレイピングしたデータを送信するLINE Botを作成する

コード

github.com

参考記事(まとめ)

www.kotanin0.work

実験

GAS×スクレイピングについて調べているとこちらの記事を見つけました。
GASで簡単WEBスクレイピング!HTMLを簡単にパースできるライブラリParserを使ってみた - Binary Diary

Parserライブラリを使用すれば簡単にスクレイピング出来そうなので、今回はこれを使ってみます。

実験1 Parserライブラリを使ってみる

まずはParserライブラリを使って実際にデータを抽出してみます。

今回は私のブログのタイトル一覧からタイトルのみを抜き出してみたいと思います。


参考記事を真似してとりあえず書いたコードはこんな感じです。
>|javascript|。
function myFunciton() {
var titles = [];
// タイトルを取得
var html = UrlFetchApp.fetch('https://gangannikki.hatenadiary.jp/archive').getContentText();
var entries = Parser.data(html).from('

').to('

').iterate();
for each(var entry in entries){
var title = Parser.data(entry).from('').to('').build();
titles.push(title);
}
Logger.log(titles);
}
|

実行してみた結果はこんな感じです。

[ry/2019/04/27/000000">【Raspberry Pi】Pythonでマインクラフトを遊んでみた【Scratch2MCPI】, ry/2019/04/20/180000">【かごべん】鹿児島の勉強会[かごもく#18、#19]に参加してきました, ry/2019/04/18/170000">【Git】今さらながらGit for Windowsの勉強をしていく, ry/2019/04/15/003000">【LINE BOT】イベントの事務処理作業をLINE Botで便利にしていく【GAS】, …

*でどうにかしようとしましたが失敗でした。

実験2 タイトルのみが取得できるように改良

実験1のときに邪魔な部分まで取得してしまうので改良してみました。

for each(var entry in entries){
    var title = Parser.data(entry).from('>').to('</a>').build();
    titles.push(title);
}

HTMLの最後には必ず>があるということで、>で挟んでみたところ無事に成功しました。

実験3 スプレッドシートに取得したタイトルを出力

最後はシートに出力させていきます。コードは以下の通りです。

function SaveSheet(title) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  spreadsheet.appendRow(title);
}

今回はとりあえず出力出来たらよかったので、最後行に格納しておきます。

まとめ

今回はGASでスクレイピングする方法を勉強していきました。
次は生活お助けBotの実装をしていきます。