R - 如何使用rvest或rcurl点击网页

yan*_*ang 19 r web-scraping rcurl rvest

我想从这个网页下载数据

数据很容易被删除rvest.

代码可能是这样的:

library(rvest)
library(pipeR)
url <- "http://www.tradingeconomics.com/"
css <-     "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"

data <- url %>>%
  html() %>>%
  html_nodes(css) %>>%
  html_table() 
Run Code Online (Sandbox Code Playgroud)

但是像这样的网页存在问题.

有一个+按钮显示所有国家/地区的数据,但默认值只是50个国家/地区的数据.

因此,如果我使用代码,我可以抓取50个国家/地区的数据.

+按钮是在人的javascript,所以我想知道是否有在某种程度上R点击按钮,然后刮数据.

hrb*_*str 13

有时最好在ajax web-request级别攻击问题.对于此网站,您可以使用Chrome的开发工具并观看请求.为了构建表(整个表也是如此),它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]]
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用RSelenium转到页面,单击"+"然后刮取结果表.