Python,BeautifulSoup迭代文件问题

时间:2014-12-16 23:45:02

标签: python loops csv beautifulsoup

这可能最终成为一个非常新手的问题,因为我是一个新手,但是这里有。

我有一组使用wget获得的.html页面。我想迭代它们并提取某些信息,将它放在.csv文件中。

使用下面的代码,我的程序运行时会打印所有名称,但只有最后一页的信息(即第29.html页)打印到.csv文件。我一开始只尝试了一些文件,大约有1,200个我想进入这种格式。

文件基于以下内容:https://www.cfis.state.nm.us/media/ReportLobbyist.aspx?id=25&el=2014其中页码为id

感谢您的帮助!

from bs4 import BeautifulSoup
import urllib2
import csv


for i in xrange(22, 30):
    try:
        page = urllib2.urlopen('file:{}.html'.format(i))
    except:
        continue
    else:
        soup = BeautifulSoup(page.read())
        n = soup.find(id='ctl00_ContentPlaceHolder1_lnkBCLobbyist')
        name = n.string
        print name

        table = soup.find('table', 'reportTbl')
        #get the rows
        list_of_rows = []
        for row in table.findAll('tr')[1:]:
            col = row.findAll('td')
            filing = col[0].string
            status = col[1].string
            cont = col[2].string
            exp = col[3].string
            record = (name, filing, status, cont, exp)
            list_of_rows.append(record)

        #write to file
        writer = csv.writer(open('lob.csv', 'wb'))
        writer.writerows(list_of_rows)

1 个答案:

答案 0 :(得分:0)

每次不覆盖时都需要追加,使用a,每次通过外循环覆盖open('lob.csv', 'wb')

writer = csv.writer(open('lob.csv', 'ab'))
writer.writerows(list_of_rows)

你也可以在for循环之外声明list_of_rows = []并在最后写一次文件。

如果您还想要第30页,还需要循环range(22,31)