【GAS】Google Apps Scriptを使って簡単にスクレイピングを始めよう!


今回は、GASでスクレイピングをする方法を見ていきます。
スクレイピングとは、Webページから特定の情報を抽出する技術のことです。

この記事では、Google Apps Script(GAS)を使って簡単にスクレイピングを行う方法について紹介するんだにゃ。
早速見ていくんだにゃ。
スクレイピングとは?
スクレイピングは、Webページ上の特定の要素を抽出し、それを利用してデータを収集する技術を言います。
例えば、価格比較サイトは、さまざまなオンラインショップから商品情報や価格をスクレイピングして、一覧で表示していますね。
スクレイピングは、最新情報を継続的に取得したり、大量のデータを効率的に収集したりするために非常に便利な技術です。

ただし、スクレイピングは相手先のウェブサイトのサーバーに負荷をかけることがあります。そのため、適切な間隔を空けてリクエストを送るなど、サーバーへの負荷を軽減する工夫が必要なので、注意して行いましょう!
GASでのスクレイピング
スクレイピンを行う手順
GASでスクレイピングをする場合、次の手順を踏むことになります。
- HTMLを取得する
- 取得したHTMLを解析し、欲しい部分を取得する

スクレイピングのやり方は色々ありますが、今回は、HTMLを取得するのに「UrlFetchApp」を使い、解析には「Cheerio」というライブラリを使っていきます。
UrlFetchAppを使ってHTMLを取得
まずは、対象のWebページのHTMLを取得するために、UrlFetchApp
を使います。
以下のように記述します。
//メイン部分
function myFunction() {
const url = "https://www.sample.co.jp/" //ここにスクレイピングをしたいURLを入れる
console.log(fetchHtml(url)) //コンソールに表示
}
//HTMLを取得する関数:引数に対応のURLを渡す
function fetchHtml(url) {
var response = UrlFetchApp.fetch(url);
var html = response.getContentText();
return html;
}

好きなサイトのURLを対象にすれば、そのサイトのHTMLを取得できるんだにゃ。色々試して欲しいんだにゃ。
Cheerioを使ってスクレイピングする

CheerioはjQueryのようにHTML要素を選択・操作することができるライブラリです。
まずはライブラリを取得して使えるようにする必要があります。
まず、GASエディタの「ライブラリ」ウィンドウを開き、次のCheerioのスクリプトIDを入力して、ライブラリを追加してください。
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
Cheerioを使ってスクレイピングを行う例を以下に示します。この例では、url
からHTMLを取得し、<a>
タグのテキストを抽出しています。
//メイン部分
function myFunction() {
const url = "https://www.sample.co.jp/";
const html = fetchHtml(url);
console.log(extractWithCheerio(html))
}
//HTMLを取得
function fetchHtml(url) {
var response = UrlFetchApp.fetch(url);
var html = response.getContentText();
return html;
}
//全てのaタグ要素を取得する
function extractWithCheerio(html) {
var $ = Cheerio.load(html);
// aタグ要素を取得
var elements = $('a');
// aタグ要素のテキストを格納する配列
var texts = [];
// 各aタグ要素のテキストを配列に追加
elements.each((_, element) => {
texts.push($(element).text());
});
return texts;
}

これでaタグを全て引き出せたんだにゃ。
次に、クラス名から一覧を取得する書き方を見ていくんだにゃ。基本は同じで「.」をつけるとクラス名になるんだにゃ。
//メイン
function myFunction() {
const url = "https://www.sample.co.jp/";
const html = fetchHtml(url);
const className = 'target_class_name';
console.log(extractElementsByClassWithCheerio(html, className));
}
//HTMLを取得
function fetchHtml(url) {
var response = UrlFetchApp.fetch(url);
var html = response.getContentText();
return html;
}
//クラス名から該当するテキストを取得
function extractElementsByClassWithCheerio(html, className) {
var $ = Cheerio.load(html);
// 特定のクラス名を持つ要素を取得
var elements = $('.' + className);
// 要素のテキストを格納する配列
var elementTexts = [];
// 各要素のテキストを配列に追加
elements.each(function(index, element) {
elementTexts.push($(element).text());
});
return elementTexts;
}
まとめ
この記事では、GASを使ってスクレイピングを行う方法として、「UrlFetchApp」と「Cheerio」を使った方法を紹介しました。他にも色々な方法がありますので、順次紹介できたらいいなと思っています。
GASを活用すれば、Web上の情報収集を効率的かつ簡単に行うことができますが、さらにGASの他の機能と組み合わせれば、例えばスクレイピングしたデータをGoogleスプレッドシートに保存したり、定期的にスクレイピングを実行するようにスケジュール設定したりすることもできます。

最後にスプレッドシートにデータを保存する例を挙げておきますね。
function saveToSpreadsheet(data) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.appendRow(data);
}
function main() {
var url = 'https://example.com';
var html = fetchHtml(url);
var $ = Cheerio.load(html);
var title = $('h1').text();
// スプレッドシートにデータを保存
saveToSpreadsheet([title]);
}
これで、スクレイピングしたデータをGoogleスプレッドシートに保存できるようになりました。
GASを使ってスクレイピングを行う方法は多岐にわたるため、自分のニーズに合わせてカスタマイズしてください。
GASを活用すれば、Web上の情報収集をより効率的かつ簡単に行うことができますよ。