2017-11-09 4 views
0

좋아, 그래서 나는 단순한 웹 긁힌 자국이 될 것 같은데 붙어있다. 내 목표는 Morningstar.com을 긁어서 입력 한 URL을 기반으로 펀드 이름을 검색하는 것입니다. 여기에 내 코드의 예는 다음과 같습니다R 웹 긁힘 - 오류

library(rvest) 
url <- html("http://www.morningstar.com/funds/xnas/fbalx/quote.html") 

url %>% 
    read_html() %>% 
    html_node('r_title') 

나는 그것이 이름 피델리티 균형 기금을 반환 할 것으로 예상, 대신 나는 다음과 같은 오류 얻을 것이다 : {xml_missing}

제안?

아론

편집 :

가 나는 또한 XHR 요청을 통해 긁어 시도,하지만 난 내 문제는 적절한 데이터를 찾기 위해 선택하는 어떤 CSS 선택기 또는 XPath를 모르는 생각합니다.

XHR 코드 :

get.morningstar.Table1 <- function(Symbol.i,htmlnode){ 

    try(res <- GET(url = "http://quotes.morningstar.com/fundq/c-header", 
       query = list(
        t=Symbol.i, 
        region="usa", 
        culture="en-US", 
        version="RET", 
        test="QuoteiFrame" 
       ) 
)) 

    tryCatch(x <- content(res) %>% 
      html_nodes(htmlnode) %>% 
      html_text() %>% 
      trimws() 
      , error = function(e) x <-NA) 
    return(x) 
} #HTML Node in this case is a vkey 

여전히 같은 문제는, 내가 찾아 올바른 CSS/XPath를 사용하고 있습니까? XHR 코드는 명확한 CSS 선택기가있는 요청에 효과적입니다.

답변

1

좋아, 페이지가 동적으로 섹션을로드하는 것처럼 보이므로 실제로는 read_html()에 의해 꺼내지지 않습니다. 흥미롭게도 페이지의이 부분은 RSelenium headless 브라우저를 사용하여로드하지 않습니다.

나는 쓰레기를 제거하는이 (실제로 페이지에 숨겨져) 페이지 제목을 긁어 일부 정규식을 수행하여 작동시킬 수 있었다 : 보조 노트로

library(rvest) 

url <- 'http://www.morningstar.com/funds/xnas/fbalx/quote.html' 

page <- read_html(url) 

title <- page %>% 
    html_node('title') %>% 
    html_text() 

symbol <- 'FBALX' 
regex <- paste0(symbol, " (.*) ", symbol, ".*") 

cleanTitle <- gsub(regex, '\\1', title) 

하고, 나중에 사용하기 위해 html_node()에 대한 첫 번째 호출에는 "."이 포함되어야합니다. 클래스 이름 전에 목표로 : 페이지 우리가 긁어하려고하는 부분을로드하는 데 실패 이후

mypage %>% 
    html_node('.myClass') 

다시 말하지만,이,이 특정한 경우에 도움이되지 않습니다.

마지막주의 사항 : 다른 사이트에는 동일한 정보가 포함되어 있으며 (야후 재무와 같이) 긁히기 쉽습니다.

+0

감사합니다. –

관련 문제