在 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']
[]
当我从记事本
复制粘贴单元格中的数据时,外部应用程序在我的 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']
[]