BeautifulSoup - 输出空行“引起一种奇怪的无用
问题描述:
小问题你:-)BeautifulSoup - 输出空行“引起一种奇怪的无用<tr></tr>
我使用BeautifulSoup解析一个表的一个HTML页面的内容。问题是,我的输出文件的每一行(CSV/EXCEL)之间,它拉一个空白行... 这是HTML表的为例(这是非常大的)
<tr><td class="normaltext" valign="TOP">Tesco - United Kingdom </td>
<td class="normaltext" valign="TOP">CO</td>
<td class="normaltext" valign="TOP">Unknown </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 </td>
<td class="normaltext" valign="TOP">CO</td>
<td class="normaltext" valign="TOP">Unknown </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
非常感谢一个谁可以给我提示,以获得此肋骨*我的输出文件的每一行之间的空白无用行:)
答
解决方案:当您找到空行时,跳过循环并读入下一行。这样可以避免您为工作簿写入空行。 :)
这是一个工作模拟。我已经添加了一个美化调整,以避免顶部空行被发送出去。希望这可以摆脱你的空白线索:)
from BeautifulSoup import BeautifulSoup
import xlwt
text = '''<table><tr><td class="normaltext" valign="TOP">Tesco - United Kingdom </td>
<td class="normaltext" valign="TOP">CO</td>
<td class="normaltext" valign="TOP">Unknown </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 </td>
<td class="normaltext" valign="TOP">CO</td>
<td class="normaltext" valign="TOP">Unknown </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
家伙,这工作正常!非常感谢您的帮助。这是一种“逻辑”解决方案!谢谢 ! –
什么是'ws'?这似乎是问题所在。字符串'
ws.write带有wb = xlwt.Workbook(encoding ='utf-8')并链接到xlwt,它是一个允许我直接写入excel表的模块。 –