ヘッダにべた書きされたjson形式のデータをRでスクレイピングする
ヘッダにべた書きされたjsonデータを取り出したいこと、あると思います。
そんな時はrvestとV8パッケージを使います。
まずは下記URLをご覧ください。
地球上の誰かの生きた記録です。
http://runmeter.com/316fcda34d2b67ab/Run-20150307-1730
今回はこれを題材にスクレイピングしてみます。
rvestでjavascriptを切り出す
まずはヘッダのjavascriptをrvestで切り出します。
library("rvest") h <- html("http://runmeter.com/316fcda34d2b67ab/Run-20150307-1730") js <- h %>% html_nodes("head script") %>% html_text()
切り出したjavascriptをV8パッケージでもって変換する
ソースをみるとわかるように、今回欲しいデータは上記jsオブジェクトの4つ目に格納されています。
これをV8パッケージでjavascriptとして評価することでデータを取り出します。
library("V8") ct <- new_context() ct$eval(js[[4]])
javascriptとして評価されているオブジェクト一覧は以下のようにして確認できます。
ct$get(I("Object.keys(this)"))
今回は一覧の中にあるjsonDataが目的のデータなのでこれをV8のget関数でRで扱えるように変換します。
リストに変換されているので、あとは煮るなり焼くなり好きにしたら良い。
res <- ct$get("jsonData")