为什么 lxml 找不到 Chrome 检查员给出的 xpath?

Why lxml isn't finding xpath given by Chrome inspector?

这是我的代码:

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 inspector "Copy XPath" 函数。

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

那是因为 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