2018-02-20

Google Apps Scriptでスクレイピングが捗る5つの理由




Pythonでいろいろスクレイピングしてきましたが、Google Apps Scriptでのスクレイピングがかなりよいです。
今回はGoogle Apps Scriptでスクレイピングをオススメする理由を、Pythonを利用する場合と比較して解説します。




目次


  • GASを利用したスクレイピングのメリット
    • 環境構築一切不要で初心者に優しい
    • 定期実行が超絶簡単かつカスタマイズ性が高い
    • 学習コストが超絶低い
    • 取得結果をだれにでもスクレイピング結果をリアルタイムに共有しやすい
    • 伝家の宝刀IMPORTXML関数でスクレイピングもできる
  • Google Apps Scriptで向いてるスクレイピング
    • 小規模なデータの取得
    • Google Apps Scriptで向いていないスクレイピング
  • Google Apps Scriptが向いていないスクレイピング
    • 大規模なデータのスクレイピング
    • ブラウザ操作(クリック・フォーム入力)が求められるスクレイピング
  • Google Apps Scriptでのスクレイピング方法は?
    • IMPORTXML関数によるスクレイピング
    • 正規表現によるスクレイピング
    • XPATHの理解が重要

GASを利用したスクレイピングのメリット


Pythonなどのサーバーサイドの言語を書くのに比べて、Google Apps Scriptを利用したほうが便利な場合があります。Google Apps Scriptを利用したスクレイピングをするメリットについて、ご紹介します。


先にまとめの表だけ。


-GASPython X Selenium
環境構築不要Python・サーバーの環境構築etc
定期実行GUI上でワンクリック自前PC、構築したサーバー上でCRON等
学習コストJavaScriptPython・Linux・JavaScript・SaaSなど
共有手段スプレッドシートのURL共有CSVに保存しそれを共有orサーバー上にアクセス
スクレイピングIMPORTXML関数・正規表現BeautifulSoup, Selenium等
向いているスクレイピング小規模なデータ・定期実行が必要大規模なデータ・ブラウザ操作を伴うスクレイピング


環境構築一切不要


普通にPythonでスクレイピングしようと思う場合、まずPythonのインストール、必要なライブラリのインストールからはじまります。その場合だと、初心者だとセットアップに時間がかなりかかります。

その点、GASを利用する場合は、Google Apps Scriptを起動するだけで終了します。セッティングに一切時間がかからないので、非常に簡単にスクレイピングを始められます。

定期実行が超絶簡単


Pythonで定期実行プログラムを組む場合、ローカルのPCを常時起動してCRONを実行させるか、サーバーを借りてそので定期実行プログラムを動かすかのどちらかになります。PCを常時起動しておくのは、かなり不便です。また、サーバーを借りるとしても、そのサーバー代や、セッティングコストを考えると面倒です。また、無料で定期実行を行おうとすると、定期実行の回数を設定する柔軟性が失われます。例えばHerokuを利用して定期実行したい場合、選べるのは日単位、時間単位、日にち単位ぐらいです。


一方、Google Apps Scriptの定期実行プログラムは、完全無料でGUI上で簡単にセッティングできます。PCを常時起動しておいたり、サーバーを借りたりする必要もありません。また、定期実行の間隔もかなり細かく設定できます。


  1. 分タイマー
    1. 1分ごと
    2. 5分ごと
    3. 10分ごと
    4. 15分ごと
    5. 30分ごと
  2. 時タイマー
    1. 1時間ごと
    2. 2時間ごと
    3. 4時間ごと
    4. 6時間ごと
    5. 8時間ごと
    6. 12時間ごと
  3. 週タイマー
    1. 毎週月曜日~金曜日
  4. 月タイマー
    1. 月N回と指定できます。





学習コストが超絶低い


Pythonでスクレイピングしようとすると、環境構築、Pythonの基本文法、Linuxの知識、DB設定、CSV連携、サーバーへの接続、cron等の学習コストが生じます。かつ、それに各ライブラリの知識が必要になります。どこまでの知識が必要かについては、こちらの記事にまとめてあります。


