将HTML文档保留到磁盘

时间:2016-03-15 22:25:51

标签: html r persistence

我正在尝试使用R。

将大约300个HTML对象保存到磁盘
str_url <- "https://www.holidayhouses.co.nz/Browse/List.aspx?page=1"
read_html_test1 <- xml2::read_html(str_url)

xml2::write_xml(read_html_test1, "testwrite.html")
read_html <- xml2::read_html("testwrite.html")

但这最终会将大约300个单独的文件保存到磁盘。理想情况下,我希望将单个R对象保存到包含这300个文档的磁盘。

由于某种原因在保存之前将每个文档转换为文本不起作用。例如,以下将产生一些奇怪的(无用的)错误:

str_html <- as.character(read_html_test1)
xml2::read_html(str_html)

如果我尝试使用xml2::read_html()的输出,那么它是一个指向C结构的指针,因此它不会持久存储到磁盘。

任何有关黑客攻击的建议......?

2 个答案:

答案 0 :(得分:1)

我使用httr包管理它,content函数可以使用as = "text"参数,这会阻止它解析HTML。

library(xml2)
library(httr)

str_url <- "https://www.holidayhouses.co.nz/Browse/List.aspx?page=1"

# use `GET` to make the request, and pull out the html with `content`; returns text string
x <- content(GET(str_url), as = 'text')

# make a list of html documents to save
list_xs <- list(x, x)

# save list with `saveRDS`
saveRDS(list_xs, 'test.rds')

现在看看它是否有效:

# read in rds file we saved
saved_html <- readRDS('test.rds')

# parse the second element in it with `xml2::read_html`
saved_x_parsed <- read_html(saved_html[[2]])

# and let's see...
saved_x_parsed

# {xml_document}
# <html>
# [1] <head><title>&#13;\n\tNew Zealand holiday homes, baches and vacation homes for rent.&#13;\ ...
# [2] <body id="ctl00_Body" class="Page-List">&#13;\n    <div class="SatNavBarPlaceholder"/>&#13 ...

答案 1 :(得分:0)

如何将R对象保存到磁盘:

Save R Objects

我使用了您的示例代码并生成了可工作的,人类可读的R-loadable输出,如下所示:

str_url <- "https://www.holidayhouses.co.nz/Browse/List.aspx?page=1"
read_html_test1 <- xml2::read_html(str_url)
str_html <- as.character(read_html_test1)
x <- xml2::read_html(str_html)
save(x, file="c:\\temp\\text.txt",compress=FALSE,ascii=TRUE)