2016-12-14 15 views
0

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

<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> тег

+0

почему вы не можете разобрать? Появляется ли сообщение об ошибке? Всегда показывать полное сообщение об ошибке (Traceback). – furas

+0

@furas - нет сообщения об ошибке как таковое, проблема в том, что он только анализирует первый элемент, то есть 12133, и пропускает другие значения – vpd

ответ

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'] 
[]