Webスクレイピング(クローラー、クローリング)と言えば、Pythonを使ったスクレイピングが人気ですよね。
ただ、もう少し手軽に利用したい場合、GAS(Google Apps Script)を使ったWebスクレイピングの方が適している場合もあります。
そこで当記事では、
- PythonとGASスクレイピングの違い
- GASでWebスクレイピングする方法・手順
というテーマで解説します。
PythonとGASスクレイピングの違い
まず最初に、WebスクレイピングにおけるPythonとGASの違いについて解説します。
両者の違いを理解して、適切な技術選定を行いましょう。
GASを使うメリット
まずはGAS(Google Apps Script)を使ってWebスクレイピングをするメリットを解説します。
Googleプロダクトとの親和性が高い
ご存じの方も多いと思いますが、GASはGoogleプロダクトとの親和性が高いです。
特にAPI接続などする必要もなく、GoogleスプレッドシートやGmailと連携ができてしまいます。
そのためスクレイピングデータをそのままスプレッドシートやGmailに添付したり、逆にスプレッドシートやGmailのデータをもとにしてスクレイピングすることもできます。
開発環境を用意する必要がない
GASはGoogleのサーバー上で動作します。そのため特にこちら側で開発環境を整える必要がありません。
Pythonの場合は色々パッケージをダウンロードする必要があるため、プログラミング初心者にはややハードルが高くなっています。
トリガーで簡単に定期実行できる
GASではGUIによる操作だけでトリガーを設定することができます。
「1日1回定期的にスクレイピングを実行」などの設定が簡単にできるのは、GASを使ってスクレイピングをする大きなメリットと言えるでしょう。
GASのトリガー設定についてはこちらの記事で詳しく解説しています。
Pythonを使うメリット
続いてPythonを使ってWebスクレイピングをするメリットを解説します。
大規模データを処理できる
Pythonを使う1番のメリットはまさしくこれ。
「処理が速い」「実行時間に制限がない(GASは6分で強制終了)」など、大規模なデータでも気にすることなく処理を実行できます。
大規模サイトの一括スクレイピングなどはPythonの方が良いでしょう。
画面操作ができる
Pythonは画面操作やリンク遷移など、クローラのような挙動をしながらスクレイピングを実行できます。
またアカウント情報があればログインを突破することもできるため、マイページなどからデータを取得したい場合にもPythonの方が良さそうです
分析系ライブラリを組み合わせられる
こちらは少数派でしょうが、Pythonには統計や機械学習系のライブラリが豊富です。
「Pythonでスクレイピングしたデータをそのまま分析にかけて保存」なんてこともできます。
分析も一緒に行い人は、Pythonの方が使い勝手が良いかもしれません。
Pythonを使ったWebスクレイピングについてはこちらの記事で解説しています。
GASでWebスクレイピングする方法は2つ
ここからはGASを使ってWebスクレイピングする方法を紹介します。
GASを使ったスクレイピング方法は大きく2つの種類があるので、それぞれどのような方法でスクレイピングできるのか簡単に紹介します。
IMPORTXML関数を使う(スプレッドシート)
1つ目の方法がスプレッドシートのIMPORTXML関数を使ってスクレイピングする方法です。
厳密にはGASではなくスプレッドシート関数なのですが、その後の処理はGASで行うこともあると思うのでここで紹介しました。
IMPORTXML関数ではURLとXpathを指定することで、該当箇所のHTMLデータを返り値として受け取ることができます。
IMPORTXML関数について詳しくはこちらの記事で解説しています。
UrlFetchAppクラスを使う(GAS)
2つ目の方法が、GASのUrlFetchAppクラスを使ってスクレイピングする方法です。
基本的にはPythonと同じ手順でスクレイピングできるので、一般的にスクレイピングというとこちらのやり方を指すことが多いでしょう。
当記事でも、こちらのスクレイピング方法について深ぼって解説します。
UrlFetchAppを使ったスクレイピング手順
UrlFetchAppを使ったWebスクレイピングの手順について解説します。
- URLを設定する
- HTMLテキストデータを取得
- 必要なデータだけスクレイピング
それぞれの工程と使用するメソッドについて解説しますね。
URLを設定する
まずは取得したいページのURLをテキストデータで指定します。
間違ったURLを設定してしまうと正しく実行されないので、正確にURLを設定できているか注意しましょう。「/(スラッシュ)」が抜けているなどのミスはよく起こります。
//変数urlに取得するページのURLを格納
var url = "https:/monoblog.jp"
HTMLテキストデータを取得
続いては指定したURLのページにアクセスして、HTMLのテキストデータを取得します。
HTMLデータの取得には、UrlFetchAppの各メソッドを使えばOKです。
以下のプログラム
//変数htmlにURLで指定したページのHTMLを格納
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
必要なデータ以外を削る
最後に取得したHTMLのテキストデータから、必要なデータのみを抜き出すために、いらない文字列を除去します。
文字列の除去には「slice」「substr」「substring」「replace」メソッドなどがおすすめです。これらのメソッドとindexOfメソッドと組み合わせれば、だいたいの不要な文字列は除去できるでしょう。
sliceメソッド
substrメソッド
substringメソッド
replaceメソッド
すぐに動くサンプルコード
これまでに説明した内容ですぐに動くサンプルコードを作りました。
良かったら実際にお手元で遊んでみてくださいな。
サンプルコード
function myFunction() {
/////①URLの指定/////
var url = "https://monoblog.jp";
/////②HTMLテキストの取得/////
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
/////③タイトルタグの抽出/////
//開始文字列の指定
var start_str = "<title>";
var start_num = html.indexOf(start_str)+start_str.length;
//終了文字列の指定
var end_str = "</title>";
var end_num = html.indexOf(end_str);
//タイトルタグをスクレイピング
var title = html.substring(start_num, end_num);
//結果の出力
Logger.log(title);
}
実行結果
monoblog|オプティマイザーの人生最適化ブログ
ログインが必要なサイトをスクレイピングするには?
スクレイピングをしているとログインが必要なサイトに遭遇することもあるでしょう。
GASでログインをするにはログインリクエストの機能を実装する必要があります。
下記の記事で具体的な実装方法をサンプルコード付きで解説しているので、良かったら参考にしてください。
まとめ
今回は「PythonとGASスクレイピングの違い」「GASでWebスクレイピングする方法・手順」について解説しました。
GASでスクレイピングするメリットはなんと言っても手軽さです。
「小規模データのスクレイピングをしたい」「お試しでスクレイピングプログラムを作ってみたい」という人は、ぜひGASを使ってスクレイピングしてみてください。
では、また。