我不得不自己做一次。
一种方法是使用 XPath 表达式。您将需要从位于 http://www.omegahat.org/ 的存储库中安装这些软件包
library(RCurl)
library(RTidyHTML)
library(XML)
我们使用 RCurl 连接到感兴趣的网站。它有很多选项可以让您访问基本 R 中的默认功能难以使用的网站,我认为可以这么说。它是 libcurl 库的 R 接口。
我们使用 RTidyHTML 来清理格式错误的 HTML 网页,以便更容易解析。它是 libtidy 库的 R 接口。
我们使用 XML 来解析带有 XPath 表达式的 HTML 代码。它是 libxml2 库的 R 接口。
无论如何,这就是你要做的(最少的代码,但选项可用,请参阅相应功能的帮助页面):
u <- "http://stackoverflow.com/questions/tagged?tagnames=r"
doc.raw <- getURL(u)
doc <- tidyHTML(doc.raw)
html <- htmlTreeParse(doc, useInternal = TRUE)
txt <- xpathApply(html, "//body//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)]", xmlValue)
cat(unlist(txt))
这种方法可能存在一些问题,但我不记得它们是什么(我不认为我的 xpath 表达式适用于所有网页,有时它可能无法过滤掉脚本代码或者它可能根本无法与其他页面一起使用,最好进行实验!)
附:另一种几乎完美的工作方式,我认为在网络上从 html 中抓取所有文本如下(基本上是让 Internet Explorer 为您进行转换):
library(RDCOMClient)
u <- "http://stackoverflow.com/questions/tagged?tagnames=r"
ie <- COMCreate("InternetExplorer.Application")
ie$Navigate(u)
txt <- list()
txt[[u]] <- ie[["document"]][["body"]][["innerText"]]
ie$Quit()
print(txt)
但是,我从来不喜欢这样做,因为它不仅速度慢,而且如果你将它矢量化并应用 URL 的矢量,如果 Internet Explorer 在错误页面上崩溃,那么 R 可能会挂起或崩溃(我不't think ?try 在这种情况下会有很大帮助)。它也容易出现弹出窗口。我不知道,我已经有一段时间没有这样做了,但我想我应该指出这一点。