代码之家  ›  专栏  ›  技术社区  ›  Tyler Rinker DaniM

rvest:xpath在当前节点上获取文本,并删除子节点

  •  2
  • Tyler Rinker DaniM  · 技术社区  · 6 年前

    我有一些嵌套在div标记中的文本,我想获取这些文本。特别是以下MWE的地址( Hillsgrove, Missouri 13231-1123 ). 在这个div标签中还有我想忽略的其他标签。我只想在第一个div标记之后获取当前div标记处的文本 <br /> . 至少我希望返回副标题+地址,而不返回其他子节点文本,但理想情况下,我希望文本仅用于地址。

    我正在使用 rvest 来自R的包来完成此任务,但这似乎是一个更一般的xpath问题。

    MWE公司

    library(xml2); library(rvest); library(dplyr)
    
    minimal <- read_html(
    "<!doctype html>
    <meta charset=utf-8>
    <title>blah</title>
    <div class=\"span4\"> 
        <a href='http://www.stuff.com'>
            <strong>Sub Title</strong>
         </a>
      <br />
      Hillsgrove, Missouri 13231-1123<br />
      <span id=\"phone\">(5555) 555-5555</span><br />
      <a target=\"_blank\" href='http://www.morestuff.com'>www.morestuff.com</a>
      <br /><br />
    </div>"
    )
    
    minimal %>%
        html_nodes(xpath = '//div[@class="span4"]') %>%
        html_text() 
    
    ## [1] " \n    \n        Sub Title\n     \n  \n  Hillsgrove, Missouri 13231-1123(5555) 555-5555www.morestuff.com\n  "
    

    预期结果

    ## Hillsgrove, Missouri 13231-1123
    

    我会满足于

    ## " \n    \n        Sub Title\n     \n  \n  Hillsgrove, Missouri 13231-1123"
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   MrFlick    6 年前

    如果需要当前节点的文本节点,请使用 text()

    minimal %>%
      html_nodes(xpath = '//div[@class="span4"]/text()') %>%
      html_text() 
    # [1] " \n  "                               "\n  "                               
    # [3] "\n  Hillsgrove, Missouri 13231-1123" "\n  "
    

    你能看到它确实返回了换行符和空白,但这应该很容易去掉。