outlier

建築士、プログラミング、ライフハック、etc.

(書評)データを集める技術

ExcelやGoogle Spread Sheet を使ってスクレイピングをしたいと思い、参考となる本を探していた時に読んだのがこの本。簡単に解説します。

データを集める技術 最速で作るスクレイピング&クローラー (Informatics&IDEA)

データを集める技術 最速で作るスクレイピング&クローラー (Informatics&IDEA)

 

Excelによるスクレイピング

Pythonを使ったスクレイピングは色んなところで紹介されていますが、そもそもPythonを使える環境がある人って意外と少ないのではないでしょうか。特に日系の大企業だと、セキュリティの都合上、会社のパソコンにPythonをインストールする事すら出来ない人が大多数かと思います。

 

そんな中、どの会社でも使っているであろうExcelを使ったスクレイピングの方法が、本書では最初に出てきます。

VBAからInternetExplorerを動かす方法

Excelでスクレイピングする第1の方法は、VBAからInternetExplorerを動かすというもの。Microsoft HTML Object Library や Microsoft Internet Controls というライブラリを使い、VBAからInternetExplorerを動かして、Webページから収集し、収集したWebページから必要な情報を抽出します。

 

VBAでWebページを取得する方法は、大まかに以下のようになります。

sub main()
  Set objIE = New InternetExplorer
  Dim url
  url = "ここに対象とするURLを入れる"
  objIE.visible = True
  objIE.Navigate(url)

これでWebページが取得できたので、ここから必要な情報を抽出する。この作業は、ほかの言語と同様に、対象とするclassやid要素を、Chromeの”検証”ツールを使ってさがしてくればよい。例えば、

Dim objDoc As HTMLElementCollection

Set objDoc = objIE.document

objDoc.getElementsByTagName("タグ名”)

といった具合に、タグ名で要素を取得することができる。

 WEBSERVICE関数を使ったスクレピング

Excelでスクレピングする第2の方法は、WEBSERVICE関数を使うもの。これは、WEBSERVICE(URL)で、指定したURLからXMLをダウンロードしてきて、それはFILTERXML関数で解析して、必要な部分だけ取り出すという方法。簡単ではあるが、文字数の制限などもあり、使用できる場面は限られる。

Google Spread Sheet を使ったスクレイピング

会社ではExcelを使うとして、自宅ではわざわざ有料のExcelを使っていない人も多いと思われます。そんな時に便利なのがGoogle Spread Sheetを使う方法です。

 

Google Spread Sheetでは、Google Apps Script(ExcelでいうVBA)を使ってスクレピングをします。基本的な使い方は以下の通り。

function myFunction(){

  var url = "ここに対象URLを入れる”

  // ↓以下で、UrlFetchApp.fetchで、Webページを取得してくる

  var response = UrlFetchApp.fetch(url)

  var content = response.getContentText("UTF-8")

}

これでWebページを取得できるのだが、Google Apps Scriptの場合、ここからHTMLをパースする関数のようなものはなく、正規表現で必要な情報を取ってくる必要があるとのこと。

または、こちらのページに、VBAで出てきたようなgetElementByIdといった関数が公開されていたので、これを用いるのも良いかと思います。

tadaken3.hatenablog.jp

 

また、Google Apps Scriptでは、スクリプトを定期実行する仕組みがGUIで簡単に導入できるところが便利です。また、取ってきたデータはそのままSpreadSheetに保存できるので、サーバーレスで定期的にスクレピングするという目的であれば、Google Apps Scriptが最適かもしれません。

外部サービスを使った情報収集

本書の後半は、効率よく情報を収集できるサービスが紹介されています。

Webページをスクレイピングするサービスとして、import.ioというものがあります。これは、対象とするURLを入力すると、自動でWebページを解析し、各要素を抽出してくれるというものです。自分でスクリプトを書くのが難しい人は、まずはこのサービスから始めると良いかもしれません。

 

また、収集してきた情報を即座に通知したり、ほかのサービスに連携するアプリとして、IFTTTやSlackといったツールが紹介されています。

 

スクレイピングの入門編としてはよいが・・・

スクレピングをやったことがない人が、いきなりPythonの本を読んでやるよりも、もっと身近なツールであるExcelやGoogleSpreadSheetを使うという点で、良い本でした。一方、Google Apps Scriptのスクレピングでは、例えばログインが必要なサイトをどうやってスクレピングするかなど、実際にスクレイピングをして困る点についての解説はないので、あくまで入門編と考えたほうが良いかと思います。