読者です 読者をやめる 読者になる 読者になる

プログラマでありたい

おっさんになっても、プログラマでありつづけたい

「データを集める技術」という本を執筆しました

 Webからデータを集めるというテーマで、「データを集める技術」という本を書きました。中身は、クローラー/スクレイピング本なのですが、それだと内容が「Rubyによるクローラー開発技法」と丸かぶりになってしまうので、本職プログラマでない人でも読めるような内容を目指して書いています。

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

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

Excelでデータ収集をする理由


 メインのターゲットは、ITエンジニアです。ただし前述のとおり、プログラマでない人でも何とかなるように目指しています。ということで、メインのデータ収集環境は、ExcelとGoogleスプレッドシートです。何故、Excelを選んだかというと、技術書で10万冊売れるのはExcelだけだから。環境構築の負荷が極小で、かつ普及しているプラットフォームだからです。我々エンジニアからすると、プログラムを実行する環境を構築することは難しくありません。しかし、一般的にはここのハードルは非常に高いのです。そこをどうやって回避するか考えた結果、Excelを選びました。
 Excelはデータ収集のための実行環境として考えると、何気に優れています。少し設定をするだけでVBAというプログラム言語を利用できます。VBAからIEをコントロールできるので、ブラウザのエミュレートをどうするかという問題も不要です。また集めたデータをシートに保存することも可能ですし、グラフや表にまとめて可視化することも出来ます。使える言語がVBScriptのみということに目をつぶれば、中々に優れた環境です。
 Google スプレッドシートも同様の理由で選んでいます。Windows以外という選択肢も増えている中で、Excelの代替となる可能性のあるものの第一候補はGoogle スプレッドシートだと思います。Google スプレッドシートも、JavaScriptベースのGoogle Apps Scriptを使うことで、自由自在にデータ収集ができます。また、スケジュール実行やイベント駆動も出来るので、スクレイピングという枠に留まらず簡易Botの基盤としても有用なのではないでしょうか。冒頭ではExcelを連呼していましたが、実はExcelよりGoogleスプレッドシートの比重が高いです。

データ収集の方針


 私の人生のモットーは、できるだけ楽をしたいです。ということで、データを集めるにしろ出来るだけ楽をしようと考えながら構成しています。具体的にいうと、プログラムをしなくても既にデータをとれる為の手段があるのであれば、それを使う。自分で頑張る必要がある場合でも、ExcelやGoogleスプレッドシートのセル関数だけで済むものがあれば、それだけで完結される。万策尽きた場合のみ、プログラムするという方針です。
 楽をするために、いろいろなサードパーティ製のサービスを使っています。スクレイピングサービスであるImport.ioや、単なる通知ツールにとどまらないIFTTTやmyThings、連携ツールとしてのSlackなどです。

リアルタイム通知



 本書で重視しているのが、データを発見したときのリアルタイム通知です。データを集める目的として、大量のデータを効率的に集めたいというのと、欲しい情報がWeb上にあがったら即座に知りたいというのがあります。前作については前者を重視していましたが、本作については後者となっています。
 理由としては、そういったニーズがかなりありそうだということです。前作のRubyによるクローラー開発技法についても、エンジニア以外の人でも読んでいますという声をだいぶ頂きました。データを集める目的を聞いてみると、マーケティングや広報・企画といったところで、事前調査や反響を知りたいという目的が多かったです。そういった用途の場合、データを集積するということも大事ですが、なるべく早く知りたいという要求も高くなります。その辺りを考えて、モバイルへのリアルタイム通知については多くのページを割いています。
※本を何冊か書いているうちに、エゴサーチの鬼になったので、そのあたりのニーズがよく解るようになったという事情もあります。

まとめ



 上記のような方針で書いているので、今まで書いてきた本と読者層がだいぶ違うようになります。正直なところ、想定している読者層にちゃんと届くのか、またどんな評価になるのか非常にドキドキしています。わりと配本も多いので、少し大きめの本屋であれば置かれるのではないかなと思うので、本屋で見つけたら是非ペラペラとめくってみてください。

 目次は、こんな感じです。

Chapter1 スクレイピングとクローラーで効率的にデータを集めていく
 1-1 データはWeb上に集まる
  Web上に存在するデータの種類
  本書が対象とするデータ
 1-2 効率的にデータを収集するために行うこと
  データ収集の3つのステップ
 1-3 どうすれば自動化できるのか?
  スクレイピングとクローラー
  半自動化プログラムでできること
  完全自動化プログラムでできること
  本書の進め方
 1-4 Webサイトからデータを集める際の注意事項
  収集したデータの取り扱いと著作権
  Webサイトのリソース圧迫と業務妨害
  クローラーとAPI

