将 HTML 个文档保存到磁盘
Persisting HTML documents to disk
我正在尝试使用 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 结构的指针,因此它不会保存到磁盘。
有什么建议可以让这项工作...?
如何将 R 对象保存到磁盘:
我采用了您的示例代码并生成了工作的、人类可读的、R 可加载的输出,如下所示:
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)
我用 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> \n\tNew Zealand holiday homes, baches and vacation homes for rent. \ ...
# [2] <body id="ctl00_Body" class="Page-List"> \n <div class="SatNavBarPlaceholder"/>
 ...
我正在尝试使用 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 结构的指针,因此它不会保存到磁盘。
有什么建议可以让这项工作...?
如何将 R 对象保存到磁盘:
我采用了您的示例代码并生成了工作的、人类可读的、R 可加载的输出,如下所示:
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)
我用 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> \n\tNew Zealand holiday homes, baches and vacation homes for rent. \ ...
# [2] <body id="ctl00_Body" class="Page-List"> \n <div class="SatNavBarPlaceholder"/>
 ...