如何使用R从html文件中提取数据

时间:2014-10-06 01:41:36

标签: html r extract

我想从GEO网站上提取一些数据,我该怎么做? 该网站的网址为http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM410750, 我想得到疾病状态"病人,我使用了命令

readLines("http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM410750")

要导入html,我需要的信息是在第288行。有人能帮助我吗?非常感谢你。我会很感激的。

2 个答案:

答案 0 :(得分:5)

通常在问这样的问题时,需要付出一些努力。因此,请考虑通过至少一些努力来说明您下次尝试的确切问题。为了帮助您入门,我们使用XML包并应用XPathstrsplit来获取所需的结果。

library(XML)
doc <- htmlParse("http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM410750")
x <- xpathSApply(doc, "//td[@style='text-align: justify']/text()[preceding-sibling::br][1]",
    function(X) { strsplit(xmlValue(X), ': ')[[1]][2]
})
# [1] "Uninfected"

答案 1 :(得分:3)

看看CRAN Task View: Web Technologies and Services可能值得付出努力。有许多软件包可以让您从远远高于readLines的网页中读取数据。要真正成功地从网络上抓取数据,您确实需要熟悉网络会话和XPath选择器或CSS selector等内容。

即使掌握了这些知识,您仍然需要使用regular expressions来提取所需的数据,因为在尝试将它们用作数据源时,许多网页的格式非常糟糕。

有一个更新的包(在该页面上未提及,因为它还没有在CRAN中),称为rvest,它将这些包中的一些组合成一个,这使得这样的工作比以前更容易。您绝对可以使用它和stringr包来获取所需的数据。以下代码对于您的用例可能非常脆弱(它在很大程度上取决于如何格式化包含<td>的{​​{1}}。如果您可以解决XPath正在做什么以及正则表达式是什么提取,你应该能够根据你的需要定制它。注意它也使用magrittr式的管道。

disease state