在R中只提取HTML页面的文本元素有简单的方法吗?

前端之家收集整理的这篇文章主要介绍了在R中只提取HTML页面的文本元素有简单的方法吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在R中只提取HTML页面的文本元素有简单的方法吗?

我认为这被称为“屏幕抓取”,但是我没有经验,只需要一个简单的方式来提取浏览网址时通常会在浏览器中看到的文字

解决方法

我不得不一次这样做。

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

猜你在找的HTML相关文章