2017-09-20 4 views
1

Ich möchte die Tabelle in der folgenden SeiteScrape eine Seite in R mit rvest oder RCurl oder HTTR

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

ich versucht habe rvest und RCurl extrahieren, aber sowohl in den Fällen, die Seite, die bekommt heruntergeladen ist anders als das, was ich im Browser sehe. Ich gehe davon aus, dass eine Form der Umleitung, die ich nicht in der Lage bin zu erkennen oder folgen

Jede mögliche Hilfe

PS geschätzt werden: Kein Interesse an PhantomJS

Dies ist, was ich bis jetzt versucht:

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) 

Ergebnis: Keine Daten gefunden !!!!

2. RCurl

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) 

Ergebnis: Keine Daten gefunden !!!!

Auch würde mich interessieren, zu wissen, wie die Excel-Datei zu erhalten (siehe kleine Excel-Symbol)

+0

Gibt es einen Grund, dass Sie PhantomJS explizit als Lösung ausschließen? In manchen Fällen ist es einfach nicht möglich, Daten ohne Phaser wie PhantomJS, RSelenium oder ähnliches zu scrappen. Ohne darauf einzugehen, ist es vielleicht nicht möglich, Ihre Frage zu lösen. – TomS

+0

@TomS Es ist eine Systemvoraussetzung in unserer Umgebung, die phantomJS nicht zulässt. Es ist möglich, mit rvest. Ich werde die Antwort posten, sobald ich den Code an meinem Ende abgeschlossen habe. Ich bin in der Nähe .... –

+0

Aber Sie wissen, dass im Gegensatz zu z. RSelenium PhantomJS erfordert keine Installation richtig? Ich habe keine Administratorrechte auf meiner Arbeitsmaschine, aber es funktioniert. Allerdings - wenn Sie in der Nähe einer Lösung mit nur RVST (oder z. B. HTR) bin ich glücklich zu lesen und zu lernen, da ich im Wesentlichen Mangel an Wissen in dieser Hinsicht :). – TomS

Antwort

2

Hier ist die Antwort

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

Genießen Sie !!!

+0

wirklich cool! Ich habe gerade mit dem Scraping angefangen und bin schon auf einige Probleme mit Java gestoßen, die ich ohne z. RSelenium. Ich bin zwar nie auf das V8-Paket gestoßen, aber die Ergebnisse sehen wirklich gut aus. Vielen Dank! – TomS