※このページではアフィリエイト広告を利用しています

【GAS】Webスクレイピングしてスプレッドシートに出力する方法

GAS

GASを用いて任意のサイトからHTMLのh1タグとh2タグを抽出してスプレッドシートに出力する方法についてまとめています。

この記事の対象

  • GASでスクレイピングに挑戦したい方
  • スクレイピングした内容をスプレッドシートに出力したい方
  • Webスクレイピングを自動化したい方
スポンサーリンク
スポンサーリンク

出力先スプレッドシートの用意

初めに、任意の場所にスプレッドシートを作成しておきます。

ここでは作成したスプレッドシートの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で取得する場合はスプレッドシートのフルパスを指定する必要があります。

タイトルとURLをコピーしました