在 lxml 中解析 html table 带有中断标记的数据

Parsing html table data with break tags in lxml

当我从记事本

复制粘贴单元格中的数据时,外部应用程序在我的 HTML table 数据中添加了中断标记
<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> 标签

您可以使用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()])

return

['12133', '43434', '65465', '66656']
[]