2017-09-19 4 views
0

XHR 요청을 통해 동적 웹 사이트 Morningstar.com을 긁어 내려합니다.웹 스크래핑 XHR rvest 및 R이 포함 된 동적 페이지

내가 긁어하고 정확한 사이트입니다 : http://performance.morningstar.com/funds/etf/total-returns.action?t=SPY&region=USA&culture=en_US

내가 긁어하려고하면 분기 별 실적 번호 (1 개월)입니다. 결과는 오늘 0.64이어야합니다.

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) 

그러나, 결과는 숫자 (0)

내가 잘못하고있는 중이 야 어떤 생각?

Sody

업데이트 :

나는 다음과 같은 코드로 HTML 데이터를 얻을 수있었습니다 :

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" 

       ) 
)) 

하지만 여전히 사용하여 데이터를 가리키는 데 문제 중 하나 CSS 선택기 또는 rpath가있는 xpath

당신은 그 데이터 포인트를 찾기 위해 무엇을 사용합니까? SelectorGadget은 여전히 ​​가고 있습니까?

건배, 아론

표는 자바 스크립트를 사용하여 내장되어
+0

귀하의 질문과 답변 게시에 대한 업데이트를 고려해보십시오. – hrbrmstr

+0

좋은 지적! 새로운. –

답변

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 

XHR을 직접 타겟팅해야합니다.

+0

xpath는 무엇입니까? xpath = '/ * [@ id = "탭 - 쿼어 엔드 콘텐츠]]/table'' –

+0

그러면 테이블이 생깁니다. 방금 데이터에 문제가 발생했습니다. 테이블은 쉬운 부분입니다. – hrbrmstr

0

, 하드 코딩하지. 이 데이터를 다룰 수는 없습니다.

+0

글쎄, httr의 GET이 아니 겠지만, Rselenium과 같은 솔루션은 자바 스크립트를 실행해야하는 페이지를 긁어 모으기 때문에 이러한 유형의 데이터를 긁어내는 것은 불가능합니다 (쉬운 일은 아닙니다). – MrFlick

+0

이전에 크롬에서 XHR 및 devtools를 사용하여 사이트와 유사한 사이트에서 스크랩 한 적이 있습니다. 나는 Rseleniom이 필요하다고 생각하지 않는다. –