我想用python中的lxml解析这个Xpath查询。
.//*[@id='content_top']/article/div/table/tbody/tr[5]/td/p/text()
我检查了Firepath中的xpath查询(xpath的firebug扩展名),它可以工作,但我的python代码没有显示任何内容。 这是来源。
from lxml import html
import requests
page = requests.get("http://www.scienzeetecnologie.uniparthenope.it/avvisi.html")
tree = html.fromstring(page.text)
avvisi = tree.xpath(".//*[@id='content_top']/article/div/table/tbody/tr[5]/td/p/text()")
print(avvisi)
输出为"[]"
。
答案 0 :(得分:1)
源html中没有实际的<tbody>
元素,它只是HTML解析器添加的DOM中的一个元素。
firebug实际上显示了DOM(我猜测firepath,这是一个firebug扩展,适用于这个DOM(而不是源代码html))。
有关<tbody>
以及firebug显示原因的更详细说明,请查看SO问题的答案 - Why does firebug add <tbody> to <table>?或此问题 - Why do browsers insert tbody element into table elements?
在您的情况下,从xpath中删除<tbody>
会使其正常工作,示例 -
avvisi = tree.xpath(".//*[@id='content_top']/article/div/table/tr[5]/td/p/text()")