Python データ分析入門マニュアル - 実例を使ってWebスクレイピングからデータビジュアライゼーションまでやってみよう -

Python データ分析入門マニュアル Webスクレイピングからデータビジュアライゼーションを、プログラミングを学んだことのない人向けに0から解説するマニュアルです。何から学ぶべきか、環境構築はどうするかからはじまって、Webスクレイピング、データの前処理、そしてデータビジュアライゼーションまでを丁寧に解説します。 ...


Google Apps Scriptの場合、基礎的なJavaScript・正規表現・IMPORTXML関数ぐらいの知識でスクレイピングできてしまいます。いくつか主要な関数だけ仕様を理解できれば、かなり簡単にスクレイピングできてしまいます。


取得結果をだれにでもスクレイピング結果をリアルタイムに共有しやすい


例えば、Pythonでスクレイピング結果を確認したい場合、ローカルに保存してあるCSVを共有するか、もしくは共有サーバー上のデータにアクセスしにいくことになると思います。サーバーも不特定多数の人からアクセスできないようにさせる必要があり、セキュリティ的な観点でも面倒くさいです。またITがよくわからない人にとっては、共有しづらいです。

一方で、Google Apps Scriptなら、スプレッドシート上に取得した値を書き込めるので、共有する場合はスプレッドシートのURLをコピーするだけで終わります。ITが苦手な人でも、URLを送るだけで終わりです。

伝家の宝刀IMPORTXML関数


Pythonでスクレイピングする場合は、各種ライブラリのインストールを行い、HTTP Requestを特定のURLに送信、その結果をXMLかJSONにパースして整形し、特定の値を取得するという流れになります。ここまでにかなりの行数のコードを書くことになります。


一方で、Google Apps Scriptなら、取得したい値があるページのURLと、その値のXPathをimportxml関数の引数に入れるだけで終わりです

Google Apps Scriptで向いてるスクレイピング


Google Apps Scriptを使ってスクレイピングをする場合、こういう状況であれば大きな効果を発揮します。

小規模なデータの取得

取得するデータ量が少ない場合、さくっと作るものならばPythonを利用するよりもGoogle Apps Scriptで取得しちゃったほうが楽です。

定期実行が必要になるスクレイピング

データの取得が一回きりではなく、何度も定期実行を行う必要がある場合は、Google Apps Scriptを用意するのがよいでしょう。サーバー構築が必要ないので、楽です。

スクレイピング結果を誰にでも簡単に共有したい場合


ローカルのPCでスクレイピングしてCSVにまとめても、共有するのが大変です。スプレッドシートなら取得した結果がリアルタイムでスプレッドシートに共有されるので、結果を共有したい場合はGoogle Apps Scriptをつかって、その結果をスプレッドシートに共有してしまうのがよいでしょ。


余談ですが、スプレッドシートには、グラフをiframe形式でHTML化できる機能があります。スクレイピング結果を、グラフ化して表示し、適当なサイトにグラフとして表示しておくことも可能です。ちょうどよいサンプルとして、前に相席居酒屋の在籍情報をリアルタイムで可視化したグラフを、ブログにはりつけているので、こちらの記事を参考にしてみてください。


【GAS】IMPORTXML関数で取得した値を、1時間おきに定期実行で行を追加する

IMPORTXML関数で取得した結果を、一時間おきに新たに行に追加する 前回は相席屋の空席情報をIMPORTXML関数を利用して、スクレイピングしました。 糞相席屋を撲滅する試み 昔友達とネタで相席居酒屋に入ったら、男しかいなくて「相席でもなんでもねえじゃん」と思って遺憾の意だったため。

Google Apps Scriptで向いていないスクレイピング


Google Apps Scriptで向いてないこともあります。

大規模なデータのスクレイピング


また、GASは大規模データのスクレイピングは向いていません。実行時間が制限されているので、取得している間にエラーがおこり終了してしまいます。

