GASを用いて任意のサイトからHTMLのh1タグとh2タグを抽出してスプレッドシートに出力する方法についてまとめています。
この記事の対象
出力先スプレッドシートの用意
初めに、任意の場所にスプレッドシートを作成しておきます。
ここでは作成したスプレッドシートのIDを用いるため予め作成しておきます。スプレッドシートのIDは「************」になります。
https://docs.google.com/spreadsheets/d/************/edit#gid=0
Cheerioライブラリの追加
ここでは、Cheerioというライブラリを使用して、指定されたURLのHTMLを解析しています。
画像の赤枠からライブラリを追加します。
スクリプトIDは下記になります。バージョンは最新が無難です。
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
プログラム
function scrapeWebsite() {
//1---スプレッドシートの指定
id = '***'
var sheet = SpreadsheetApp.openById(id);
//2---サイトのURL
var url = "https://www.hobby-happymylife.com/";
//3---URLを元にHTMLを取得
var response = UrlFetchApp.fetch(url);
var html = response.getContentText();
//4---Cheerioを使用してHTMLを解析
var $ = Cheerio.load(html);
//5---h1タグを取得して、スプレッドシートに書き込む
var h1Elements = $('h1');
sheet.appendRow(['h1タグ']);
h1Elements.each(function() {
sheet.appendRow([$(this).text()]);
});
//6---h2タグを取得して、スプレッドシートに書き込む
var h2Elements = $('h2');
sheet.appendRow(['h2タグ']);
h2Elements.each(function() {
sheet.appendRow([$(this).text()]);
});
}
上記のプログラムはCheerioというライブラリを使用して、指定されたURLのHTMLを解析しています。解析後、スプレッドシートにh1タグとh2タグを書き込んでいます。
以下は解説になります。
//1---スプレッドシートの指定
id = '***'
var sheet = SpreadsheetApp.openById(id);
1の部分ではスプレッドシートを指定しています。ここではIDを用いて指定しています。
シートの取得方法は他にもいくつかあります。後述でURLで指定する方法とアクティブなシートの取得する方法についてまとめています。ご参照下さい。
//2---サイトのURL
var url = "https://www.hobby-happymylife.com/";
//3---URLを元にHTMLを取得
var response = UrlFetchApp.fetch(url);
var html = response.getContentText();
2の部分ではサイトのURLを指定します。次に3の部分の「UrlFetchApp.fetch」ではHTMLのレスポンス(リクエスト)を行っています。その結果をテキストで取得しています。
//4---Cheerioを使用してHTMLを解析
var $ = Cheerio.load(html);
4の部分では「Cheerio」を持ちてHTMLを解析しています。変数に入れています。
//5---h1タグを取得して、スプレッドシートに書き込む
var h1Elements = $('h1');
sheet.appendRow(['h1タグ']);
h1Elements.each(function() {
sheet.appendRow([$(this).text()]);
});
5の部分ではh1タグを取得しています。次に「h1タグ」を行に追加しています。その下に抽出したh1を書き込んでいます。6の部分も同じ仕組みになります。
【結果】
【補足】スプレッドシートの指定方法
アクティブなシートを取得する方法
SpreadsheetApp.getActiveSpreadsheet()
注意点としては、コンテナバインドスクリプトでのみ使用できます。
複数のシートが存在していると、スクリプトから見てシートが分からなくなるので、スプレッドシートに1つしかシートがない場合やブラウザでシートを開いているときにのみ使用すると良いです。
URLで取得する方法
SpreadsheetApp.openByUrl(URL)
URLで取得する場合はスプレッドシートのフルパスを指定する必要があります。