这里是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")
请帮我解决这个问题。谢谢。
编辑:
更详细地解释一下。我需要添加第一节(mono,dono等)的内容。
规则是:除非我遇到了一个新的“break”类,否则该类内的文本应追加到该类以下的任何tr中。