使用BeautifulSoup刮擦格式不佳的HTML

时间:2015-05-14 21:40:03

标签: python html css beautifulsoup

更新:发现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>&nbsp;</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>&nbsp;</td></tr>
    <tr><td valign=top rowspan=54>&nbsp;</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&nbsp;&nbsp;</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>

0 个答案:

没有答案