使用循环向pandas DataFrame加载数据仅保留最后一次循环值的问题求解
问题分析与修复方案
问题原因
- 核心逻辑错误:循环内部每次都重新创建
pd.DataFrame对象,直接覆盖上一轮循环生成的df,历史爬取数据全部被丢弃 - 写入逻辑错误:每次循环都执行
df.to_csv('pagedata.csv'),该方法默认使用覆盖写入模式,旧的文件内容会被新内容替换,最终仅保留最后一次循环的写入结果 - 附加语法问题:初始化df时
data变量尚未定义,运行会直接报错;重复执行了两次data = [[txt,date1,authors1]]属于冗余代码;使用Python内置关键字list作为循环变量,容易引发命名冲突;目标站点为英文站点,language参数错误设置为德语的de,会降低内容解析准确率。
修复后的代码
import csv import newspaper import pandas as pd from newspaper import Article # 提前初始化空列表存储所有爬取数据 all_data = [] lista = ['https://www.dawn.com/news/1643189','https://www.dawn.com/news/1648926/former-pakistan-captain-inzamamul-haq-suffers-heart-attack-in-lahore'] # 避免用list作为循环变量名,修改为url for url in lista: first_article = Article(url=url, language='en') first_article.download() first_article.parse() txt = first_article.text date1 = first_article.publish_date authors1 = first_article.authors # 将单条数据追加到总列表中 all_data.append([txt, date1, authors1]) # 循环结束后统一生成DataFrame并写入csv df = pd.DataFrame(all_data, columns=['txt','date1','authors1']) df.to_csv('pagedata.csv', index=False)
修改说明
- 新增空列表
all_data存储所有爬取结果,循环内仅做数据追加,不会覆盖历史数据 - 把DataFrame实例化和CSV写入操作移到循环外,全量数据采集完成后一次性处理,避免重复覆盖文件
- 修正了循环变量名、language参数的错误,删除了冗余代码,新增
index=False参数避免CSV文件写入多余的索引列。
内容的提问来源于stack exchange,提问作者khawar maqsood
相关产品推荐
相关产品推荐

