这可能最终成为一个非常新手的问题,因为我是一个新手,但是这里有。
我有一组使用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)
答案 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)
。