2015-11-14 33 views
5

Oto mój kod:Dlaczego lxml nie znajduje ścieżki xpath nadanej przez Inspektora przeglądarki Chrome?

from lxml import html 
import requests 

page = requests.get('https://en.wikipedia.org/wiki/Nabucco') 
tree = html.fromstring(page.content) 
title = tree.xpath('//*[@id="mw-content-text"]/table[1]/tbody/tr[1]/th/i') 
print(title) 

Problem: print (tytuł) drukuje "[]", pusta lista. Spodziewam się, że wydrukuję "Nabucco". Wyrażenie XPath pochodzi z funkcji "Kopiuj XPath" inspektora przeglądarki Chrome.

Dlaczego to nie działa? Czy istnieje rozbieżność między lxml a mechanizmem xpath Chrome? Czy może czegoś brakuje? Jestem trochę nowy w python, lxml i xpath.

+0

Możliwy duplikat [ Dlaczego ta ścieżka nie działa przy użyciu lxml w pythonie?] (Http://stackoverflow.com/questions/23900348/why-does-this-xpath-fail-using-lxml-in-python) –

Odpowiedz

6

Jest to spowodowane znacznikiem tbody. Widać to w przeglądarce, ponieważ tag inserted by the browser.requests nie jest przeglądarką i po prostu pobiera źródło strona jak:

Wymienić:

//*[@id="mw-content-text"]/table[1]/tbody/tr[1]/th/i 

z:

//*[@id="mw-content-text"]/table[1]/tr[1]/th/i 
+2

Lub po prostu użyj '// * [@ id = "mw-content-text"]/table [1] // tr [1]/th/i' i obejmuje oba przypadki. (Zamień '/ tbody' na' // '.) – kjhughes