R Web scrape - 错误

时间:2017-11-09 16:58:12

标签: r web-scraping rvest

好的,所以我被困在看似简单的网页刮擦上。我的目标是刮掉Morningstar.com,根据输入的网址检索基金名称。以下是我的代码示例:

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

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

我希望它会返回Fidelity Balanced Fund这个名称,但我得到以下错误:{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 个答案:

答案 0 :(得分:1)

好的,所以看起来页面会动态加载您定位的部分,因此它实际上并没有被read_html()拉入。有趣的是,页面的这一部分也没有使用RSelenium无头浏览器加载。

我能够通过抓取页面标题(实际上隐藏在页面上)并使用一些正则表达式来摆脱垃圾来实现这一点:

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')

同样,这在这种特定情况下没有帮助,因为页面无法加载我们试图抓取的部分。

最后一点:其他网站包含相同的信息,更容易被抓(如雅虎财经)。