Chapter2 Excelとブラウザを連携してWebページからデータを収集する
 2-1 Excel VBAでWebからデータを収集する
  Excelでのデータ収集テクニック
  ExcelでVBAが使えるようにする設定
  データを収集するためのプログラム
 2-2 VBAでIEを操作する仕組み
  宣言部分
  VBAの関数の宣言
  IEの操作
 2-3 取得したHTMLから要素を抽出する仕組み
  HTMLの構造
  HTMLから要素を抜き出すプログラム
 2-4 簡単な方法で要素を特定する
  ChromeでXPathを抽出する方法
  FirefoxでXPathの抽出する方法
 2-5 WEBSERVICE関数とFILTERXML関数によるデータ収集
  WEBSERVICE関数によるデータ収集
  FILTERXML関数によるデータ収集

Chapter3 Googleスプレッドシートを利用して自動的にデータを収集する
 3-1 GoogleスプレッドシートとGoogle Apps Scriptを準備する
  Googleスプレッドシートとは
  Google Apps Scriptとは
  関数とクラス
 3-2 ImportXML関数を使ってWebからデータを収集する
  ImportXML関数の概要
  株価データの取得方法
  セルの値を利用した取得方法
 3-3 Google Apps Scriptを利用してデータを収集する
  Google Apps Scriptの使い方
  Google Apps Scriptによるスクレイピング
  Google Apps Scriptの実行
 3-4 指定した時間に定期的にデータを収集する
  Google Apps Scriptのトリガー
  トリガーの設定方法
Chapter4 スクレイピング専用サービスを利用して手軽にWebからデータを収集する
 4-1 import.ioを利用してWebからデータを収集する
  import.ioのサービス概要
  import.ioの利用方法
 4-2 import.ioでスクレイピングを実行する
  import.ioへのサインアップ
  データの自動抽出
  抽出したデータの取得方法
  取得する要素の任意指定
  APIを使ったデータ抽出
 4-3 収集したデータをシート上に保存する
  Googleスプレッドシートとの連携
  Google Apps Scriptとの連携
  Excelとの連携
Chapter5アプリケーションを利用してTwitterからデータを収集する
 5-1 アプリを利用して収集した結果を通知する
  通知を受け取るためのアプリケーション
  IFTTTの概要
  Slackの概要
  myThingsの概要
 5-2 IFTTTを使ってTwitter上でエゴサーチを行う
  IFTTTの会員登録
  モバイルアプリのインストール
  Twitter検索のレシピ作成
 5-3 Slackを利用して定期的にRSS情報を収集する
  Slackの会員登録
  RSSフィードの収集
  モバイルアプリからの利用
 5-4 myThingsを使ってTwitter上でエゴサーチを行う
  会員登録とモバイルアプリのインストール
  Twitter検索の組み合わせの作成
Chapter6 ターゲットを絞り込んで、さまざまなデータを自在に収集する
 6-1 会社・商品に関する情報を収集する
  特定のキーワードを収集する目的
  収集・保存・通知方法
 6-2 Webから特定の「キーワード」に関する情報を収集・蓄積する
  Googleアラートの設定
  IFTTTの設定
  結果の確認
 6-3 Twitterから特定の「キーワード」を含むツイートを収集・蓄積する
  IFTTTの設定
  結果の確認
 6-4 App StoreからiOSアプリのランキングを収集する
  ランキングのRSSフィード
  ランキングの収集
  結果を日付別シートに保存
  指定した時間に毎日実行する
 6-5 Google PlayからAndroidアプリのランキングを取得する
  import.ioを使ったデータ収集
  結果をGoogleスプレッドシートに保存
  日本語ランキングの取得
 6-6 Amazonのカスタマーレビューを収集する
  import.ioを利用した収集方法
  Googleスプレッドシート+ImportXMLによる収集方法
  Google Apps Scriptを利用した収集方法
 6-7 上場企業の時価総額を収集する
  銘柄コード一覧の取得
  株価に関する情報の収集
  時系列で株価データを収集
 6-8 Amazonのセール情報を取得する
  Amazonのほしい物リスト
  ほしい物リストから商品を取得(Excel版)
  ほしい物リストから商品を取得する(Google Apps Script版)
  Amazonの割引率が高い商品を探す
  商品の割引率とポイント還元率の取得(Excel版)
  商品の割引率とポイント還元率の取得(Google Apps Script版)
Chapter7 データを収集した後の見せ方と使い方のヒント
 7-1 クローラー/スクレイピング開発と関連技術
  認証が必要なページからのデータ収集
  大規模なデータ収集
  スクレイピング/クローラー基盤の将来のアーキテクチャ
 7-2 データを可視化して理解しやすくする
  表とグラフ
  Google My Mapsを利用した地図データとの組み合わせ
  その他の地図データの活用
 7-3 集めたデータを組み合わせて分析する
  分析手法
  機械学習サービス「Amazon Machine Learning」

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

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