为什么lxml没有找到Chrome检查员提供的xpath?

时间:2015-11-14 17:57:33

标签: python google-chrome xpath lxml

这是我的代码:

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)

问题:print(title)打印“[]”,空列表。我希望这会打印出“Nabucco”。 XPath表达式来自Chrome检查器“复制XPath”功能。

为什么这不起作用? lxml和Chrome的xpath引擎之间是否存在分歧?或者我错过了什么?我对python,lxml和xpath有些新意。

1 个答案:

答案 0 :(得分:8)

由于tbody标记而导致的。您在浏览器中看到它,因为标记为inserted by the browser. requests不是浏览器,只是按原样下载页面源:

替换:

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

使用:

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