r rvest 错误: "Error in doc_namespaces(doc) : external pointer is not valid"



我的问题与这个问题相似,但是后者没有收到我可以使用的答案。我正在用xml2::read_html刮擦数千个URL。这很好。但是,当我尝试使用purrr::map_dfhtml_nodes解析所得的HTML文档时,我会收到以下错误:

Error in doc_namespaces(doc) : external pointer is not valid

由于某种原因,我无法使用示例重现错误。下面的示例不好,因为它可以很好地工作。但是,如果有人可以从概念上解释我的错误含义以及如何解决该错误,那将是很棒的(这是类似问题的GitHub线程,但我不遵循所有技术(。

library(rvest)
library(purrr)
urls_test <- list("https://en.wikipedia.org/wiki/FC_Barcelona",
             "https://en.wikipedia.org/wiki/Rome")
h <- urls_test %>% map(~{
  Sys.sleep(sample(seq(1, 3, by=0.001), 1))
  read_html(.x)})
out <- h %>% map_df(~{
  a <- html_nodes(., "#firstHeading") %>% html_text()
  a <- if (length(a) == 0) NA else a
  b <- html_nodes(., ".toctext") %>% html_text()
  b <- if (length(b) == 0) NA else b
  df <- tibble(a, b)
})

会话信息:

> sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Devuan GNU/Linux ascii

问题是,r将XML存储在内存中,并用外部指针存储。这些外部指针未存储在.rds文件中。因此,一旦保存项目并重新开放,您将获得错误external pointer is not valid

解决方法:使用xml2::write_html()将解析的HTML保存到HTML文件中。如果您想稍后使用它,只需使用xml2::read_html()

阅读它

另请参见此处的更多信息,有关此处的并行处理,以及与R

的并行处理XML节点

最新更新