R rvest错误:DOC_NAMESPACE(DOC)中出错:外部指针无效&Quot; [英] r rvest error: "Error in doc_namespaces(doc) : external pointer is not valid"

查看:7
本文介绍了R rvest错误:DOC_NAMESPACE(DOC)中出错:外部指针无效&Quot;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题类似于this one,但后者没有收到我可以处理的答案。我正在用xml2::read_html抓取数千个URL。这个很好用。但是,当我尝试使用purrr::map_dfhtml_nodes解析得到的html文档时,我得到以下错误:

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

由于某些原因,我无法使用示例重现该错误。下面的例子不是很好,因为它工作得很好。但如果有人能从概念上向我解释这个错误意味着什么以及如何解决它,那就太好了(这里有一个关于类似问题的github thread,但我不理解所有的技术细节)。

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

阅读即可

另请参阅herehereParallel processing XML nodes with R的详细信息

这篇关于R rvest错误:DOC_NAMESPACE(DOC)中出错:外部指针无效&Quot;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