2016-03-15 25 views
2

我試圖用R.應堅持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 HTML對象保存到磁盤上,而這最終將大約300單獨的文件保存到磁盤。理想情況下,我希望將單個R對象保存到包含這300個文檔的磁盤。

由於某種原因,在保存之前將每個文檔轉換爲文本不起作用。例如,下面將產品的一些怪異(無益)錯誤:

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

如果我嘗試使用的xml2::read_html()輸出它是一個指向一個C的結構,因此,這將不會持續到磁盤。

任何建議讓黑客做這項工作......?

+0

把它們放在一個列表,然後使用'saveRDS'? – alistaire

+0

無法使用@alistaire。 saveRDS創建的對象不包含數據...只是一些指向c對象的指針。 :( – markthekoala

回答

0

我管理它與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 ... 
+0

它是一個美容@alistaire。謝謝。 – markthekoala

0

如何保存[R對象到磁盤:

Save R Objects

我把你的示例代碼和生產的工作,人類可讀的,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) 
+0

你需要引用你的答案中的鏈接的相關部分以防萬一目的地發生變化 – alistaire

+0

謝謝@JLB你發佈的代碼在線上破解了我(xml2 :: read_html(str_html))mmmm我不是確定它在哪裏做...? – markthekoala