2015-03-21 15 views
13

Vorrei scaricare i dati dal this webpage(lingua R) Come fare un clic su pagina web utilizzando rvest o rcurl

I dati possono essere facilmente raschiate con rvest.

Il codice forse in questo modo:

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

data <- url %>>% 
    html() %>>% 
    html_nodes(css) %>>% 
    html_table() 

Ma c'è un problema per le pagine web come questo.

C'è un pulsante + per mostrare i dati di tutti i paesi, ma il valore predefinito è solo dati di 50 paesi.

Quindi, se utilizzo il codice, riesco a racimolare i dati di 50 paesi.

Il pulsante + è realizzato in javascript, quindi voglio sapere se c'è un modo in R fare clic sul pulsante e poi raschiare i dati.

+1

Un approccio alternativo al suggerimento di @ hrbrmstr è quello di utilizzare RSelenium, che consente di automatizzare una sessione del browser interattivo. – Thomas

+0

@Thomas proverò anche il modo RSelenium per farlo, grazie per il tuo commento. –

risposta

9

A volte è meglio attaccare il problema a livello di richiesta Web Ajax. Per questo sito, puoi utilizzare gli strumenti di sviluppo di Chrome e guardare le richieste. Per costruire la tabella (anche l'intera tabella) crea un POST nel sito con vari parametri ajax-y. Basta replicare che, fare un po 'di dati munging della risposta e si sta bene ad andare:

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]] 

Un'altra alternativa sarebbe stata quella di utilizzare RSelenium per andare alla pagina, fare clic sul "+" e poi raschiare la tabella risultante.

+0

grazie mille per la tua risposta, dopo cercherò di andare al modo RSelenium per farlo. E lo condividerò qui dopo. Grazie ancora. –

+0

So che è passato un anno, ma come si trovano informazioni sul contenuto di ajax che viene inviato? –

+0

"Strumenti per sviluppatori" in qualsiasi browser o strumento come BurpProxy – hrbrmstr

Problemi correlati