共同で翻訳した本が出版されます。
本書は、原題 "Automated Data Collection with R" の翻訳書です。
今日は、本書の6章から「AJAX サイトを Web スクレイピングする」という話を紹介したいと思います。
銀行の金利が低い時代ですが、キャンペーンなどで一時的に定期預金の金利が高くなる場合があります。
そのタイミングで定期預金を組めば、それだけお得です。
なので、いろいろな銀行の定期預金の金利を定期的にスクレイピングして情報を得たいとします。
ここでは架空の銀行、R銀行の金利情報を得ることを考えます。
R銀行の Web サイトを見ると、定期預金の金利はホームページ上で確認できます。
そこで、この情報を次のようにしてスクレイピングしてみます。
library(rvest)
url <- "https://www.rakuten-bank.co.jp/interest/details.html"
tables <- read_html(url) %>% html_nodes('table')
length(tables)
tables %>% html_text
しかし、定期預金の金利データが入っているテーブルは見つかりませんでした。
これはなぜでしょうか?
このページでは AJAX が使われており、定期預金のテーブルは遅れて読み込まれるため、単に HTML を取得するだけでは情報を全部取得できないためです。
『Rによる自動データ収集』の6章には次のように書いています。
サイトが AJAX を採用している場合,単純に HTML ソースコードを取得するだけでは十分な情報を得られない可能性がある.その場合,情報源を特定するためにサイトの基本的な構造を理解する必要がある.これまで R について称賛してきたわれわれだが,このタスクに関しては,R だけでやるのは難しいだろう.少なくとも,AJAX を使用したサイトに対して,R は必要な機能を提供しているとはいえない.
AJAX を使ったサイトは、単純な方法でスクレイピングできないため、諦めてしまう人も多いと思います。
しかし本書では、ブラウザの開発者ツールを補助的に使用することでこれを解決します。
代わりに,われわれはブラウザで直接サイトを調べることにする.大半のブラウザには Web 開発のための強力なツール機能がついており,それは Web スクレイピングにおいても役に立つ.
本書では、具体的に Google Chrome の Web 開発者ツール(Web Developer Tools;WDT) を使って、データソースを追跡し、欲しい情報がどこにあるのかを特定する方法を詳しく説明しています。
本書での説明通り行えば、R銀行の定期預金金利の情報は、次のようにしてスクレイピングできます。
data_source <- "https://rbweb.rakuten-bank.co.jp/REF/main/fis/BasicTimeDepositInterestRate.html?PageID=BasicTimeDepositInterestRatePresentationLogicBean"
time_depoit_rates <- data_source %>% read_html %>% html_node('table')
time_depoit_rates %>% html_text %>% cat
AJAX を使ったサイトでも、ほとんどの場合この方法でスクレイピングできるようになります。
このように、本書は R だけにこだわらず、より便利なツールがあればそれを使って、効率よく目的を達成するというスタンスで書かれています。
まとめ
インターネットの普及に伴って、Web 上のデータを使ったデータ分析が盛んに行われるようになりました。
そこで重要となるのが、Web 上の情報をいかに効率よく集めるかという問題です。
ここに R を用いることで、データ収集から分析までをシームレスに行うことでき、効率を上げることができます。
本書は、データ収集だけでなく、加工、保管、分析、報告といったデータ分析に必要となる一連の技術ついての本です。
「Twitter によるアカデミー賞予測」「商品レビューのセンチメント分析」といった事例もたくさん載っています。
本書を読めば、このようなデータ分析プロジェクトを効率よく進めるためのセオリーを身に着けることができるでしょう。