【问题标题】:xpath: extract data from a nodexpath:从节点中提取数据
【发布时间】:2012-01-18 09:10:24
【问题描述】:

我正在尝试从网页中添加一些数据。网页结构如下

<li id="yui_3_4_1_1_1326860702769_9706">
<span id="yui_3_4_1_1_1326860702769_9705">Sales rank: </span>
2
</li>

http://www.barnesandnoble.com/w/enders-game-orson-scott-card/1100353963?ean=9781429963930

我需要从上面提取值“2”,标识符必须是“销售排名”

感谢大家的帮助。

【问题讨论】:

    标签: xpath web-crawler xpathnavigator


    【解决方案1】:

    试试这个:

    //descendant::*[@class='product-details box']/ul/li[span='Sales rank: ']/text()
    

    【讨论】:

    • 这会选择多个节点——注意只有空格的文本节点。
    • 真棒这工作:query("//descendant::*[@class='product-details box']/ul/li[span='Sales rank: ']/text()" )->item(0)->nodeValue;
    【解决方案2】:

    您可以尝试使用:

    //div[@class="product-details"]/ul/li[9]
    

    虽然没有测试。

    【讨论】:

    • 问题是它并不总是第 9 个元素 :)
    【解决方案3】:

    使用

    //li[@id='yui_3_4_1_1_1326860702769_9706']
        /span[. = 'Sales rank: ']
          /following-sibling::text()[1]
    

    这将选择字符串值为'Sales rank: ' 的任何span 元素的第一个后续兄弟文本节点,它是id 属性值为'yui_3_4_1_1_1326860702769_9706' 的任何li 元素的子节点。

    【讨论】:

    • 感谢 Dimitre。但是“yui_3_4_1_1_1326860702769_9706”是这些部分的动态生成的数字,因此不能使用它。
    【解决方案4】:

    试试这个,如果有任何问题,请告诉我

    `//li[@id]/*[contains(text(), 'Sales rank')]/following-sibling::node()[1]`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多