2015-08-31 24 views
0

我試圖打消這個網站ketabejam.ir 我使用python3.4.1和解析我使用LXML 3.4.1
順便說一下我lxml.html.fromstring方法解析它
當我加載該文件對我的解釋,並要求下面的查詢得到的網頁數量,這樣我就可以處理分頁:XPath查詢// * [@ ID =「頁」]返回兩個元素

s = doc.xpath("//*[@id='page']") 

令人驚訝的,我得到結果:

>>>len(s) == 2 
True 

我得到的元素從Firebug的最小的XPath, 地址時,我選擇正常的XPath,查詢流暢運行
它是一個錯誤,或者我做錯了什麼?

回答

1

查看您鏈接頁面的頁面源代碼,頁面中恰好有兩個元素,即id。最有可能的是桌子的頂部之一,另一個是桌子的底部。

副本minimal xpath版本的firebug基於元素的id工作。它僅適用於有id標籤元素,它的格式創建一個XPath -

//*[@id="elementID"] 

這是你做了什麼。

理想情況下,在每個html頁面中,應該只有一個具有特定id的元素,即id應該在頁面中唯一。看起來像firebug的最小xpath取決於此。

在您的上下文中,我認爲這兩個元素都會返回相同的鏈接,因此您可以使用它們繼續進行拼貼。或者如您所示,您可以使用正常的xpath。

2

可以解決這個一般由總是在做一樣的東西:

s = doc.xpath("(//*[@id='page'])[1]") 

...如果你知道你真的只是想匹配的第一個節點,並可以放心地忽略任何後續的人(這似乎就像這種情況下的安全賭注)。