如何从<span>和</span>之间的html中检索数据

时间:2014-02-23 02:04:48

标签: html r xpath

我想在亚马逊客户评论中获得从1到5的费率。 我查看了源代码,发现这部分看起来像

<div style="margin-bottom:0.5em;">
    <span style="margin-right:5px;"><span class="swSprite s_star_5_0 " title="5.0 out of 5 stars" ><span>5.0 out of 5 stars</span></span> </span>
    <span style="vertical-align:middle;"><b>Works great right out of the box with Surface Pro</b>, <nobr>October 5, 2013</nobr></span>
  </div>

我希望从

中获得5.0星
<span>5.0 out of 5 stars</span></span> </span>

我如何使用xpathSApply来获取它?

谢谢!

2 个答案:

答案 0 :(得分:7)

我建议使用selectr包,它使用css选择器代替xpath。

library(XML)
doc <- htmlParse('
  <div style="margin-bottom:0.5em;">
    <span style="margin-right:5px;">
     <span class="swSprite s_star_5_0 " title="5.0 out of 5 stars" >
      <span>5.0 out of 5 stars</span></span> </span>
     <span style="vertical-align:middle;">
     <b>Works great right out of the box with Surface Pro</b>, 
     <nobr>October 5, 2013</nobr></span>
  </div>', asText = TRUE
)

library(selectr)
xmlValue(querySelector(doc, 'div > span > span > span'))

更新:如果您要使用xpath,可以使用css_to_xpath中的selectr函数找出相应的xpath命令,在这种情况下,该命令结果为< / p>

"descendant-or-self::div/span/span/span"

答案 1 :(得分:1)

我不知道r,但我可以给你XPath字符串。看来你想要第一个没有属性的跨度文本,这就是:

//span[not(@*)][1]/text()

您可以将此字符串放入xpathSApply。