@class的XPath返回多个@href属性?

时间:2016-09-27 14:12:16

标签: html xml xpath web-scraping extraction

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

我的XPath如下:

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

返回以下网址:

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

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

2 个答案:

答案 0 :(得分: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元素,因为它们都具有{em>包含子字符串的@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

答案 1 :(得分:0)

您的文档中有多个<a href=

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

e.g。 //a[0]//@href应该选择第一个