GAS×スクレイピングで情報収集を自動化する実践術

目次

導入:よくある現場のイライラ

毎朝、決まったサイトを開いて価格や在庫状況をコピペしてExcelに貼り付ける……

この作業、正直「なんで人間がやってるんだろう」と思ったことはありませんか?
著者も以前、競合サイトの価格調査を毎日15分かけて手作業でやっていました。
1ヶ月で約5時間。年間にすると60時間です。

さすがに「これは自動化できるはずだ」と思い立ち、GAS(Google Apps Script)でのスクレイピング自動化に挑戦しました。
結論から言うと、想像以上にシンプルなコードで実現できてしまい、拍子抜けしたくらいです。
この記事では、実際に手を動かして検証した手順と、途中でハマった罠を包み隠さずお伝えします。

GASでWebスクレイピング自動化!
特定サイトの情報をスプレッドシートに自動集約するテクニックとは?
実際に使って分かった本音のメリット

GASの強みは、Googleアカウントさえあれば無料で使えて、スプレッドシートとの連携が驚くほど楽なことです。UrlFetchApp.fetch()という1行でWebページのHTMLを取得できるので、専用のサーバーを立てる必要も、Pythonの環境構築で心が折れることもありません。

実際に毎日決まった時間に自動実行する設定にしてみると、朝出社した時点でスプレッドシートにデータが並んでいる状態になり、これは素直に感動しました。
手作業で15分かかっていた作業が実質0分になったので、体感としては「時間を買った」感覚に近いです。
ただし、後述する罠にハマると逆に余計な時間を溶かすことになるので、そこは正直にお伝えしておきます。

【図解なしでもわかる】実践ステップと検証コード

基本の流れは「HTML取得→必要な部分を抜き出す→スプレッドシートに書き込む」の3ステップです。
GASにはNode.jsのcheerioのような便利なDOM解析ライブラリが標準搭載されていないため、正規表現(match)でゴリゴリ抜き出すのが現実的な手法になります。以下は価格情報を取得するシンプルな例です。

  • コード例:
    function scrapeData() {
    var url = 'https://example.com/item';
    var response = UrlFetchApp.fetch(url);
    var html = response.getContentText();
    var priceMatch = html.match(/class=\"price\">([0-9,]+)円/);
    var price = priceMatch ? priceMatch[1] : '取得失敗';
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('価格一覧');
    sheet.appendRow([new Date(), price]);
    }

ポイントは、正規表現を書く前に対象サイトのHTMLをブラウザの「検証」機能でしっかり確認しておくことです。
ここを飛ばすと、後で「なぜかnullが返ってくる」という沼にハマります。

動かす際のコツとしては、まずLoggerで途中経過(html変数の中身)を出力して確認しながら少しずつ完成させるのが、遠回りに見えて実は一番早いです。

【要注意】私がハマった罠とエラーの回避法

実を言うと、最初に動かした時は見事に文字化けしました。

原因は取得先サイトの文字コードがShift_JISだったことです。
getContentText()を引数なしで呼ぶとUTF-8前提で解釈されてしまうため、response.getContentText('Shift_JIS')のように明示的に指定する必要があります。
ここは公式リファレンスを読んでもサラッとしか触れられておらず、小一時間ハマりました。

もう一つよくあるのが、単純なタイポです。
getSheetByNamegetSheetBynameと打ち間違えて「関数が見つかりません」というエラーに焦った経験もあります。
エラーメッセージの行番号を落ち着いて確認する癖をつけると、こうした凡ミスにはすぐ気づけるようになります。

また、対象サイトの利用規約でスクレイピングが禁止されていないか、アクセス頻度が高すぎて相手サーバーに負荷をかけていないかは、自動化する前に必ず確認してください。

総評:まずはここから試してみてほしい

正直なところ、最初の一歩さえ乗り越えれば、GASによるスクレイピング自動化は「面倒な定型作業」から解放してくれる非常にコスパの良い手段だと感じています。

いきなり本番運用のサイトで試すのではなく、まずは自分のブログや簡単な静的ページを対象にして、UrlFetchAppとmatch()の挙動を体感してみてください。
動いた瞬間の「お、取れた!」という感覚は、ぜひ一度味わってみてほしいです。
そこから時間主導トリガーを設定すれば、あとは寝ている間にもデータが集まる仕組みが完成します。

よかったらシェアしてね!
目次