如何在R中读取和解析网页内容

16
3个回答

35

我不太确定你想如何处理那个页面,因为它非常混乱。正如我们在这个著名的stackoverflow问题中重新学到的那样,在html上使用正则表达式并不是一个好主意,所以你一定需要使用XML包来解析它。

这里有一个示例可以帮助你开始:

require(RCurl)
require(XML)
webpage <- getURL("http://www.haaretz.com/")
webpage <- readLines(tc <- textConnection(webpage)); close(tc)
pagetree <- htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE)
# parse the tree by tables
x <- xpathSApply(pagetree, "//*/table", xmlValue)  
# do some clean up with regular expressions
x <- unlist(strsplit(x, "\n"))
x <- gsub("\t","",x)
x <- sub("^[[:space:]]*(.*?)[[:space:]]*$", "\\1", x, perl=TRUE)
x <- x[!(x %in% c("", "|"))]

这将得到一个由网页文本(以及一些javascript)组成的字符向量:
> head(x)
[1] "Subscribe to Print Edition"              "Fri., December 04, 2009 Kislev 17, 5770" "Israel Time: 16:48 (EST+7)"           
[4] "  Make Haaretz your homepage"          "/*check the search form*/"               "function chkSearch()" 

哇塞……我正在爬取一个动态网站,过去7-8小时我都在尝试但一直无法完成——这次终于成功了。真是救命稻草。 - Ali

4

但是如何正确地去掉HTML标记呢?我知道可以编写一个正则表达式,但有没有任何软件包可以使编程过程更加轻松! - Mark

2

我知道你要求用 R,但也许 Python + Beautifulsoup 更适合这里?那么你可以使用 Beautifulsoup 抓取屏幕上的内容,并用 R 进行分析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接