Webサイトからいくつものデータを保存したい時、手作業で行っていると保存の作業だけで日が暮れてしまいますよね。
そんな時はスクレイピングしてデータの保存作業を自動化する方法があります。特に、同じWebサイトから規則性のあるデータを何十個も取得したい時などはスクレイピングすると作業を短時間で終わらせることができます。
今回、Googleドライブのアプリとして利用可能な「Google Apps Script(GAS)」を用いて、Webサイト上の画像データをGoogleドライブに保存してみます。
目次
はじめに、スクレイピング(またはウェブスクレイピング)について。
ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。(中略)ウェブスクレイピングの用途は、オンラインでの価格比較、気象データ監視、ウェブサイトの変更検出、研究、ウェブマッシュアップやウェブデータの統合等である。
引用元:Wikipedia
スクレイピングによって画像データに限らず、サイト上の文字データ、映像、音声云々の情報を抽出できます。ですが、他所様のサーバから情報を抜き出す作業を行うため、下記のような権利の侵害やサーバに負担をかけないなどの配慮が前提となります。
目的は下記のものに限る。
- 個人や家族間で使用する
- Web検索サービスを提供する
- 情報解析をする
対象コンテンツは下記のものに限る。
- 文章(データベースのコンテンツの場合はコンテンツの一部のみに留めておく)
- 画像(同上)
- 音声(パブリックドメイン等のオープンなライセンスの物に限る)
- 映像(同上)
Webサイトへアクセスする時は下記の制限を守る。
- robots.txt/robotsメタタグのアクセス制限内容を守る。
- robots.txtがない場合でも、サーバアクセスの間隔を1秒以上空けるようにする。
- Pragma:No-cacheメタタグが設定されているページはダウンロードしない。
- rel=”nofollow”が設定されているリンクはクローラーで辿らない。
- 会員のみが閲覧できるページの場合は利用規約を守る。
- 情報収集を禁止する措置(ex.アクセス制限)がクローリング時に取られていた場合は、既に取得していた情報を含めて削除する。
Google Apps ScriptはGoogle社提供のJavaScriptライクなプログラミング言語です。GmailやGoogleスプレッドシートなどのGoogleアプリをプログラミングによって操作することができ、数多の機能の一つとしてスクレイピングもできるようです。
クラウド上のサービスとして使用するため、サーバやソフトウェアインストール等の前準備が不要でGoogleアカウントを所持していれば誰でも簡単に始められます。
フリーでありながら高機能なGoogle Apps Scriptですが、一定時間スクリプトを走らせるとタイムオーバーとなってスクリプトが強制終了したり一日に実行可能なスクリプト数が定められていたりなどの制限が設けられています。詳しくはGoogleサービスの割り当てを参照ください。
フリー枠内で利用する際にはそれら制限内で完了させるような工夫が必要となってきます。
さっそく、目的のスクリプトをつくってみます。スクレイピングする画像データは当サイト過去記事のデモページから抽出することとしました。
Googleドライブに下のようなディレクトリ構成を作成します。スタンドアロン形式のGoogle Apps Script「sample」にスクリプトを記述し、「cap」ディレクトリにスクレイピングした画像データを保存します。
「sample」には下記のスクリプトを記述しました。スクレイピングしたいWebサイトにアクセスして目標のデータをBLOB形式で取得してGoogleドライブに保存する流れになっています。
/* 20191104作成 * sample * Google Apps Scriptで簡単スクレイピング記事 * */ function webScraping(){ var url = 'https://haloechoes.com/picslist/pics/brett-zeck-eyfMgGvo9PA-unsplash_800x500.jpg'; var options = { 'method' : 'GET', 'muteHttpExceptions' : true, } var response = UrlFetchApp.fetch(url, options); var filename = 'brett-zeck-eyfMgGvo9PA-unsplash_800x500.jpg'; var fileBlob = response.getBlob().setName(filename); var folder = DriveApp.getFolderById('「cap」フォルダーID'); //フォルダーIDにはGoogleドライブURL欄記載の「cap」フォルダーIDを入力 folder.createFile(fileBlob); }
スクリプトを走らせると、先ほど作成したGoogleドライブの「cap」ディレクトリに指定の画像データが保存されます。
簡単なスクレイピングであればGoogle Apps Scriptを使用するだけでも十分な効果を発揮してくれます。
今回、Google Apps Scriptでスクレイピングするだけでしたが、GoogleドキュメントやGoogleスプレッドシートなどの他のGoogleアプリと連携することも可能です。
Google Apps Scriptを使用すればスクレイピングして抽出したデータをGoogleアプリに格納して情報解析するなどの用途にも展開できそうです。
Google Apps Scriptをこれから始める方におすすめです。そもそもGoogle Apps Scriptって何?というところから始まり、本題で取り上げたスクレイピングの記述方法以外にもGoogle Apps Scriptを使ったGoogleアプリの操作方法なども紹介されています。