如何将抓取数据与JSON响应逐行导出至CSV文件?
如何将JSON响应与抓取数据逐行导出至CSV文件
嘿,我来帮你搞定这个需求!要把JSON响应和抓取到的数据按相同格式逐行写入CSV,其实用Python的工具就能轻松实现,下面给你两种常用的方案,你可以根据自己的场景选择:
方案一:用Python标准库csv(轻量无依赖)
如果你的数据量不大,或者不想额外安装第三方库,用Python自带的csv模块就足够了,步骤很清晰:
- 先把JSON响应解析成Python的字典列表(如果还没解析的话,用
json.loads()处理),同时确保抓取的数据也是同格式的字典列表(每个字典对应CSV的一行,键对应表头)。 - 定义CSV的表头,要和数据里的键完全对应。
- 用
csv.DictWriter来自动匹配表头和数据,逐行写入。
代码示例
import csv import json # 示例:解析后的JSON响应数据(字典列表) json_response = json.loads('[{"id":1,"title":"JSON文章1","content":"JSON内容1"},{"id":2,"title":"JSON文章2","content":"JSON内容2"}]') # 示例:抓取到的数据(格式和JSON响应完全一致) scraped_data = [ {"id":3,"title":"抓取文章1","content":"抓取内容1"}, {"id":4,"title":"抓取文章2","content":"抓取内容2"} ] # 合并两个数据集(如果需要写入同一个CSV) all_data = json_response + scraped_data # 定义CSV表头,要和数据的键一一对应 csv_headers = ["id", "title", "content"] # 写入CSV文件 with open("combined_data.csv", "w", newline="", encoding="utf-8") as csv_file: # 创建DictWriter对象,绑定表头 writer = csv.DictWriter(csv_file, fieldnames=csv_headers) # 先写入表头 writer.writeheader() # 逐行写入每一条数据 for row in all_data: writer.writerow(row)
关键细节
newline="":避免Windows系统下写入CSV时出现多余空行。encoding="utf-8":保证中文、特殊字符不会乱码。- 如果JSON是嵌套结构(比如有子字典),需要先把数据扁平化成一维键值对,才能写入CSV(CSV是二维表格,不支持嵌套)。
方案二:用pandas(适合大数据/复杂处理)
如果你需要处理大量数据,或者后续还要做数据分析,pandas会更高效,代码也更简洁:
代码示例
import pandas as pd import json # 解析JSON响应 json_response = json.loads('[{"id":1,"title":"JSON文章1","content":"JSON内容1"},{"id":2,"title":"JSON文章2","content":"JSON内容2"}]') # 抓取数据 scraped_data = [ {"id":3,"title":"抓取文章1","content":"抓取内容1"}, {"id":4,"title":"抓取文章2","content":"抓取内容2"} ] # 转成DataFrame(pandas的表格结构) df_json = pd.DataFrame(json_response) df_scraped = pd.DataFrame(scraped_data) # 合并两个表格,忽略原来的行索引 combined_df = pd.concat([df_json, df_scraped], ignore_index=True) # 写入CSV,不包含行索引,用utf-8-sig让Excel识别编码 combined_df.to_csv("combined_data_pandas.csv", index=False, encoding="utf-8-sig")
关键细节
index=False:避免把pandas的行索引写入CSV。utf-8-sig:解决Excel打开UTF-8编码CSV时的乱码问题。- 如果数据格式不一致,pandas会自动补全缺失值为
NaN,你可以用fillna()来处理这些缺失值。
注意事项
- 一定要保证JSON响应和抓取数据的字段完全一致,否则会出现数据错位或者缺失。如果字段有差异,先统一处理(比如给缺失的字段设置默认值)。
- 如果你的数据不是字典列表,比如是单个字典或者其他格式,要先转换成列表格式再写入。
内容的提问来源于stack exchange,提问作者Gaal Csaba




