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

noc*_*ura 5 python xpath lxml google-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)
Run Code Online (Sandbox Code Playgroud)

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

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

ale*_*cxe 8

这是因为tbody标签.您可以在浏览器中看到它,因为浏览器已插入 标记.requests不是浏览器,只是按原样下载页面源:

更换:

//*[@id="mw-content-text"]/table[1]/tbody/tr[1]/th/i
Run Code Online (Sandbox Code Playgroud)

有:

//*[@id="mw-content-text"]/table[1]/tr[1]/th/i
Run Code Online (Sandbox Code Playgroud)

  • 或者只使用`//*[@ id ="mw-content-text"]/table [1] // tr [1]/th/i`并涵盖两种情况.(将`/ tbody`替换为`//`.) (2认同)