ほくそ笑む

R言語と統計解析について

AJAXサイトを Webスクレイピングする(銀行金利をスクレイピング)

共同で翻訳した本が出版されます。

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

本書は、原題 "Automated Data Collection with R" の翻訳書です。

今日は、本書の6章から「AJAX サイトを Web スクレイピングする」という話を紹介したいと思います。

AJAX サイトを Web スクレイピングする

銀行の金利が低い時代ですが、キャンペーンなどで一時的に定期預金の金利が高くなる場合があります。

そのタイミングで定期預金を組めば、それだけお得です。

なので、いろいろな銀行の定期預金の金利を定期的にスクレイピングして情報を得たいとします。

ここでは架空の銀行、R銀行の金利情報を得ることを考えます。

R銀行の Web サイトを見ると、定期預金の金利はホームページ上で確認できます。

そこで、この情報を次のようにしてスクレイピングしてみます。

library(rvest)

# スクレイピング対象の URL
url <- "https://www.rakuten-bank.co.jp/interest/details.html"
# URL をスクレイピングして、表(table)だけを抜き出す
tables <- read_html(url) %>% html_nodes('table')

# 見つかったテーブルの個数を確認
length(tables)
#> 6

# 各テーブルの内容を確認する
tables %>% html_text
#> [1] "普通預金金利(普通預金の商品詳細説明書へ)..."
#> [2] "普通預金金利(マネーブリッジご利用者)..."
#> [3] "普通預金金利(楽天カードのカード利用金額の引落があるお客さま)..."
#> [4] "預入期間中途解約利率1年未満約定利率..."
#> [5] "期間\n当初1年間\n2年後以降(最長10年まで)..."
#> [6] "期間\n当初1年間\n2年後以降(最長15年まで)..."

しかし、定期預金の金利データが入っているテーブルは見つかりませんでした。

これはなぜでしょうか?

このページでは 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
#> 期間
#>     預入単位
#>        1,000円以上100万円未満
#>        100万円以上1000万円未満
#>        1000万円以上
#>     7日
#>        0.02%
#>        0.02%
#>        0.02%
#> ……

AJAX を使ったサイトでも、ほとんどの場合この方法でスクレイピングできるようになります。

このように、本書は R だけにこだわらず、より便利なツールがあればそれを使って、効率よく目的を達成するというスタンスで書かれています。

まとめ

インターネットの普及に伴って、Web 上のデータを使ったデータ分析が盛んに行われるようになりました。

そこで重要となるのが、Web 上の情報をいかに効率よく集めるかという問題です。

ここに R を用いることで、データ収集から分析までをシームレスに行うことでき、効率を上げることができます。

本書は、データ収集だけでなく、加工、保管、分析、報告といったデータ分析に必要となる一連の技術ついての本です。

Twitter によるアカデミー賞予測」「商品レビューのセンチメント分析」といった事例もたくさん載っています。

本書を読めば、このようなデータ分析プロジェクトを効率よく進めるためのセオリーを身に着けることができるでしょう。

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド

Rによる自動データ収集: Webスクレイピングとテキストマイニングの実践ガイド