更新:发现this post同时在墙上扔意大利面并想出了这个,这完全在一个循环中起作用。 csv不漂亮,但它可以适应。
data = []
table = soup.find('table', border=6)
rows = table.findAll('tr')
for row in rows:
cols = row.findAll('td')
cells = [ele.text.strip() for ele in cols]
data = ([ele for ele in cells if ele]) # Get rid of empty values
#print data
record = (data)
writer = csv.writer(open('cpms10.csv', 'ab'))
writer.writerow(record)
我正在尝试使用BeautifulSoup从一系列页面中抓取数据,例如this one。我想以正确的顺序从每个页面的右侧获取数据,列标题从年份开始。
我一直在使用这样的东西,但它没有得到实际的年份,因为第一行有一个填充,它在第一部分后停止;当我想要全部四个时:
table = soup.find('table', border=6)
data = {}
for row in table.findAll('tr')[2:]:
cells = row.findAll('td')
key = cells[0].text.strip()
value = cells[1].text.strip()
data[key] = value
record = (key, value)
writer = csv.writer(open('cpms.csv', 'ab'))
writer.writerow(record)
我尝试在findAll('td')之后添加{'height':'19}和'font'来缩小选择范围,但这不起作用。
这是表格第一部分的HTML,如果你查看整个页面,那么有一个早期的表格和td,直到文档结尾才会关闭。
非常感谢任何想法/帮助!
<table width=845 border=6 cellpadding=0 cellspacing=0 bgcolor=#c0c0c0>
<tr><td height=28 width=19 valign=top bgcolor=#336699> </td>
<td valign=middle colspan=3 bgcolor=#336699><font color=white size=3><b>10-1101 - Department of Transportation - Dept Code:A101101 - Class Code:01101</b></font></td></tr>
<tr><td colspan=4 height=18 valign=top> </td></tr>
<tr><td valign=top rowspan=54> </td>
<td valign=top height=18 width=255 align=left bgcolor=#FFFFB4><font size=2><b>Year</b></td>
<td rowspan=54 width=5 valign=top><img src='images/spacer.gif' width=10></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>2010</td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Appropriation Title</b></td>
<td valign=top BGCOLOR=#FFFFB4><font size=2>DONA ANA CO EAST MESA AREA ROADS & DRAINAGE</td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Fund Code</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>SEVERANCE TAX BONDS</td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>EO 2013-006 Eligibility</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2></td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Bond Sale Date</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>***</td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Bond Series Number</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2></td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Amount of Bond Sale</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>$0 </td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Category</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2></td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Subcategory</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2></td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>County</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>Dona Ana</td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>State Amount</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>$135,000</td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Chapter/Section</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>105 / 18</td></tr>
<tr><td height=18 valign=top align=left bgcolor=#FFFFB4><font size=2><b>Reversion Date</b></td>
<td valign=top align='right' style='{padding-right:150px}' BGCOLOR=#FFFFB4><font size=2>6/30/2014</td></tr>
<tr><TH COLSPAN=2>SHARE/BOF Data</TH> <td height=12</td></tr>