print - xpath python




Problema de Python lxml XPath (2)

No estoy seguro de seguir completamente lo que está tratando de lograr, pero al final creo que está buscando:

print etree.tostring(elem[0])

Estoy intentando imprimir / guardar el HTML de un elemento determinado desde una página web.
Recuperé el XPath del elemento solicitado de Firebug.

Todo lo que deseo es guardar este elemento en un archivo. No parece tener éxito en hacerlo.
(Probé el XPath con y sin /text() al final)

Agradecería cualquier ayuda, o experiencia pasada.
10x, 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")

Su XPath es, obviamente, un poco demasiado largo, ¿por qué no prueba los más cortos y ver si coinciden. Un problema podría ser "tbody", que se crea automáticamente en el DOM por los navegadores, pero el marcado HTML generalmente no lo contiene.

Aquí hay un ejemplo de cómo usar los resultados de 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']

Así que podría simplemente "".join(...) todas las partes de texto juntas si es necesario.





lxml