Разбор 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']
[]