【GASでスクレイピング①】UrlFetchAppでサイト内のすべての情報(要素)を抜き出す方法
ついについにIEが使えない時代が訪れるということで、
ウェブスクレイピングを
マクロ+IE → GAS+スプレッドシート
へ変更していく必要があると感じています。
そこで今回は、GASで行うウェブスクレイピングの準備をしていきたいと思います!
ウェブスクレイピングのやり方
まずは、私の行う、ウェブスクレイピングの基本的なやり方について解説していきたいと思います。
私の行うウェブスクレイピングは、
①特定のサイトのHTMLの情報を取り出す
②そこからcalssやidなどの情報から、必要な情報だけ抜き出す
という方法です。
もう少しかみ砕いて説明すると、
①サイトのページの情報をテキストとして取り出し、
②特定の文字列をキーにして、その間の文章を抜き出す
という方法です。
今回は、その中でも
①サイトのページの情報をテキストとして取り出す方法
を紹介していきたいと思います。
コード紹介
では、さっそくコードを紹介していきたいと思います。
コードは非常にシンプルで、
①UrlFetchApp.fetch(url) でurlの情報を抜き出し
②改行でデータを分割、配列に入れ
③セルに張り付けける
という構成になっております。
function myFunction() {
var url = 'https://www.kikkoman.co.jp/homecook/search/recipe/00001014/index.html';
/[1]UrlFetchAppでコード抜き出し
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
//[2]データを改行で分割
var data = html.split("\n");
//setvaluesで貼り付けできるように、2次元配列に変換
var ary = [];
for (var i=0; i<data.length; i++) {
ary.push([data[i]]);
}
//[3]データを一括張り付け
SpreadsheetApp.getActiveSheet().getRange(10,1,ary.length,1).setValues(ary);
}
簡単に説明
コードの内容を簡単に説明していきます。
HTMLの情報の抜き出し
UrlFetchApp.fetch(url);
でresponseに情報を格納し、
e.getContentText()
で、文字列としてエンコードされたHTTP応答のコンテンツを取得します。
// The code below logs the HTML code of the Google home page.
var response = UrlFetchApp.fetch("http://www.google.com/");
Logger.log(response.getContentText());
セルへの転記
上記で得たデータをセルに転記するために、
改行ごとに区切り→配列に代入→セルへ貼り付けを行っています。
そのまま張り付けてもいける場合もありますが、
基本的には、かなり長いテキストデータになりますので、
このやり方が好ましいです。
また、1行ずつセルに書き込むと非常に速度が遅くなりますので、
配列への代入+一括転記をお勧めします。
//[2]データを改行で分割
var data = html.split("\n");
//setvaluesで貼り付けできるように、2次元配列に変換
var ary = [];
for (var i=0; i<data.length; i++) {
ary.push([data[i]]);
}
//[3]データを一括張り付け
SpreadsheetApp.getActiveSheet().getRange(10,1,ary.length,1).setValues(ary);
この際、1次元配列だと行方向への貼り付けができませんので、
2次元配列に変換するのがポイントです。
コメント欄