【问题标题】:XPath for @class returning multiple @href attributes?@class 返回多个@href 属性的XPath?
【发布时间】:2016-09-27 14:12:16
【问题描述】:

我正在尝试创建一个 XPath,它将指向按钮的 href 属性(处理分页)。

我的 XPath 如下:

//a[contains(@class, 'h-data-pagination__next')]//@href

返回以下网址:

http://www.bestcolleges.comhttp//www.bestcolleges.com/database/?pg=2

问题在于 XPath 似乎将新 URL 属性添加到旧属性而不是替换它。

【问题讨论】:

    标签: html xml xpath web-scraping extraction


    【解决方案1】:

    问题在于您的 XPath 选择了多个 @href 属性。

    考虑以下 HTML:

    <div>
      <a class="h-data-pagination__next" 
         href="http://www.bestcolleges.com">link 1</a>
      <a class="h-data-pagination__next2" 
         href="http//www.bestcolleges.com/database/?pg=2">link 2</a>
    </div>
    

    您的 XPath 将选择两个 a 元素,因为它们都有 @class 属性,包含子字符串h-data-pagination__next

    修复

    1. 让您对@class 的测试更加具体:

      //a[@class = 'h-data-pagination__next']/@href
      

      或更强大:

      //a[contains(concat(' ', @class, ' '), ' h-data-pagination__next ')]/@href
      
    2. 或者,测试另一个方面,例如链接内容:

      //a[. = 'link 1']/@href
      
    3. 或者,test a combination of the two

    【讨论】:

      【解决方案2】:

      您的文档中有多个&lt;a href=

      所以你得到一个数组结果。不要连接它,而是使用迭代,或者选择例如仅最后一个 href。

      例如//a[0]//@href 应该只选择第一个

      【讨论】:

        猜你喜欢
        • 2012-02-10
        • 2014-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-18
        • 1970-01-01
        • 1970-01-01
        • 2016-02-25
        相关资源
        最近更新 更多