2017-09-19 1 views
0

Ich versuche, eine dynamische Website Morningstar.com über XHR-Anfragen zu kratzen.Web Scraping XHR Dynamische Seiten mit Resten und R

Die genaue Stelle ich Schaben bin ist: http://performance.morningstar.com/funds/etf/total-returns.action?t=SPY&region=USA&culture=en_US

Was ich versuche, die Quarterly Leistungszahl (1-Monat) zu kratzen ist. Das Ergebnis sollte ab heute 0,64 betragen.

try(res <- GET(url = "http://performance.morningstar.com/fund/performance-return.action", 
       query = list(
        t="SPY", 
        region="usa", 
        culture="en-US" 
       ) 
)) 

    tryCatch(x <- content(res) %>% 
      html_nodes(xpath = '//*[@id="tab-quar-end-content"]/table/tbody/tr[1]/td[1]') %>% 
      html_text() %>% 
      trimws() %>% 
      as.numeric() 
      , error = function(e) x <-NA) 

jedoch das Ergebnis numerisch (0)

Jede Idee, was ich falsch mache?

Sody

Update:

konnte ich die HTML-Daten mit dem folgenden Code erhalten:

try(res <- GET(url = "http://performance.morningstar.com/fund/performance-return.action", 
       query = list(

        t = "SPY", 
        region = "usa", 
        culture = "en-US", 
        ops = "clear", 
        s = "0P0000J533", 
        ndec = "2", 
        ep = "true", 
        align = "q", 
        annlz = "true", 
        comparisonRemove = "false" 

       ) 
)) 

Aber ich bin immer noch Probleme mit den Daten zeigen entweder die CSS-Selektor oder der Xpath mit Rvest.

Was verwenden Sie, um diese Datenpunkte zu finden? Ist SelectorGadget immer noch der richtige?

Cheers, Aaron

+0

Sie sollten in Betracht ziehen, Ihre Frage zu aktualisieren oder Antworten zu posten. – hrbrmstr

+0

Guter Punkt! Neu dazu. –

Antwort

1
library(httr) 

GET(
    url = "http://performance.morningstar.com/perform/Performance/cef/trailing-total-returns.action", 
    add_headers(
    Referer = "http://performance.morningstar.com/funds/etf/total-returns.action?t=SPY&region=USA&culture=en_US", 
    `X-Requested-With` = "XMLHttpRequest" 
), 
    query = list(
    t = "ARCX:SPY", region = "usa", culture = "en-US", 
    cur = "", ops = "clear", s = "0P00001MK8", ndec = "2", ep = "true", 
    align = "q", annlz = "true", comparisonRemove = "false", 
    benchmarkSecId = "", benchmarktype = "" 
), 
    verbose() 
) -> res 

Sie müssen das XHR direkt anvisieren.

+0

Was ist mit dem xpath? 'Xpath = '/ * [@ id =" tab-quar-end-content "]/tabelle' –

+0

Das bringt dir die Tabelle. Sie hatten Probleme, nur zu den Daten zu gelangen. Der Tisch ist der einfache Teil. – hrbrmstr

0

Die Tabelle Java-Skript eingebettet verwenden, nicht hartcodiert. Sie können diese Daten nicht abschaben.

+0

Nun, nicht mit Httr GET vielleicht, aber Lösungen wie Rselen existieren, um Seiten zu kratzen, die die Ausführung von Javascript erfordern, so ist es nicht unmöglich, diese Art von Daten zu kratzen (es ist einfach nicht so einfach). – MrFlick

+0

Ich habe Scrapes zuvor von ähnlichen Stellen mit XHR und Devtools in Chrom gemacht. Ich glaube nicht, dass Rseleniom gebraucht wird. –