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が表示されました。
GASでhtmlを取得

※繰り返し文などによって同じサイトのhtmlを頻繁に取得すると、そのサイトに負荷がかかって迷惑をかけたり、
 不正なアクセスとしてはじかれるかもしれません。
 適度にアクセスの間隔を開けるようにしましょう。

htmlをパースしてデータを取得しやすくする

htmlのパース

htmlからデータを抽出する為にパーサーを使います。
パーサーとは、html等をプログラムで扱いやすいように解析・変換してくれるものです。
Google Apps Scriptでパースするには「Parserライブラリ」を使うのがおすすめです。

Parserライブラリを追加する

左のメニューから、ライブラリの+ボタンを押下します。
GASにライブラリを追加する

すると「ライブラリの追加」ダイアログが表示されるので、スクリプトIDのところに「1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw」を入力します。
そして検索ボタンを押下するとParserライブラリが表示されますので、追加ボタンを押下します。 GASに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で取得したURLの一覧

抽出したデータをスプレッドシートに出力する

出力先のスプレッドシートを指定する

出力先のスプレッドシートを指定します。

アクティブ(実行するGASと紐づいている)なスプレッドシートに出力する場合は、 SpreadsheetApp.getActiveSpreadsheet()にてスプレッドシートを取得します。

						var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
					

アクティブなスプレッドシートではなく、別のスプレッドシートを指定する場合、 SpreadsheetApp.openById()によりIDを指定してスプレッドシートを取得します。
IDは、スプレッドシートを表示したときのurlに入っているので、これを使います。
「/d」と「/edit」の間の文字です。
スプレッドシートのid

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])
							}
						  }
					

以下のようにスプレッドシートに出力されました。
スプレッドシートに出力