ブログ
GoogleスプレッドシートでGAS(Google Apps Script)を使ってスクレイピングする方法
「他社のサイトの値を取得して分析して事業に役立てたい。」
そんな事をお考えの方、多いのではないでしょうか?
ただ、毎日見に行くのは大変です。
今回は、そんな方のためにスプレッドシートでGAS(Google Apps Script)を使ったスクレイピングの方法について記述します。
Googleのサービス(Google スプレッドシート、Google カレンダー、Google ドキュメントなど)内で動くプログラムです。
今回はGoogle スプレッドシートでプラグラムを動かしてみたいと思います。
エクセルでいうVBAみたいなものです。
「スクレイピング」とは、ウェブサイトからHTMLの情報を取得して、取得した情報の中から使いたい情報を抽出する事を言います。
スクレイピングは取得先のHTML構造が変わる可能性があり、取得できなくなる場合があるため監視が必要。
スクレイピングでリクエストを送り続けるなど過度にサーバーにアクセスを送ってしまって逮捕された事例があるそうです。
こちらスクレイピングのルールに関してわかりやすい記事があったのでURLを添付しておきます。
スプレッドシートを開き、「ツール」内「スクリプトエディタ」をクリック。スクリプトエディタを開きます。

ライブラリの隣+ボタンクリック

ライブラリの追加で、スクリプトID入力欄に「1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw」を入力し、検索をクリックし、検索結果が出たら追加を押します。
「Parser」というライブラリを使用します。

こちらで準備は整いました。
今回は、こちらの「https://owlcamp.jp/」トップページの郵便番号を引っ張ってみたいと思います。
デベロッパーツールを使って取得したい箇所のHTMLを確認します。

今回はスプレッドシートの1行目、1列目に値を出力していきます。
参考のGASのコードです。
function myFunction() {
// 取得したいURLを変数 getUrlに格納
var getUrl = "https://owlcamp.jp/";
var html = UrlFetchApp.fetch(getUrl).getContentText('UTF-8');
//fromの括弧内に、取得したい箇所の前の記述を、HTMLを含み入れ込む。
//toの部分に取得したい箇所の前の記述を、HTMLを含み入れ込む。
result = Parser.data(html)
.from('<span class="text">〒')
.to(' 東京都文京区')
.build();
//スプレッドシート に入れ込む
var sheet=SpreadsheetApp.getActiveSheet();
sheet.getRange(1,1).setValue(result);
}
※重要箇所を色つきで記述してあります。値を変更すると取得できる値が変わります。
from('').to('')という記述はHTMLの行に対して対応させることができ、改行などには対応できないようです。
実行をクリックします。

はじめは、権限の確認を行わなければならない。「権限を確認」を押下

続いて出てきた確認で許可をクリック。

実行が完了

値が挿入される

調査していくうちに、先ほど記述した記述方法では取得できないケースがありました。
のページの「資本金」の箇所を取得する際、取得できませんでした。

理由は、このライブラリの「Parser.data(html) .from(‘<span class=”text”>〒‘) .to(‘ 東京都文京区‘) .build();」
という記述はHTMLの行に対して対応させることがしかできないため、
「<p>」という記述は他にもたくさんあり取得箇所を一意に特定できないためでした。

setDirection()という記述を追加することにより.to()の中身が一意に特定できれば取得できる。
今回「1000万」を取得したかったので
「.to(‘円</p>’)」の箇所か一意に特定できたためsetDirection()という記述を入れ込むことにより、取得できた。
function myFunction() {
// 取得したいURL
var getUrl = "https://owlcamp.jp/company/";
var html = UrlFetchApp.fetch(getUrl).getContentText('UTF-8');
//fromの括弧内に、取得したい箇所の前の記述を、HTMLを含み入れ込む。
//toの部分に取得したい箇所の前の記述を、HTMLを含み入れ込む。
result = Parser.data(html)
.setDirection()
.from('<p>')
.to('円</p>')
.build();
//スプレッドシート に入れ込む
var sheet=SpreadsheetApp.getActiveSheet();
sheet.getRange(1,1).setValue(result);
}
こちらで取得できました。
お時間ありましたら、GAS(Google Apps Script)の「Parser」というライブラリを使って、スプレッドシートでスクレイピングを試してみてください。
関連記事
2024.09.30
2024.09.30
2024.04.08