BeautifulSoup - 输出空行“引起一种奇怪的无用

问题描述:

小问题你:-)BeautifulSoup - 输出空行“引起一种奇怪的无用<tr></tr>

我使用BeautifulSoup解析一个表的一个HTML页面的内容。问题是,我的输出文件的每一行(CSV/EXCEL)之间,它拉一个空白行... 这是HTML表的为例(这是非常大的)

<tr><td class="normaltext" valign="TOP">Tesco - United Kingdom&nbsp;&nbsp;</td> 
<td class="normaltext" valign="TOP">CO</td> 
<td class="normaltext" valign="TOP">Unknown&nbsp;&nbsp;</td> 
<td class="normaltext" align="center" valign="top">lol</td></tr> 
<tr><td colspan="5"><hr></td></tr> 
<tr><td class="normaltext" valign="TOP">Tesco - United Kingdom&nbsp;&nbsp;</td> 
<td class="normaltext" valign="TOP">CO</td> 
<td class="normaltext" valign="TOP">Unknown&nbsp;&nbsp;</td> 
<td class="normaltext" align="center" valign="top">lol</td></tr> 
<tr><td colspan="5"><hr></td></tr> 

每< TR >你有这个:< tr> < td colspan =“5”> < hr> </td> </tr>所以它在我的CSV/Excel工作表中放了一个空行。我想在Excel工作表拉的所有信息,但不每一行之间的空行...

这里是我使用的脚本:

rows = tableau[3].findAll('tr') 
for tr in rows: 
    cols = tr.findAll('td', attrs={'class' : 'normaltext'}) 
    y = 0 
    x = x + 1 
    for td in cols: 
     texte_bu = td.text 
     texte_bu = texte_bu.encode('utf-8') 
     texte_bu = texte_bu.strip() 
     ws.write(x,y,td.text) 
     y = y + 1 

非常感谢一个谁可以给我提示,以获得此肋骨*我的输出文件的每一行之间的空白无用行:)

+0

什么是'ws'?这似乎是问题所在。字符串'


'当您包含attrs = {'class':'normaltext'}'时不匹配。 – bossylobster
+0

ws.write带有wb = xlwt.Workbook(encoding ='utf-8')并链接到xlwt,它是一个允许我直接写入excel表的模块。 –

解决方案:当您找到空行时,跳过循环并读入下一行。这样可以避免您为工作簿写入空行。 :)

这是一个工作模拟。我已经添加了一个美化调整,以避免顶部空行被发送出去。希望这可以摆脱你的空白线索:)

from BeautifulSoup import BeautifulSoup 
import xlwt 

text = '''<table><tr><td class="normaltext" valign="TOP">Tesco - United Kingdom&nbsp;&nbsp;</td> 
<td class="normaltext" valign="TOP">CO</td> 
<td class="normaltext" valign="TOP">Unknown&nbsp;&nbsp;</td> 
<td class="normaltext" align="center" valign="top">BULATS</td></tr> 
<tr><td colspan="5"><hr></td></tr> 
<tr><td class="normaltext" valign="TOP">Tesco - United Kingdom&nbsp;&nbsp;</td> 
<td class="normaltext" valign="TOP">CO</td> 
<td class="normaltext" valign="TOP">Unknown&nbsp;&nbsp;</td> 
<td class="normaltext" align="center" valign="top">BULATS</td></tr> 
<tr><td colspan="5"><hr></td></tr><table>''' 

wb = xlwt.Workbook() 
ws = wb.add_sheet('a test sheet') 

soup = BeautifulSoup(text) 
table = soup.find('table') 
rows = table.findAll('tr') 
x = 0 
for tr in rows: 
    cols = tr.findAll('td', attrs={'class' : 'normaltext'}) 
    if not cols: 
     # when we hit an empty row, we should not print anything to the workbook 
     continue 
    y = 0 
    for td in cols: 
     texte_bu = td.text 
     texte_bu = texte_bu.encode('utf-8') 
     texte_bu = texte_bu.strip() 
     ws.write(x, y, td.text) 
     print(x, y, td.text) 
     y = y + 1 
    # update the row pointer AFTER a row has been printed 
    # this avoids the blank row at the top of your table 
    x = x + 1 

wb.save('example.xls') 
+1

家伙,这工作正常!非常感谢您的帮助。这是一种“逻辑”解决方案!谢谢 ! –