Ответ 1
Иногда лучше атаковать проблему на уровне веб-запроса ajax. Для этого сайта вы можете использовать инструменты Chrome dev и просматривать запросы. Чтобы построить таблицу (вся таблица тоже), она делает POST
на сайт с различными параметрами ajax-y. Просто повторите это, сделайте немного обработки данных ответа, и вы хорошо пойдете:
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]]
Другой альтернативой было бы использование RSelenium для перехода на страницу, щелчок "+", а затем очистка итоговой таблицы.