这是html
<table>
<tr>
<td class="break">mono</td>
</tr>
<tr>
<td>c1</td>
<td>c2</td>
<td>c3</td>
</tr>
<tr>
<td>c11</td>
<td>c22</td>
<td>c33</td>
</tr>
<tr>
<td class="break">dono</td>
</tr>
<tr>
<td>d1</td>
<td>d2</td>
<td>d3</td>
</tr>
<tr>
<td>d11</td>
<td>d22</td>
<td>d33</td>
</tr>
</table>
现在我想在 csv 文件中这样输出:
mono c1 c2 c3
mono c11 c22 c33
dono d1 d2 d3
dono d11 d22 d33
但我得到这样的输出:
mono
c1 c2 c3
c11 c22 c33
dono
d1 d2 d3
d11 d22 d33
这是我的代码:
import codecs
from bs4 import BeautifulSoup
with codecs.open('dump.csv', "w", encoding="utf-8") as csvfile:
f = open("input.html","r")
soup = BeautifulSoup(f)
t = soup.findAll('table')
for table in t:
rows = table.findAll('tr')
for tr in rows:
cols = tr.findAll('td')
for td in cols:
csvfile.write(str(td.find(text=True)))
csvfile.write(",")
csvfile.write("\n")
请帮我解决这个问题。谢谢。
编辑:
解释了更多细节。这里我需要添加要附加的第一部分(单声道,多诺等)。
这里的规则是,除非我遇到一个新的“break”类,否则该类中的文本应附加到其下方的任何 tr 中。