如何将多行数据的Python字典写入CSV文件
嘿,我来帮你搞定把爬取到的字典数据写入CSV的问题~
首先得先把你的爬虫代码补全,确保能把页面数据整理成字典列表(这是写入CSV的核心格式),我先帮你完善下爬虫逻辑(你可以根据实际页面结构调整选择器):
import requests from bs4 import BeautifulSoup import re import csv links = ["34519-kevitsa-copper-concentrator-plant", "34520-kevitsa-copper-mine", "34356-glogow-copper-refinery"] data_list = [] # 用来存储所有条目字典的列表 for l in links: page = requests.get(f"https://www.industryabout.com/country-territories-3/2199-finland/copper-mining/{l}") soup = BeautifulSoup(page.content, 'lxml') entry_dict = {} # 这里替换成你实际提取数据的逻辑,比如假设页面是"Key: Value"的行结构 rows = soup.select("div.content-section p") # 改成你实际用的选择器 for row in rows: text = row.get_text(strip=True) # 用正则分割键值对,匹配类似"Plant Name: Kevitsa Concentrator"的格式 match = re.match(r"(.+?):\s*(.+)", text) if match: key = match.group(1).strip() value = match.group(2).strip() entry_dict[key] = value # 可选:给每条数据加上来源标识 entry_dict['source_page'] = l data_list.append(entry_dict)
接下来就可以把这个字典列表写入CSV了,给你两种常用方法:
方法1:用Python内置csv模块(无需额外安装)
这是最基础的方案,不用装第三方库,兼容性拉满:
# 收集所有唯一的表头(把所有字典的键合并,避免漏字段) fieldnames = set() for item in data_list: fieldnames.update(item.keys()) fieldnames = list(fieldnames) # 转成列表格式 # 写入CSV文件 with open('copper_mining_data.csv', 'w', newline='', encoding='utf-8') as csvfile: # 初始化DictWriter,指定表头 writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # 先写表头行 writer.writeheader() # 逐条写入字典数据 for item in data_list: writer.writerow(item)
这样生成的CSV里,每个字典对应一行,缺失的字段会自动留空,不用担心不同页面字段不一致的问题。
方法2:用pandas库(更简洁,适合大数据量)
如果你平时会用数据分析工具,pandas写CSV会更省心:
import pandas as pd # 直接把字典列表转成DataFrame df = pd.DataFrame(data_list) # 写入CSV,index=False表示不生成行索引列 df.to_csv('copper_mining_data_pandas.csv', index=False, encoding='utf-8')
没装pandas的话,先运行pip install pandas安装就行。
小提醒:
- 一定要确保
data_list是字典的列表,每个字典对应一条独立的数据(比如一个工厂/矿山的信息) - 编码选
utf-8能避免特殊字符或中文乱码 - 如果页面结构和我假设的不一样,只需要调整爬虫里提取键值对的逻辑就行,写入CSV的代码不用改
内容的提问来源于stack exchange,提问作者pickenpack
相关产品推荐
相关产品推荐

