2011-04-18 19 views
1

我在頁面中選擇了包含我想要到頁面的鏈接的元素。他們有點像<a href="blah">1</a>。我想用xpath使用正則表達式,這樣我就可以得到所有這樣的鏈接,其文本是\d+XPath找到所有隻有數字的鏈接?

我看到這裏有一個答案:How to use regular expression in 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

XPath做不提供匹配正則表達式的手段。

擴展在後用於爲其鏈接應該允許以下工作,雖然:

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

您寫了_「XPath不提供匹配正則表達式的方法」_。 **這是錯誤的**。這是最後一個XPath規範http://www.w3.org/TR/xpath20/ – 2011-04-18 13:07:14

2

你不需要正則表達式這個XPath表達式:

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

+1一個正確的答案。 – Flack 2011-04-18 05:12:27