Очистка HTML-таблицы в Python lxml

Вопрос может показаться простым, но я сталкиваюсь с трудностями в его решении. У меня есть следующая таблица:

<table><tbody>
<tr>
<td>2003</td>
<td><span class="positive">1.19</span> </td>
<td><span class="negative">-0.48</span> </td>
</tr>

Мой код следующий:

 from lxml import etree

 for elem in tree.xpath('//*[@id="printcontent"]/div[8]/div/table/tbody/tr'):
    for c in elem.xpath("//td"):
        if(c.getchildren()): # for the <span> thing
            text = c.xpath("//span/text()")
        else:
             text = c.text

Но я не могу перебирать элементы "td". Я пытался это весь день, но безрезультатно!! Хочу получить 2003. 1.19, а -0.48.

Пожалуйста, помогите!


person user3001408    schedule 06.12.2014    source источник


Ответы (1)


Похоже, у вас есть HTML, а не XML. Поэтому для анализа данных используйте lxml.html, а не lxml.etree. Если data.html выглядит так:

<table><tbody>
<tr>
<td>2003</td>
<td><span class="positive">1.19</span> </td>
<td><span class="negative">-0.48</span> </td>
</tr>

тогда

import lxml.html as LH
tree = LH.parse('data.html')
print([td.text_content() for td in tree.xpath('//td')])

урожаи

['2003', '1.19 ', '-0.48 ']

If

for elem in tree.xpath('//*[@id="printcontent"]/div[8]/div/table/tbody/tr'):

не возвращает никаких elem, вам нужно показать нам достаточно HTML, чтобы помочь нам отладить, почему этот XPath не работает.

person unutbu    schedule 06.12.2014
comment
Браво! Да, я сделал этот XML - ошибка HTML - person user3001408; 06.12.2014