【GAS】Google Apps ScriptでWebスクレイピングする方法

2020-03-02

【GAS】Google Apps ScriptでWebスクレイピングする方法
mono
mono
こんにちは、monoです。

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のトリガー設定についてはこちらの記事で詳しく解説しています。

【GAS】Google Apps Scriptトリガーの種類と使い方を徹底解説!

Pythonを使うメリット

続いてPythonを使ってWebスクレイピングをするメリットを解説します。

大規模データを処理できる

Pythonを使う1番のメリットはまさしくこれ。

「処理が速い」「実行時間に制限がない(GASは6分で強制終了)」など、大規模なデータでも気にすることなく処理を実行できます。

大規模サイトの一括スクレイピングなどはPythonの方が良いでしょう。

画面操作ができる

Pythonは画面操作やリンク遷移など、クローラのような挙動をしながらスクレイピングを実行できます。

またアカウント情報があればログインを突破することもできるため、マイページなどからデータを取得したい場合にもPythonの方が良さそうです

分析系ライブラリを組み合わせられる

こちらは少数派でしょうが、Pythonには統計や機械学習系のライブラリが豊富です。

「Pythonでスクレイピングしたデータをそのまま分析にかけて保存」なんてこともできます。

分析も一緒に行い人は、Pythonの方が使い勝手が良いかもしれません。

Pythonを使ったWebスクレイピングについてはこちらの記事で解説しています。

Python3のBeatifulSoup4を使ってWebスクレイピングする方法【7ステップ】

GASでWebスクレイピングする方法は2つ

ここからはGASを使ってWebスクレイピングする方法を紹介します。

GASを使ったスクレイピング方法は大きく2つの種類があるので、それぞれどのような方法でスクレイピングできるのか簡単に紹介します。

IMPORTXML関数を使う(スプレッドシート)

=IMPORTXML(URL, Xpath)

1つ目の方法がスプレッドシートのIMPORTXML関数を使ってスクレイピングする方法です。

厳密にはGASではなくスプレッドシート関数なのですが、その後の処理はGASで行うこともあると思うのでここで紹介しました。

IMPORTXML関数ではURLとXpathを指定することで、該当箇所のHTMLデータを返り値として受け取ることができます。

IMPORTXML関数について詳しくはこちらの記事で解説しています。

IMPORTXML関数の使い方!スプレッドシートでWebスクレイピングしよう!

UrlFetchAppクラスを使う(GAS)

2つ目の方法が、GASのUrlFetchAppクラスを使ってスクレイピングする方法です。

基本的にはPythonと同じ手順でスクレイピングできるので、一般的にスクレイピングというとこちらのやり方を指すことが多いでしょう。

当記事でも、こちらのスクレイピング方法について深ぼって解説します。

UrlFetchAppを使ったスクレイピング手順

UrlFetchAppを使ったWebスクレイピングの手順について解説します。

  • URLを設定する
  • HTMLテキストデータを取得
  • 必要なデータだけスクレイピング

それぞれの工程と使用するメソッドについて解説しますね。

URLを設定する

まずは取得したいページのURLをテキストデータで指定します。

間違ったURLを設定してしまうと正しく実行されないので、正確にURLを設定できているか注意しましょう。「/(スラッシュ)」が抜けているなどのミスはよく起こります。

 command
//変数urlに取得するページのURLを格納
var url = "https:/monoblog.jp"

HTMLテキストデータを取得

続いては指定したURLのページにアクセスして、HTMLのテキストデータを取得します。

HTMLデータの取得には、UrlFetchAppの各メソッドを使えばOKです。

以下のプログラム

 command
//変数htmlにURLで指定したページのHTMLを格納
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');

必要なデータ以外を削る

最後に取得したHTMLのテキストデータから、必要なデータのみを抜き出すために、いらない文字列を除去します。

文字列の除去には「slice」「substr」「substring」「replace」メソッドなどがおすすめです。これらのメソッドとindexOfメソッドと組み合わせれば、だいたいの不要な文字列は除去できるでしょう。

sliceメソッド

slice(開始位置,終了位置);

substrメソッド

substr(開始位置,切り出す長さ);

substringメソッド

substring(開始位置,終了位置);

replaceメソッド

replace(検索文字列, 置換文字列);

すぐに動くサンプルコード

これまでに説明した内容ですぐに動くサンプルコードを作りました。

良かったら実際にお手元で遊んでみてくださいな。

サンプルコード

 command
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);
}

実行結果

 command
monoblog|オプティマイザーの人生最適化ブログ

ログインが必要なサイトをスクレイピングするには?

スクレイピングをしているとログインが必要なサイトに遭遇することもあるでしょう。

GASでログインをするにはログインリクエストの機能を実装する必要があります。

下記の記事で具体的な実装方法をサンプルコード付きで解説しているので、良かったら参考にしてください。

GASのスクレイピングでログインする方法【コード付きで解説】

まとめ

今回は「PythonとGASスクレイピングの違い」「GASでWebスクレイピングする方法・手順」について解説しました。

GASでスクレイピングするメリットはなんと言っても手軽さです。

「小規模データのスクレイピングをしたい」「お試しでスクレイピングプログラムを作ってみたい」という人は、ぜひGASを使ってスクレイピングしてみてください。

では、また。

【GAS入門】Google Apps Scriptでできることを徹底解説!

Webスクレイピングの勉強におすすめの本7選【Python・VBA・Ruby】

  • この記事を書いた人

mono

26歳♂️関東在住のサイドFIREを目指すブロガー/座右の銘は「知識は誰にも奪われない」/ゆるく稼いで楽しく暮らすライフハック情報をお届けします/アイコンは黎(クロイ)さん。

スキルを磨く Google Apps Script

Webスクレイピング

© 2021 monoblog