Python lxml XPath 问题

5 投票
2 回答
6359 浏览
提问于 2025-04-16 13:52

我想从一个网页上打印或保存某个元素的HTML内容。
我已经通过firebug获取了这个元素的XPath。

我只想把这个元素保存到一个文件里。
但是我似乎没有成功。
(我试过在XPath的末尾加上和不加/text()

如果有人能提供帮助或者分享一下经验,我会非常感激。
谢谢,David

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")

2 个回答

0

我不太确定你想要实现什么,但我觉得你最终想要的是:

print etree.tostring(elem[0])
11

你的XPath看起来有点长,为什么不试试简短一些的呢,看看能不能匹配上。一个可能的问题是“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(...)把所有的文本部分连接在一起。

撰写回答