【问题标题】:Scraping html table with images using XML R package使用 XML R 包抓取带有图像的 html 表
【发布时间】:2011-09-07 12:28:30
【问题描述】:

我想使用 R 的 XML 包来抓取 html 表,方法与此线程中讨论的类似:

Scraping html tables into R data frames using the XML package

与我要提取的数据的主要区别在于,我还想要与 html 表中的图像相关的文本。例如,http://www.theplantlist.org/tpl/record/kew-422570 的表格包含一列“信心”,其中的图像显示一到三颗星。如果我使用:

readHTMLTable("http://www.theplantlist.org/tpl/record/kew-422570")

那么“信心”的输出列除了标题之外是空白的。有什么方法可以在此列中获取某种形式的数据,例如链接到相应图像的 HTML 代码?

任何有关如何解决此问题的建议将不胜感激!

【问题讨论】:

    标签: r xml web-scraping html-table


    【解决方案1】:

    您还可以使用elFun 参数在XML book 的第5.2.2.1 节之后提取该属性(我必须添加...以避免未使用的参数错误)

    getCL <- function(node, ...){
    if(xmlName(node) == "td" && !is.null(node[["img"]]))
        xmlGetAttr(node[["img"]], "alt")
      else
        xmlValue(node)
    }
    
    url <- "http://www.theplantlist.org/tpl/record/kew-422570"
    readHTMLTable(url, which=1, elFun = getCL)
    
                                                    Name  Status Confi­-dence level Source
    1                                Elymus arenarius L. Synonym                 H   WCSP
    2 Elymus arenarius subsp. geniculatus (Curtis) Husn. Synonym                 L    TRO
    3                Elymus geniculatus Curtis [Invalid] Synonym                 H   WCSP
    4              Frumentum arenarium (L.) E.H.L.Krause Synonym                 H   WCSP
    5                       Hordeum arenarium (L.) Asch. Synonym                 H   WCSP
    6                            Hordeum villosum Moench Synonym                 H   WCSP
    7                    Triticum arenarium (L.) F.Herm. Synonym                 H   WCSP
    

    【讨论】:

      【解决方案2】:

      这是一个带有更简单 CSS 选择器的 rvest 解决方案:

      library(rvest)
      
      pg <- html("http://www.theplantlist.org/tpl/record/kew-422570")
      pg %>% html_nodes("td > img") %>% html_attr("src")
      
      ## [1] "/img/H.png" "/img/L.png" "/img/H.png" "/img/H.png" "/img/H.png"
      ## [6] "/img/H.png" "/img/H.png"
      

      【讨论】:

        【解决方案3】:

        我能够使用 SelectorGadeget 找到对图像名称的 Xpath 查询

        library(XML)
        library(RCurl)
        d = htmlParse(getURL("http://www.theplantlist.org/tpl/record/kew-422570"))
        path = '//*[contains(concat( " ", @class, " " ), concat( " ", "synonyms", " " ))]//img'
        
        xpathSApply(d, path, xmlAttrs)["src",]
        
        [1] "/img/H.png" "/img/L.png" "/img/H.png" "/img/H.png" "/img/H.png"
        [6] "/img/H.png" "/img/H.png"
        

        【讨论】:

        • 啊——太好了!非常感谢!
        • @tom - 如果这解决了您的问题,请您投票和/或批准答案吗?谢谢!
        • xpath 表达式可以简单得多://table/tbody/tr/td/img
        • @Ramnath - 谢谢 - 我刚刚使用了 SelectorGadget 的输出。
        猜你喜欢
        • 1970-01-01
        • 2010-11-26
        • 2021-06-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 2016-06-14
        相关资源
        最近更新 更多