2012-12-07 53 views
0
page = urlopen(req) 
doc = parse(page).getroot() 
table = doc.xpath('/html/body/div/div/div/table') 
table 
<Element table ...> 
doc.xpath('/html/body/div/div/div/table/tr') 
<Element tr ...>... 
table.xpath('/tr') 
[] 

在解析lxml的子元素爲什麼不table.xpath('/tr')產生doc.xpath('/html/body/div/div/div/table/tr')確實元素的同一個列表?如何通過XPath的

+2

我可能是錯的,但嘗試'table.xpath( './ TR')'或 '// TR'。 – Anorov

+0

目的是什麼?例如 - 網絡抓取或只是別的? –

+0

網絡抓取是的,你爲什麼認爲這是矯枉過正? – user1561108

回答

4

這是因爲以/開頭的xpath始終在文檔根處開始匹配。

爲了避免這種情況,可以將斜線留出,或者明確指出,並使用.來匹配當前元素。這些
要麼應該工作:

table.xpath('tr') 
# or 
table.xpath('./tr')