在python中使用lxml解析html页面

时间:2015-08-02 14:02:22

标签: python xpath html-parsing

我想用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)

输出为"[]"

1 个答案:

答案 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()")