2017-09-20 7 views
1

Je voudrais extraire le tableau de la page ci-dessousGratter une page en R à l'aide rvest ou Rbordage ou HTTR

https://www.mcxindia.com/market-data/spot-market-price

J'ai essayé rvest et Rbordage mais dans les deux cas, la page qui obtient téléchargé est différent de ce que je vois dans le navigateur. Je suppose qu'il ya une forme de redirection que je suis incapable de détecter ou suivre

Toute aide serait appréciée

PS: Pas intéressé PhantomJS

C'est ce que j'ai essayé jusqu'à présent:

1. HTTR

base_url <- "https://www.mcxindia.com/market-data/spot-market-price" 
ua  <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" 
library(httr) 
library(XML) 
doc <- POST(base_url,user_agent(ua),set_cookies(`_ga` = "GA1.2.543290785.1505100652",`_gid`="GA1.2.1409943545.1505881384",`_gat`="1")) 
doc <- htmlParse(doc) 
poptable<-readHTMLTable(doc,which=7) 

Résultat: Aucune donnée trouvée !!!!

2. Rbordage

library(RCurl) 
curl <- getCurlHandle() 
curlSetOpt(curl = curl, 
      ssl.verifypeer = FALSE, 
      useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 
      timeout = 60, 
      followlocation = TRUE, 
      cookiejar = "./cookies", 
      cookiefile = "./cookies") 
newDoc = getURL("https://www.mcxindia.com/market-data/spot-market-price", curl=curl) 
newDoc <- htmlParse(newDoc) 
poptable<-readHTMLTable(newDoc,which=7) 

Résultat: Aucune donnée trouvée !!!!

Aussi je serais curieux de savoir comment obtenir le fichier Excel (voir la petite icône Excel)

+0

Y a-t-il une raison pour laquelle vous excluez explicitement PhantomJS comme solution? Dans certains cas, il n'est tout simplement pas possible de gratter des données sans utiliser de type PhantomJS, RSelenium ou similaire. Sans y jeter un coup d'oeil il n'est peut-être pas possible de résoudre votre question – TomS

+0

@TomS c'est une exigence système au sein de notre environnement qui ne permet pas phantomJS. C'est possible en utilisant rvest. Je posterai la réponse une fois que j'aurai rempli le code à ma fin. Je suis proche .... –

+0

Mais vous savez que contrairement à par exemple. RSelenium PhantomJS ne nécessite aucun type d'installation, n'est-ce pas? Je n'ai pas non plus de droits d'administrateur sur mon ordinateur de travail, mais cela fonctionne. Cependant - si vous êtes proche d'une solution en utilisant seulement rvest (ou par exemple httr), je suis heureux de lire et d'apprendre, car je manque sensiblement de connaissances à cet égard :). – TomS

Répondre

2

Voici la réponse

library(rvest) 
library(stringi) 
library(V8) 

    ctx <- v8() 
    pg <- read_html("https://www.mcxindia.com/market-data/spot-market-price") 
    html_nodes(pg, xpath=".//script[contains(., 'Data')]")[[1]] %>% 
    html_text() %>% stri_unescape_unicode() %>% stri_replace_all_fixed('\\\\', '')%>% 
    ctx$eval() -> ignore_the_blank_return_value 
    data <- ctx$get("vSMP")$Data[,c("Symbol","TodaysSpotPrice","Unit")] 

Profitez !!!

+0

vraiment cool! Juste commencé avec grattage et rencontré déjà quelques problèmes avec Java, je dois résoudre sans, par exemple. RSelenium. Je n'ai jamais rencontré le paquet V8, mais les résultats sont vraiment bons. Merci! – TomS