ブラウザ操作(クリック・フォーム入力)が求められるスクレイピング


まず、クリック・フォーム入力等のブラウザ操作が伴うスクレイピングはGASでは難しいです。静的なページの特定の値を取得する場合であればよいのですが、PythonのSeleniumのように、ブラウザ操作(クリック、フォーム入力)が伴うスクレイピングは、あまり向いていません。こういう場合はPythonのSeleniumを利用したほうがいいです。Seleniumに関しては、過去の記事で紹介しております。

【Python】スクレイピング→データ収集→整形→分析までの流れを初心者向けにまとめておく ~Pythonに関するはてな記事を10年分スクレイピングし、Pythonトレンド分析を実際にやってみた~

この数年間、Pythonの人気が高まっています。 Googleトレンド によると、Pythonの検索流入数は、この10年間で2倍近くになりました。特にグラフから見ると、だいたい2015年ぐらいからPythonの検索数は増えている模様です。 さて、この数年間で、Pythonがどのような言語として扱われ、どう変化してきたののでしょうか。 ...

Google Apps Scriptでのスクレイピング方法は?


Google Apps Scriptを利用してスクレイピングする方法は以下2点です。

IMPORTXML関数の利用

これは正確にはGoogle Apps Scriptではなく、Google Spreadsheetの関数なのですが、指定したセルにURLとXPATHさえ入力すれば、スクレイピングができてしまいます。

【GAS】IMPORTXML関数で取得した値を、1時間おきに定期実行で行を追加する

IMPORTXML関数で取得した結果を、一時間おきに新たに行に追加する 前回は相席屋の空席情報をIMPORTXML関数を利用して、スクレイピングしました。 糞相席屋を撲滅する試み 昔友達とネタで相席居酒屋に入ったら、男しかいなくて「相席でもなんでもねえじゃん」と思って遺憾の意だったため。

正規表現を利用したスクレイピング

もう一つは、HTMLのソースを正規表現を利用して検索し、合致する値のデータをスクレイピングするという方法です。こっちのほうが難しいですが、より柔軟にデータの取得ができると思います。


Google Apps Scriptで、正規表現でスクレイピングする方法を方法を初心者向けにまとめてみた

僕が作ったわけではないのですが、 Google Apps ScriptによるスクレイピングというYoutubeの動画から写経して、Google App Scriptのスクレイピングコードを勉強します。 できることとしては、Ted talksの全動画のタイトル、スピーカーをすべてGoogle Spread Sheetに取り出すことができるというものです。

まとめ 

ということで、まとめるとこうなります。

-GASPython X Selenium
環境構築不要Python・サーバーの環境構築etc
定期実行GUI上でワンクリック自前PC、構築したサーバー上でCRON等
学習コストJavaScriptPython・Linux・JavaScript・SaaS・Cronなど
共有手段スプレッドシートのURL共有CSVに保存しそれを共有orサーバー上にアクセス
スクレイピングIMPORTXML関数・正規表現BeautifulSoup, Selenium等
向いているスクレイピング小規模なデータ・定期実行が必要大規模なデータ・ブラウザ操作を伴うスクレイピング

スクレピングするときにシチュエーションにあわせて使い分けられるとよさそうですね。

Google Apps Script・Google Spreadsheetに関係するおすすめ記事


【GAS】IMPORTXML関数で取得した値を、1時間おきに定期実行で行を追加する

Google Apps Scriptでスクレイピングを定期実行して、News Picksのソーシャルデータを取得する方法をまとめてみた

スクレイピングの最強ツールはGoogle Spreadsheetで決まり!面倒な情報収集はGoogle Spreadsheetにやらせよう!

Google Apps Scriptでスクレイピングが捗る5つの理由

相席居酒屋の空席状況をリアルタイムでスプレッドシートに更新し、グラフ化することで男しかいない糞相席屋を撲滅する試み

Google Apps Scriptで、正規表現でスクレイピングする方法を方法を初心者向けにまとめてみた

Google Apps ScriptでWebアプリを作成する

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...