r - 如何将 read_html 的输出保存和读取为 RDS 文件?

标签 r rvest xml2

可以像这样保存和读取对象

# Save as file
saveRDS(iris, "mydata.RDS")

# Read back in 
readRDS("mydata.RDS")

但这似乎不适用于用 xml2::read_html() 制作的对象。

例子
library(rvest)
someobject <- read_html("https://stackoverflow.com/")
saveRDS(someobject, "someobject.RDS")

它创建了一个文件,但不像预期的那样
IE。
readRDS("someobject.RDS")
Error in doc_is_html(x$doc) : external pointer is not valid

发生了什么以及保存 html 对象的最简单方法是什么,以便它可以用最少的代码/大惊小怪加载回来?

最佳答案

回答“发生了什么”:saveRDS正在尝试序列化正在保存的对象。在这里,对象 someobject是一个包含元素的列表 someobject$docsomeobject$node .元素的类型是 externalptr (外部指针),这意味着它们引用了保存在内存中的 C 数据结构。当外部指针被序列化时,引用会丢失。因此错误“外部指针无效”。

您可以序列化 someobject使用 as.character()并将其传递给 saveRDS :

saveRDS(as.character(someobject), "someobject.RDS")

然后使用 readRDS 重新创建对象和 read_html :
someobject <- read_html(readRDS("someobject.RDS"))

但是更容易使用write_html()正如其他人所建议的那样。

一些讨论 in this Github issue thread .

关于r - 如何将 read_html 的输出保存和读取为 RDS 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764585/

相关文章:

r - 在 R 中使用 tableGrob 或 grid.table 时对齐文本

R rvest 连接到本地主机

r - 在 R 中的高尔夫网站上抓取排行榜表

r - "Next Page"rvest scrape 函数

r -//parent::* 在 XPath 中?

r - 根据时间段创建组

r - 为什么(或何时)Rscript(或更小)比 R CMD BATCH 更好?

r - 如何在dplyr R中创建连续两年的ID

r - 从单个 XML 创建多个 XML2 过滤

xml - 使用 xml2 包读取大 XML 文件并尝试创建工作闭包时出现问题