解决方法
我不得不一次这样做。
一种方法是使用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可能会挂起或崩溃(我不认为?在这种情况下,尝试帮助很多)。而且它容易出现弹出窗口。我不知道,已经有一段时间了,但我认为我应该指出这一点。