【问题标题】:Python lxml XPath problemPython lxml XPath 问题
【发布时间】:2011-07-17 00:51:51
【问题描述】:

我正在尝试从网页打印/保存某个元素的 HTML。
我已经从 firebug 中检索了请求元素的 XPath。

我只想将此元素保存到文件中。 我似乎没有成功。
(在最后尝试了有和没有/text() 的 XPath)

如果有任何帮助或过去的经验,我将不胜感激。
10 倍,大卫

import urllib2,StringIO
from lxml import etree

url='http://www.tutiempo.net/en/Climate/Londres_Heathrow_Airport/12-2009/37720.htm'
seite = urllib2.urlopen(url)
html = seite.read()
seite.close()
parser = etree.HTMLParser()
tree = etree.parse(StringIO.StringIO(html), parser)
xpath = "/html/body/table/tbody/tr/td[2]/div/table/tbody/tr[6]/td/table/tbody/tr/td[3]/table/tbody/tr[3]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/text()"
elem = tree.xpath(xpath)


print elem[0].strip().encode("utf-8")

【问题讨论】:

标签: python xpath lxml


【解决方案1】:

你的 XPath 显然有点太长了,你为什么不试试更短的,看看它们是否匹配。一个问题可能是浏览器在 DOM 中自动创建的“tbody”,但 HTML 标记通常不包含它。

这是一个如何使用 XPath 结果的示例:

>>> from lxml import etree
>>> from StringIO import StringIO
>>> doc = etree.parse(StringIO("<html><body>a<something/>b</body></root>"), etree.HTMLParser())
>>> doc.xpath("/html/body/text()")
['a', 'b']

因此,如果需要,您可以将所有文本部分 "".join(...) 放在一起。

【讨论】:

  • @不是太长了。但是,您的评论是绝对正确的。一百万年都不会想到这一点。非常感谢!
【解决方案2】:

不确定我是否完全遵循您想要完成的目标,但最终我认为您正在寻找:

print etree.tostring(elem[0])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 2021-04-23
    • 2019-04-15
    • 1970-01-01
    • 2017-03-21
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多