スクレイピングをGASで実現。初心者向けガイドと実践テクニック
Web上の情報を効率的に収集し、ビジネスや個人のプロジェクトに活用したいと考える人が増えています。その中で注目されているのが、Google Apps Script(GAS)を使ったスクレイピングです。GASは無料で使えるGoogleのプログラミング環境で、Google Sheetsとの連携が容易なため、データ収集や管理をシームレスに行えるのが特徴です。
この記事では、GASを使ってスクレイピングを始めるための基本手順から、データの自動収集やGoogle Sheetsへの書き込みといった応用例までをわかりやすく解説します。また、法的・倫理的な注意点やエラーへの対処法についても取り上げ、安全かつ効率的にスクレイピングを行うためのポイントを網羅しています。

GASとは?必要な準備
GAS(Google Apps Script)は、Googleのクラウド上で動作するスクリプト実行環境です。JavaScriptベースで開発されており、Google Workspaceのサービス(Google スプレッドシート、Google ドキュメント、Gmailなど)の操作や自動化を実現できます。
GASの特徴
Google Apps Script(GAS)は、Googleアプリケーション間でデータや操作を連携させ、さまざまな作業を簡単に自動化できる便利なツールです。開発環境はGoogleのウェブブラウザ上に用意されているため、特別なソフトウェアをインストールする必要がなく、すぐに使い始めることができます。
スクリプトの作成や編集は「スクリプトエディタ」を使って行い、その内容はGoogleのクラウド上に保存されるため、どこからでも管理・実行が可能です。また、トリガー機能を活用することで、特定の時間や条件に応じてスクリプトを自動的に実行させることができ、作業の効率化に役立ちます。
GASの用途
Google Apps Script(GAS)は、Googleアプリケーションを自動化するために非常に便利なツールです。たとえば、スプレッドシートのデータを操作したり、Googleフォームを作成して自動返信を設定したり、カレンダーやメールの操作を自動化したりすることが可能です。
さらに、GASを使えばWebアプリケーションを簡単に作成することもできます。また、Webスクレイピングの機能も備えており、特定のウェブサイトからデータを収集するような作業を効率化することができます。これらの機能により、GASはさまざまな用途で活用できる強力なツールとなっています。
GASを使ったスクレイピングに必要な準備
GASを使ってスクレイピングを行うには、まずGoogleアカウントの作成しましょう。そして、 スクレイピングしたデータを保存するためのスプレッドシートを作成します。最後に、スクレイピング処理を簡単にするために、Parserライブラリをインストールします。
スプレッドシートを開き、「拡張機能」>「Apps Script」を選択してスクリプトエディタを開きます。
左側のメニューから「ライブラリ」を選択し、「+」ボタンをクリックします。
スクリプトID を入力し、「検索」をクリックします。
Parserが表示されたら「追加」をクリックします。
GASでスクレイピングを行うメリット
Google Apps Script(GAS)は、簡単に導入できる点が大きな魅力です。GoogleアカウントとWebブラウザがあれば、特別な準備をすることなく、すぐに開発を始めることができます。また、スクレイピングしたデータをGoogleスプレッドシートに直接保存できるため、データ管理や共有も非常に便利です。
さらに、GASは文法がシンプルで、他のプログラミング言語と比べても習得しやすく、実装が簡単です。また、トリガー機能を使えば、定期的にスクリプトを実行することも可能で、データ収集を自動化するのに適しています。こうした特徴により、初心者から上級者まで幅広いユーザーにとって使いやすいツールとなっています。
GASでスクレイピングを行うデメリット
Google Apps Script(GAS)は便利なツールですが、いくつかの制約もあります。他の言語と比べると処理速度が遅く、PythonやPHPのような高性能な言語に比べると、大規模なデータ処理には不向きです。また、Googleスプレッドシートの容量制限があるため、大量のデータを扱う際には制約を感じることがあります。
さらに、GASには実行時間や回数に制限が設けられており、長時間の処理や頻繁な実行が必要な場合には適していません。加えて、JavaScriptを多用する複雑なWebページから情報を取得するのは難しい場合があり、動的なコンテンツに対する対応力は限られています。加えて、公式のサポートが提供されていないため、エラーが発生した際には自分で問題を解決する必要があります。これらの点を考慮して、GASを適切な用途で活用することが重要です。
基本的なスクレイピングの手順
Webスクレイピングの基本的な手順は以下の通りです。
スクレイピング対象の決定
どのWebサイトからどのような情報を収集するかを明確に決めます。例えば、競合他社のリストから情報を取得する場合、Google検索結果から上位企業の情報を取得する場合、官公庁のWebサイトから届け出リストを取得する場合など、目的と対象を具体的にします。
ライブラリの導入
スクレイピングに必要なライブラリを導入します。GASでは、Parserライブラリがよく使用されます。スクリプトエディタの「ライブラリ」から追加できます。また、CheerioライブラリもCSSセレクタを使用できるため人気です。
GASでのプログラミング
スクレイピングを行うためのコードを記述します。
まずはUrlFetchApp.fetch(url) を使用して、対象WebサイトのHTMLデータを取得します。そして取得したHTMLデータから必要な情報を抽出します。Parserライブラリを使用する場合は、Parser.data(content).from(開始キーワード).to(終了キーワード).build(); のように記述します。
from() と to() で指定したキーワード間の文字列を抽出できます。
build() は最初にヒットした部分だけを取得します。
iterate() は条件に合致するものをすべて取得します。
Cheerioライブラリを使用する場合は、jQueryライクに要素を取得できます。
そして、抽出したデータをGoogleスプレッドシートに書き込みます。sheet.getRange().setValues() を使用して、データを書き込むセル範囲と値を指定します。
スクレイピングの実行
スクリプトエディタの「実行」ボタンをクリックしてスクリプトを実行します。必要に応じて、トリガーを設定して自動実行することも可能です。
応用的なスクレイピング技術
応用的なスクレイピング技術には、以下のようなものがあります。
ログインが必要なページからのスクレイピング
多くのWebサイトでは、重要なデータにアクセスするためにはログインが必要となります。ログインが必要なページをスクレイピングするには、クッキーやトークンなどの情報を使用してログイン処理を模倣する必要があります。
具体的には、UrlFetchApp.fetch() 関数を使用してログインページにリクエストを送信し、レスポンスから必要なヘッダー情報(sessionid や authenticitytoken など)を取得します。取得した情報をリクエストヘッダーに設定して再度ログインページにリクエストを送信することで、ログイン状態を維持したまま目的のページにアクセスできます。
JavaScriptで動的に生成されるコンテンツの取得
近年、多くのWebサイトではJavaScriptを使用してコンテンツを動的に生成しています。GASの UrlFetchApp.fetch() 関数は、JavaScriptの実行結果を待たずにHTMLを取得するため、動的に生成されるコンテンツを取得できません。このような場合は、headlessブラウザを使用するなどの方法があります。
headlessブラウザとは、画面表示を行わずにWebページにアクセスできるブラウザのことです。headlessブラウザを使用することで、JavaScriptの実行結果を取得することができます。
APIの利用
一部のWebサイトでは、APIを提供しており、APIを利用することでより効率的にデータを取得できます。APIを利用する場合は、APIの仕様に従ってリクエストを送信する必要があります。
大規模なスクレイピング
大量のデータをスクレイピングする場合は、GASの処理速度やスプレッドシートの容量制限に注意する必要があります。このような場合は、より高速なプログラミング言語(Pythonなど)やデータベースを使用する必要があります。
スクレイピング対策への対応
一部のWebサイトでは、スクレイピングを防止するための対策を講じています。スクレイピング対策を回避するには、UserAgentの設定やIPアドレスのローテーションなどの方法があります。
GAS以外のスクレイピングツール
GAS以外にも、Webスクレイピングを行うためのツールは多数存在します。たとえば、Pythonは スクレイピングに特化したライブラリが豊富に存在し、大規模なスクレイピングにも対応できます。また、Node.jsもJavaScriptでスクレイピングを行うことができ、GASと同様の文法で記述できるため人気です。他にも専門の業者が提供するスクレイピングサービスを利用する方法もあります。
GASは、手軽にスクレイピングを行うには便利なツールですが、複雑なスクレイピングや大規模なスクレイピングには向いていません。 より高度なスクレイピングを行う場合は、Pythonなどのプログラミング言語や専用のスクレイピングツールを利用することを検討してください。
スクレイピングにおける法的・倫理的な注意点
Webスクレイピングは便利な技術ですが、法的・倫理的な問題を引き起こす可能性があるため、注意が必要です。
1. 各種法律への抵触
スクレイピング自体は違法ではありませんが、実行方法によっては法的問題に発展する可能性があります。まず、著作権法に関しては、Webサイト上のコンテンツには著作権があり、これを無断で複製したり頒布したりすることは法律違反となります。特に、スクレイピングで取得したデータを商業目的で使用する場合には、慎重な対応が求められます。
また、不正アクセス禁止法にも注意が必要です。Webサイトの管理者の意図に反する形でアクセスし、情報を取得する行為は、不正アクセスとみなされる可能性があります。さらに、大量のリクエストを送信してWebサイトのサーバーに過剰な負荷をかけ、サービス提供に支障をきたした場合には、偽計業務妨害罪に該当する可能性もあります。これらの法律を十分に理解し、適切な範囲内でスクレイピングを行うことが重要です。
2. Webサイトの利用規約
スクレイピングを行う前に、対象サイトの利用規約を必ず確認してください。
多くのWebサイトでは、スクレイピングを明示的に禁止している場合があります。禁止されているサイトをスクレイピングすると、法的問題に発展する可能性があります。
また、スクレイピングを許可している場合でも、アクセス頻度やデータの使用範囲などに制限を設けている場合もあります。利用規約に従ってスクレイピングを行うようにしましょう。
3. サーバーへの負荷
スクレイピングを行う際には、サーバーに過度な負荷をかけないように配慮する必要があります。短時間に大量のリクエストを送信すると、サーバーに負荷がかかり、Webサイトの表示速度が低下したり、サーバーダウンを引き起こす可能性があります。これは、Webサイトの管理者だけでなく、他の利用者にも迷惑をかける行為です。
アクセス頻度を調整したり、間隔を空けてリクエストを送信したりするなどの対策を講じることが重要です。
4. 個人情報の取り扱い
Webサイトから個人情報をスクレイピングする場合は、個人情報保護法に注意する必要があります。
個人情報保護法では、個人情報の取得、利用、提供などについて、適切な手続きと安全管理措置が求められています。個人情報をスクレイピングする場合は、これらの要件を満たしていることを確認する必要があります。特に、本人の同意を得ずに個人情報を取得することは違法です。
5. 倫理的な配慮
上記のような法的問題に加えて、倫理的な観点からも配慮が必要です。スクレイピングは、Webサイトの管理者や他の利用者に迷惑をかける可能性があります。また、スクレイピングを行う目的や方法によっては、社会的な批判を受ける可能性もあります。
スクレイピングを行う際には、目的が社会的に許容されるものであるか、対象サイトの利用規約に違反していないか、サーバーに過度な負荷をかけていないか、プライバシーや著作権を侵害していないかを確認しましょう。
GASスクレイピングにおけるよくあるエラーと解決方法
GASを使ったスクレイピングでは、様々なエラーが発生する可能性があります。ここでは、よくあるエラーとその解決方法について、ソースを参考にしながら解説します。
1. サーバーエラー (HTTPステータスコード)
スクレイピングを実行すると、対象サーバーからHTTPステータスコードが返されます。たとえば、200番台は成功ですが、400番台や500番台はエラーを示します。
403 Forbidden
スクレイピングが禁止されている、またはアクセス権限がない可能性があります。対象サイトのrobot.txtを確認し、スクレイピングが許可されているかを確認しましょう。許可されている場合でも、アクセス頻度を調整する必要があるかもしれません。
429 Too Many Requests
アクセス頻度が高すぎる可能性があります。Utilities.sleep() 関数を使用して、リクエスト間隔を調整しましょう。
500 Internal Server Error
サーバー側の問題が発生している可能性があります。時間をおいて再度試すか、対象サイトの管理者に問い合わせてみましょう。
2. データ取得エラー
要素が見つからない
指定したHTML要素が見つからない場合、スクレイピング処理が失敗します。CSSセレクタやタグ指定が正しいか確認しましょう。特に、class名やid名に空白が含まれている場合は注意が必要です。また、Webサイトの構造が変更された可能性もあります。デベロッパーツールを使って最新のHTML構造を確認しましょう。
JavaScriptで動的に生成されるコンテンツ
UrlFetchApp.fetch()関数は、JavaScriptの実行結果を取得できないため、動的に生成されるコンテンツは取得できません。Headlessブラウザなどの別のツールを使用する必要があるかもしれません。
データ形式の不一致
取得したデータが期待する形式と異なる場合、エラーが発生する可能性があります。Parser.data() 関数や Cheerio.load() 関数で適切なデータ形式を指定しましょう。必要に応じて、正規表現などを用いてデータの整形を行う必要があるかもしれません。
3. GASの実行制限
GASには、スクリプトの実行時間や回数、APIの呼び出し回数などに制限があります。大量のデータをスクレイピングする場合や、処理に時間がかかる場合は、これらの制限に注意する必要があります。
まずは、APIの呼び出し回数を減らすようにコードを最適化しましょう。また、データを分割して処理するなどの工夫も有効です。有料プランへのアップグレードを検討するのも良いかもしれません。
4. ライブラリのエラー
バージョン不一致
使用しているライブラリのバージョンが古い、または互換性がない場合、エラーが発生する可能性があります。最新バージョンに更新するか、互換性のあるバージョンを使用しましょう。
ライブラリIDの誤り
ライブラリを導入する際に、スクリプトIDを間違えるとエラーが発生します。正しいスクリプトIDを入力しているか確認しましょう。
5. スプレッドシートの操作エラー
シート名やセル範囲の誤り
スプレッドシートにデータを書き込む際に、シート名やセル範囲を間違えるとエラーが発生します。正しいシート名やセル範囲を指定しているか確認しましょう。
データ型の不一致
スプレッドシートに書き込むデータの型が、セルの書式と一致しないとエラーが発生する可能性があります。必要に応じて、データ型を変換する処理を追加しましょう。
6. デプロイの停止
GASではデプロイが正しく動作しないことがあります。この場合は、ソースコードをコピーして新しいスクリプトに貼り付ける方法が有効です。
上記以外にも、様々なエラーが発生する可能性があります。エラーメッセージをよく読み、原因を特定することが重要です。また、ログ出力 (Logger.log()) を活用して、処理の状況を確認するのも有効です。
一般的なトラブルシューティング
トラブルが発生した際には、いくつかの基本的な方法で原因を特定し、解決することができます。まず、エラーメッセージを確認することが重要です。エラーメッセージには、問題の原因や解決のヒントとなる情報が含まれている場合があります。
次に、Logger.log()関数を使用して、変数の値や処理の状況をログに出力することで、エラーが発生している箇所を特定しやすくなります。また、Google Apps Script(GAS)のスクリプトエディタにはデバッガー機能が備わっており、この機能を使うことでコードをステップ実行したり、実行中の変数の値を確認することができます。これにより、エラーの原因をより詳細に把握することが可能です。
さらに、エラーメッセージやエラーコードをWeb検索することも有効です。GASに関する情報はインターネット上で多く共有されており、同様の問題に直面した他のユーザーの解決策を見つけられる場合があります。これらの方法を組み合わせて活用することで、効率的にトラブルを解消できます。
GASスクレイピングを次のステップに進める方法
GASでのスクレイピングの理解を深めるステップと、そのステップで役立つ情報、注意点などを解説します。
1. より複雑なWebサイトへの対応
静的なWebサイトからデータを取得できる状態になったら、次のステップとしてJavaScriptで動的に生成されるコンテンツを含む、より複雑なWebサイトからのスクレイピングに挑戦しましょう。
具体的な方法としてはHeadlessブラウザの導入があります。GAS単体ではJavaScriptの実行結果を取得できないため、Headlessブラウザを導入する必要があります。
Headlessブラウザは、GUIを持たないブラウザで、バックグラウンドでJavaScriptを実行し、レンダリングされたHTMLを取得できます。PuppeteerやPlaywrightなどのライブラリがGASで利用可能です。これらのライブラリを利用することで、GASからHeadlessブラウザを制御し、動的なWebサイトのスクレイピングが可能になります。
ただし、Headlessブラウザの導入は、GAS単体でスクレイピングを行うよりも複雑な設定が必要になります。
また、対象のWebサイトがAPIを提供している場合は、APIを利用することで、より効率的にデータを取得できる場合があります。
APIは、Webサイトの機能を外部から利用するためのインターフェースです。APIを利用することで、HTMLを解析する必要がなくなり、データ取得処理が簡素化されます。多くのWebサービスでは、開発者向けにAPIドキュメントを提供しています。
2. スクレイピング処理の効率化
次のステップとしては 処理速度の向上、API呼び出し回数の削減など、スクレイピング処理を効率化してみましょう。
API呼び出し回数の削減
GASはスプレッドシートやドキュメントを操作するためのAPI呼び出しが可能です。しかし、頻繁なAPI呼び出しは実行速度に影響を与えるため、回数を減らすことが重要です。
スプレッドシートへのアクセス回数を最小限に抑え、一度にまとめてデータを取得・書き込みするようにしましょう。また、同じ値を繰り返し取得するのではなく、変数に格納して再利用することで、API呼び出し回数を削減できます。
大量データの分割処理
GASでは大量のデータを一気に処理するとパフォーマンスが低下する可能性があります。データを分割して処理することで、パフォーマンスの低下を防ぎ、実行時間制限に抵触するリスクを減らすことができます。
適切なデータ構造の利用
処理内容に応じて、配列やオブジェクトなどの適切なデータ構造を利用することで、コードの可読性と処理効率を向上させることができます。
非同期処理
GASでは、非同期処理を利用することで、処理の待ち時間を削減し、効率を向上させることができます。ただし、非同期処理は複雑なため、ある程度のプログラミング経験が必要です。
3. エラー処理の充実
基本的なエラー処理(try-catch)ができるようになったら、より詳細なエラー処理を実装し、スクリプトの安定性を向上させましょう。
エラーの種類に応じた処理
try-catchで捕捉したエラーの種類に応じて、適切な処理を行うようにしましょう。例えば、HTTPステータスコードが403の場合は、スクレイピングを中止し、ログにエラーメッセージを出力するなどの処理が考えられます。
エラーログの出力
エラー発生時の状況を詳細に記録するために、エラーメッセージだけでなく、発生日時、処理対象のURL、スタックトレースなどの情報もログに出力するようにしましょう。これにより、エラーの原因究明が容易になります。
リトライ処理
一時的なネットワークエラーなど、リトライすることで解決する可能性のあるエラーに対しては、リトライ処理を実装しましょう。リトライ回数や間隔を適切に設定することで、スクリプトの安定性を向上させることができます。
4. 外部ツールやサービスとの連携
GASとスプレッドシートのみを利用している状態であれば、他のGoogleサービスや外部ツールと連携し、スクレイピングの利便性を向上させてみましょう。
Googleサービスとの連携
GASはGoogleスプレッドシート以外にも、GmailやGoogleカレンダーなどの他のGoogleサービスとも連携が可能です。スクレイピング結果をGmailで通知したり、Googleカレンダーに予定を追加したりするなどの処理を自動化できます。
外部ツールとの連携
GASは、ZapierやIFTTTなどの外部サービスと連携することで、さらに多くの機能を実現できます。クレイピングしたデータをSlackに通知したり、データベースに保存したりするなど、様々な自動化処理を構築できます。
Webアプリケーション化
GASで作成したスクレイピング処理をWebアプリケーションとして公開することで、誰でも簡単に利用できるツールを作成できます。HTMLやCSSを用いて、ユーザーインターフェースを構築することができます。
注意点としては、外部サービスとの連携には、それぞれのサービスのAPIキーや認証情報が必要になる場合があります。また、セキュリティに配慮し、APIキーなどの機密情報は適切に管理しましょう。
5. フレームワークの導入 (上級者向け)
GASの標準機能のみでスクレイピング処理ができるようになったら、フレームワークを導入し、より大規模で複雑なスクレイピング処理を効率的に開発することもできます。
GAS用のフレームワークとして、claspやGoogle Apps Script Starter Kitなどがあります。これらのフレームワークは、コードの構造化、モジュール化、テストの自動化などを支援し、開発効率を向上させることができます。
まとめ
GASでのスクレイピングは、比較的簡単にWebサイトからデータを取得できる便利な技術です。 上記のようなステップを踏むことで、さらに高度なスクレイピング処理を実装し、様々な業務を効率化できます。 ただし、スクレイピングを行う際には、法的・倫理的な問題点に十分注意し、責任ある行動を心がけましょう。
情報収集 SaaS のインサイツは、業務プロセスにあわせて、あらゆる情報やデータを収集・活用するお手伝いをしています。競合や業界の情報収集はもちろん、価格データや SNS データ、リスク情報、中央官庁の通知通達やドキュメント、採用情報など、どんな情報でも最適な形で手元に届けることが出来ます。
お問い合わせ
Station にご関心をお寄せいただきありがとうございます。以下のフォームよりお問い合わせください。
