Python lxml XPath 问题
我想从一个网页上打印或保存某个元素的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(...)
把所有的文本部分连接在一起。