GASでhtmlを取得して解析してスプレッドシートに書き込む
サイトのhtmlを取得する
スプレッドシートからGoogle Apps Scriptを作成する
まずはスプレッドシートからスクリプトを作成します。
やり方がわからない人はこちらを参考にしてください。
htmlを取得するコード
UrlFetchApp.fetchを使用してサイトのhtmlを取得できます。
本ページのhtmlを取得してコンソールに表示してみます。
function myFunction() {
var url = "https://web.biz-prog.net/gas/gethtml.html";
var html = UrlFetchApp.fetch(url).getContentText();
console.log(html);
}
コンソールログ欄に、取得したhtmlが表示されました。

※繰り返し文などによって同じサイトのhtmlを頻繁に取得すると、そのサイトに負荷がかかって迷惑をかけたり、
不正なアクセスとしてはじかれるかもしれません。
適度にアクセスの間隔を開けるようにしましょう。
htmlをパースしてデータを取得しやすくする
htmlのパース
htmlからデータを抽出する為にパーサーを使います。
パーサーとは、html等をプログラムで扱いやすいように解析・変換してくれるものです。
Google Apps Scriptでパースするには「Parserライブラリ」を使うのがおすすめです。
Parserライブラリを追加する
左のメニューから、ライブラリの+ボタンを押下します。

すると「ライブラリの追加」ダイアログが表示されるので、スクリプトIDのところに「1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw」を入力します。
そして検索ボタンを押下するとParserライブラリが表示されますので、追加ボタンを押下します。

Parserライブラリでデータを抽出する
Parserライブラリの使い方
Parserライブラリでは、from()で指定した文字と、to()で指定した文字の、
間に含まれる文字を抽出します。
例えば、
var data = Parser.data(html).from('<li>').to('</li>').build();
<li>タグの中の文字列を抽出します。また、上記の指定をすることで一致するデータが複数件取得されますが、 先頭の1件の文字だけ抽出したい場合は
.build()を使用し、
全件を取得するなら.iterate()を使用します。
リンク(アンカータグ)のURLを取得するサンプル
リンクのurlを取得してみます。
以下のコードを入力して実行してください。
function myFunction() {
var url = "https://web.biz-prog.net/gas/gethtml.html";
var html = UrlFetchApp.fetch(url).getContentText();
var parse = Parser.data(html);
var links = parse.from('<a href="').to('"').iterate();
console.log(links);
}
実行後、コンソールに抽出したurlの一覧が表示されます。

抽出したデータをスプレッドシートに出力する
出力先のスプレッドシートを指定する
出力先のスプレッドシートを指定します。
アクティブ(実行するGASと紐づいている)なスプレッドシートに出力する場合は、
SpreadsheetApp.getActiveSpreadsheet()にてスプレッドシートを取得します。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
アクティブなスプレッドシートではなく、別のスプレッドシートを指定する場合、
SpreadsheetApp.openById()によりIDを指定してスプレッドシートを取得します。IDは、スプレッドシートを表示したときのurlに入っているので、これを使います。
「/d」と「/edit」の間の文字です。

IDを使って以下のようにコードを書きます。
var spreadsheet = SpreadsheetApp.openById('********************************');
出力先のシートを指定する
上でスプレッドシートを取得しましたが、次はシートを取得します。
新規にシートを作成して出力する場合は、spreadsheet.insertSheet()を使用します。
var sheet = spreadsheet.insertSheet('sheet1');
シートを指定して出力する場合は、
spreadsheet.getSheetByName()を使用します。
var sheet = spreadsheet.getSheetByName('sheet1');
データを出力する
取得したスプレッドシート・シートに対してデータを出力します。
sheet.getRangeでセルを特定し、setValueで値を出力します。
以下、Parserライブラリで複数取得したデータを書き込むサンプルです。
function myFunction() {
//ページのhtmlを取得
var url = "https://web.biz-prog.net/gas/gethtml.html";
var html = UrlFetchApp.fetch(url).getContentText();
//htmlをパースする
var parse = Parser.data(html);
//リンクのurlの一覧を取得する
var links = parse.from('<a href="').to('"').iterate();
console.log(links);
//アクティブなスプレッドシートの「sheet1」のシートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('sheet1');
//アクティブのスプレッドシートに出力する
for(var i = 1; i <= links.length; i++){
sheet.getRange(i,1).setValue(links[i - 1])
}
}
以下のようにスプレッドシートに出力されました。

