很抱歉问了这么一个基本的问题,但我是编码新手,仍然很难操纵循环/使用不熟悉的库。
我有一段代码,它应该将解析后的数据保存在Excel文件中。但是,它只保存了循环的最后一次迭代。下面是我当前的代码
auto = pd.read_stata(r"D:\StataCopies\workersurlsSample.dta")
df = pd.DataFrame(auto)
filename = r'C:\Users\nglew\Desktop\writingpractice2.xlsx'
i = 0
while i<3:
class QuotesSpider(scrapy.Spider):
name = "spider"
start_urls = [
df.iloc[i,3]
]
def parse(self, response):
trs = response.css('span.wikibase-title')
if trs:
items = []
for quote in trs:
item = {
quote.css('span.wikibase-title-id::text').get().replace('(','').replace(')',''),
}
items.append(item)
df2 = pd.DataFrame(items)
with pd.ExcelWriter(filename, mode='a', engine="openpyxl", if_sheet_exists='overlay') as writer:
df2.to_excel(writer, sheet_name='Sheet1', startrow=i + 1)
i += 1
该代码从我在Stata中的数据库中抓取URL,然后从每个URL中解析数据。
结果应该是一个具有'Q 000000'格式的代码列表。但我只得到了一个单一的代码,当i=2时,而不是3个单独的代码。这是我在excel中的结果
Excel Output
我如何重新格式化循环,以便不仅保存最后一次迭代,而且保存从i=0到i=2的每次迭代?
1条答案
按热度按时间olmpazwi1#
这不是最有效的解决方案,但您可以检查文件是否存在,如果存在,则读取它,然后追加新行。
另外,你的
df2 = pd.DataFrame(items)
调用应该少一个缩进,否则,你将为for/loop
的每次迭代创建一个新的 Dataframe 并保存它。我还建议不要在
while/loop
内创建新的class
,为什么不在while/loop
外定义class
,创建它的示例,然后直接在while
语句内调用它的方法呢?