Разбор HTML-таблицы данных с тегами разрыва в lxml

Внешнее приложение добавляет теги разрыва в мои данные таблицы HTML, когда я копирую данные в ячейку из блокнота

<tr>
<td>3.7.4</td>
<td>12133<br />43434<br />65465<br />66656</td>
<td>test</td>
</tr>

который я не могу разобрать с помощью lxml, добавив весь HTML ниже

    <table class="j-table jiveBorder" style="border: 1px solid #c6c6c6;" width="100%">
<thead>
<tr style="background-color: #efefef;">
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.7.4</td>
<td>12133<br />43434<br />65465<br />66656</td>
<td>test</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

Код, который я использовал для разбора этих данных

for tr in table.findall('.//tbody/tr'):    
    data = []  
    data.append([x.text for x in tr[1]])
    print (data)

Код работает отлично, когда нет тегов разрыва и все значения находятся внутри, например <p>12133</p> тег

1 ответ

Решение

Ты можешь использовать itertext()

data = '''<table class="j-table jiveBorder" 
style="border: 1px solid #c6c6c6;" width="100%">
<thead>
<tr style="background-color: #efefef;">
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.7.4</td>
<td>12133<br />43434<br />65465<br />66656</td>
<td>test</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>'''

import lxml.html

soup = lxml.html.fromstring(data)

for tr in soup.xpath('//tbody/tr'):
    print([x for x in tr[1].itertext()])

вернуть

['12133', '43434', '65465', '66656']
[]
Другие вопросы по тегам