このウェブページ からデータをダウンロードしたい
データはrvest
で簡単にスクレイピングできます。
コードはおそらく次のようになります:
library(rvest)
library(pipeR)
url <- "http://www.tradingeconomics.com/"
css <- "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"
data <- url %>>%
html() %>>%
html_nodes(css) %>>%
html_table()
しかし、このようなWebページには問題があります。
すべての国のデータを表示する+
ボタンがありますが、デフォルトは50か国のデータのみです。
したがって、このコードを使用すると、50か国のデータを取得できます。
+
ボタンはjavascript
で作成されているので、R
でボタンをクリックしてデータをスクレイピングする方法があるかどうかを知りたいです。
場合によっては、ajaxWebリクエストレベルで問題を攻撃する方がよい場合があります。このサイトでは、Chromeの開発ツールを使用してリクエストを監視できます。テーブル(テーブル全体も)を構築するために、さまざまなajax-yパラメーターを使用してサイトにPOST
を作成します。それを複製し、応答のデータ管理を少し行うだけで、準備は完了です。
library(httr)
library(rvest)
library(dplyr)
res <- POST("http://www.tradingeconomics.com/",
encode="form",
user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.50 Safari/537.36"),
add_headers(`Referer`="http://www.tradingeconomics.com/",
`X-MicrosoftAjax`="Delta=true"),
body=list(
`ctl00$AjaxScriptManager1$ScriptManager1`="ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$UpdatePanel1|ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1",
`__EVENTTARGET`="ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1",
`srch-term`="",
`ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$GridView1$ctl01$DropDownListCountry`="top",
`ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$ParameterContinent`="",
`__ASYNCPOST`="false"))
res_t <- content(res, as="text")
res_h <- paste0(unlist(strsplit(res_t, "\r\n"))[-1], sep="", collapse="\n")
css <- "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"
tab <- html(res_h) %>%
html_nodes(css) %>%
html_table()
tab[[1]]$COUNTRIESWORLDAMERICAEUROPEASIAAUSTRALIAAFRICA
glimpse(tab[[1]]
もう1つの方法は、RSeleniumを使用してページに移動し、「+」をクリックして、結果のテーブルをスクレイプすることでした。