XPath查找仅包含数字的所有链接?

1 投票
2 回答
1815 浏览
提问于 2025-04-16 15:56

我在网页上找到了包含我想要的链接的元素。这些链接的格式类似于 <a href="blah">1</a>。我想用正则表达式和XPath结合起来,获取所有文本是 \d+ 的链接,也就是数字的链接。

我看到这里有一个相关的回答:如何在lxml的XPath中使用正则表达式? 但我看不太懂。

更具体地说,“注意你需要提供命名空间映射,这样它才能知道XPath表达式中的're'前缀代表什么。”

这是我从页面上整理出来的代码: <div class="pagination"> <b>1</b> <a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=25">2</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=50">3</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=75">4</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=100">5</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=125">6</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=150">7</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=175">8</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=200">9</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=225">10</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=250">11</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=25" alt="next">›</a><a href="?page=post&amp;s=list&amp;tags=tag2+tag1&amp;pid=325" alt="last page">»</a><br><br><br><br><iframe hspace="0" vspace="0" border="0" marginheight="0" marginwidth="0" allowtransparency="true" src="http://notrelevant.com" frameborder="0" height="98" scrolling="no" width="736"></iframe></div>

这是我目前的代码:

answer = browser.open(address)
tree = lxml.html.parse(answer)
numbers = tree.xpath("//div[contains(@class, 'pagination')]")[0]

2 个回答

2

这个XPath表达式不需要用到正则表达式:

//div[
   contains(
      concat(' ',@class,' '),
      ' pagination '
   )
]/a[
  floor()=.
]
2

XPath 并不支持使用正则表达式来进行匹配。

不过,您链接的帖子中提到的扩展功能应该可以让下面的代码正常工作:

//div[contains(@class, 'pagination')]/a[re:match(text(), '^\d+$')]

撰写回答