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

时间:2018-02-08 17:56:16

标签: r xpath rvest

我有一些嵌套在我想要抓取的div标签中的文字。特别是来自MWE的地址(Hillsgrove, Missouri 13231-1123)。这个div标签里面是我想忽略的其他标签。我想在第一个<br />之后抓住当前div标签上的文本。至少我想在没有其他子节点文本的情况下取回字幕+地址,但理想情况下我只想要地址文本。

我正在使用R的rvest包来完成此任务,但这似乎是一个更普遍的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 个答案:

答案 0 :(得分:2)

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

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

你能看到它确实会返回换行符和空格,但这应该很容易被删除。