2015-08-08 77 views
-1

我使用R來清理存儲在我的硬盤驅動器中的html文件,然後導出爲txt文件。然而,在輸出的文本文件中,我看到了很多奇怪的字符,例如< U + 0093>,< U + 0094> < U + 0093>等等。在我看來,引號或子彈點(或者其他一些)未正確解析/顯示。我該如何解決這個問題?R HTML清理 - 如何擺脫輸出中的奇怪字符?

這裏是original HTML file

下面是我一直使用的代碼:

library(bitops) 
library(RCurl) 
library(XML) 
rawHTML <- paste(readLines("2488-R20130221-C20121229-F22-0-1.htm"), collapse="\n") 
doc = htmlParse(rawHTML, asText=TRUE, encoding="UTF-8") 
plain.text <- xpathSApply(doc, "//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)][not(ancestor::form)]", xmlValue) 
write.table(plain.text, file="2488.txt", row.names=FALSE, col.names=FALSE, quote=FALSE) 

回答

0

如果你只需要文字,你一個做轉換與iconv爲ASCII。此外,您不需要使用write.table此爲writeLines將很好地做到:

library(bitops) 
library(RCurl) 
library(XML) 

rawHTML <- paste(readLines("~/Dropbox/2488-R20130221-C20121229-F22-0-1.htm"), collapse="\n") 
doc <- htmlParse(rawHTML, asText=TRUE, encoding="UTF-8") 
plain.text <- xpathSApply(doc, "//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)][not(ancestor::form)]", xmlValue) 
writeLines(iconv(plain.text, to="ASCII"), "~/Dropbox/2488wl.txt") 

你也可以使用rvest(你還需要iconv):

library(xml2) 
library(rvest) 

pg <- html("~/Dropbox/2488-R20130221-C20121229-F22-0-1.htm") 

target <- "//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)][not(ancestor::form)]" 

pg %>% 
    html_nodes(xpath=target) %>% 
    html_text() %>% 
    iconv(to="ASCII") %>% 
    writeLines("~/Dropbox/2488rv.txt") 

您也可避免管道如果你想要:

converted <- iconv(html_text(html_nodes(pg, xpath=target)), to="ASCII") 
writeLines(converted, "~/Dropbox/2488rv.txt") 
+0

謝謝,我試過'='ASCII''但很多內容都丟失了,而只顯示了幾個「NA」。一旦我將其更改爲UTF-8,結果證明它很好。你知道這是什麼原因嗎? – kxiang

+0

另外,有時線條之間會有相當多的空白,你是否知道如何擺脫它們(即,使輸出更緊密)? – kxiang

+0

很高興UTF-8工作(不知道你需要什麼,雖然我很驚訝UTF-8確實工作)。 ASCII是最兼容的,但限制性更強。我會更新帖子的內容。 – hrbrmstr