跳转到主内容
极星编程网:以代码为星,赴技术山海!

Python爬虫如何存储抓取数据_使用pandas将抓取内容保存为CSV

CSV保存失败主因有四:①Windows下Excel默认读gbk或utf-8-sig,须用encoding='utf-8-sig';②含换行符/逗号字段需清洗或quoting=csv.QUOTE_ALL;③大数据量应分块追加写入防OOM;④时间字段须统一转datetime64并处理时区。 CSV保存失败:pandas
to_csv()
报错
UnicodeEncodeError
中文或特殊字符写入 CSV 时,
to_csv()
默认用
'utf-8'
编码,但 Windows 下 Excel 默认读取
gbk
或带 BOM 的
utf-8-sig
,直接双击打开就乱码或报错。 实操建议: Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 Windows 环境下务必显式指定
encoding='utf-8-sig'
,这是最稳妥的兼容方案 避免用
encoding='gbk'
—— 遇到 emoji、繁体字、数学符号会直接抛
UnicodeEncodeError
如果后续只用 Python 读(比如再用
pandas.read_csv()
),
encoding='utf-8'
没问题;但只要有人用 Excel 打开,就必须
utf-8-sig
示例:
df.to_csv('data.csv', encoding='utf-8-sig', index=False)
字段含换行符或逗号:CSV 格式被破坏 爬虫 抓到的文本常含
\n
、
\r
或英文逗号(如地址、简介),不处理会导致 CSV 行数错乱、列偏移,Excel 里整行“塌”成一列。 立即学习 “ Python免费学习笔记(深入) ”; 实操建议: pandas 默认用双引号包裹含特殊字符的字段(
quoting=csv.QUOTE_MINIMAL
),但前提是字段是字符串类型;如果字段是
None
或数字,不会自动加引号 提前清洗:用
df[cols] = df[cols].astype(str).str.replace(r'[\r\n,]', ' ', regex=True)
替换掉危险字符(注意保留原意的前提下) 更安全的做法是强制所有字符串字段加引号:
df.to_csv(..., quoting=csv.QUOTE_ALL)
,需先
import csv
数据量大时卡死或内存爆掉 一次性把几百万行 DataFrame 全塞进内存再调
to_csv()
,容易触发 OOM,尤其在低配机器或云函数环境。 实操建议: 别等全部爬完再存 —— 边爬边存,用
mode='a'
追加写入(首次需手动写 header) 控制 chunk 大小:每抓 1000 条就
pd.DataFrame(chunk_list).to_csv(..., mode='a', header=first_write, index=False)
,
first_write
初始为
True
,之后设为
False
避免反复打开/关闭文件句柄;用
open(...)
手动管理文件对象 +
df.to_csv(f, ...)
更可控 时间字段变成数字或时区错乱 爬到的日期字符串(如
"2024-05-20 14:30:00"
)若没转成
datetime64
类型,
to_csv()
会原样输出;但若用了
parse_dates
却忽略时区,可能存成 UTC 时间戳,和原始本地时间对不上。 实操建议: 入库前统一转类型:
df['pub_time'] = pd.to_datetime(df['pub_time'], errors='coerce')
,
errors='coerce'
把非法值变
NaT
而非报错 保存时不强制转时间戳 ——
to_csv()
默认把
datetime64
输出为可读字符串(如
2024-05-20 14:30:00
),除非你设了
date_format
若原始数据有时区(如
"2024-05-20 14:30:00+08:00"
),转完后用
.dt.tz_localize(None)
去时区,避免 Excel 误解析 真正麻烦的不是语法,而是你永远不知道网页里藏了多少种日期格式、空格变体、不可见控制符——多加一行
df.applymap(type)
快速探查,比硬试强得多。

相关文章