Проблема Python lxml XPath - PullRequest
       17

Проблема Python lxml XPath

5 голосов
/ 17 марта 2011

Я пытаюсь распечатать / сохранить HTML-код определенного элемента с веб-страницы.
Я получил XPath запрошенного элемента из firebug.

Все, что я хочу, это сохранить этот элемент в файл. Кажется, мне это не удается.
(пробовал XPath с и без /text() в конце)

Буду признателен за любую помощь или прошлый опыт.
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")

Ответы [ 2 ]

11 голосов
/ 17 марта 2011

Ваш XPath явно слишком длинный, почему бы вам не попробовать более короткие и посмотреть, соответствуют ли они.Одной из проблем может быть «tbody», который автоматически создается в DOM браузерами, но разметка 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(...) все части текста вместе, если это необходимо.

0 голосов
/ 17 марта 2011

Не уверен, что я полностью следую тому, чего вы пытаетесь достичь, но в конечном итоге я думаю, что вы ищете:

print etree.tostring(elem[0])
...