scrapy导出json中文乱码需设utf-8编码:命令行用-scrapy crawl myspider -o output.json -s feed_export_encoding=utf-8;项目级在settings.py加feed_export_encoding='utf-8';高级用feeds字典或custom_settings按需指定。

Scrapy项目导出JSON文件时中文显示为\uXXXX格式,需要在项目运行前明确指定编码方式,否则导出的文件无法直接用文本编辑器正常查看中文内容。
命令行临时设置编码(最高优先级)
在执行爬虫时直接添加参数,覆盖所有层级配置:
scrapy crawl myspider -o output.json -s FEED_EXPORT_ENCODING=utf-8
这一步操作起来很简单,直接把命令敲完回车就行。注意必须是小写utf-8,写成UTF-8或Utf-8会导致参数不生效,导出仍为Unicode转义序列。
该方式适用于单次调试或CI/CD流程中临时覆盖,无需修改任何源码文件。
项目级统一配置(推荐长期使用)
打开项目根目录下的 settings.py 文件,在末尾新增一行:
FEED_EXPORT_ENCODING = 'utf-8'
保存后,所有通过 -o 导出的 JSON、CSV、XML 文件都会默认使用 UTF-8 编码写入。此设置会作用于整个项目下所有爬虫,无需重复配置。
不要把这一行写进 scrapy.cfg——该文件只识别部署相关参数,写入 FEED_EXPORT_ENCODING 会被完全忽略,且不会报错,容易误以为配置成功。
按导出目标精细控制编码(高级用法)
方法一:使用 FEEDS 字典替代 -o 参数
在 settings.py 中配置:
FEEDS = {
'data/results.json': {'format': 'json', 'encoding': 'gb18030'},
'data/export.csv': {'format': 'csv', 'encoding': 'utf-8-sig'}
}
这样可对不同格式、不同路径的导出文件分别指定编码,比如导出 CSV 给 Excel 打开必须加 utf-8-sig 才能避免乱码。
方法二:在爬虫类内部动态指定
在 Spider 类中定义 custom_settings:
custom_settings = {
'FEED_EXPORT_ENCODING': 'utf-8'
}
该设置仅对该爬虫生效,适合同一项目中部分爬虫需兼容旧系统(如只认 GBK)的场景。











