【问题标题】:how can I extract data from html file using R [closed]如何使用 R 从 html 文件中提取数据 [关闭]
【发布时间】:2014-10-06 01:41:35
【问题描述】:

我想从 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行。有人可以帮助我吗?非常感谢。我会很感激的。

【问题讨论】:

    标签: html r extract


    【解决方案1】:

    通常在提出此类问题时需要付出一些努力。因此,请考虑在下次尝试时至少付出一些努力来说明确切的问题。为了让您从这里开始,是一个使用 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"
    

    【讨论】:

    • 非常感谢,我是R的新手,所以我什至不知道如何开始。
    【解决方案2】:

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

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

    有一个名为rvest 的更新包(该页面上未提及,因为它还没有在 CRAN 中),它将其中的几个包合并为一个,这使得像以前这样的工作比以前容易得多。您绝对可以使用它和stringr 包来获取您需要的数据。以下代码对于您的用例可能非常脆弱(这在很大程度上取决于包含 disease state&lt;td&gt; 的格式。如果您可以了解 XPath 正在做什么以及正则表达式正在提取什么,您应该能够根据您的需要对其进行定制。请注意,它还使用magrittr 样式的管道。

    library(rvest)
    library(stringr)
    
    pg <- html("http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM410750")
    
    disease <- pg %>% 
      html_nodes(xpath="//td[text()[contains(.,'disease state')]]/br[1]/following-sibling::text()[1]") %>% 
      html_text()
    
    state <- str_match(disease, "disease state: ([[:alnum:]]+)")[,2]
    state
    
    ## [1] "Uninfected"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多