Windows10下Scrapy导出CSV去空行且规避编码错误求助
解决Scrapy导出CSV空白行+编码错误问题
嘿,我来帮你搞定这两个头疼的问题:导出CSV时的隔行空白,还有修改后触发的UnicodeEncodeError,其实用一个方法就能同时解决,看下面的具体步骤:
1. 自定义CSV导出器
在你的Scrapy项目根目录下新建一个exporters.py文件(如果已经有就直接用),把下面的代码放进去:
from scrapy.exporters import CsvItemExporter class UTF8CsvItemExporter(CsvItemExporter): def __init__(self, file, include_headers_line=True, join_multivalued=',', **kwargs): # 强制用UTF-8编码,避免特殊字符编码失败 super().__init__(file, include_headers_line=include_headers_line, join_multivalued=join_multivalued, encoding='utf-8', **kwargs) # 修改换行符为'\n',解决Windows下CSV隔行空白的问题 self.csv_writer.lineterminator = '\n'
2. 配置项目使用自定义导出器
打开项目里的settings.py,添加这段配置(记得把your_project_name换成你实际的项目名称):
FEED_EXPORTERS = { 'csv': 'your_project_name.exporters.UTF8CsvItemExporter', }
3. 重新执行导出命令
还是用你原来的命令就行:
scrapy crawl jobs -o items.csv
为什么这招管用?
- 隔行空白问题:Python3的csv模块默认用
'\r\n'作为换行符,在Windows环境下导出时就会出现多余的空行,改成'\n'就完美解决了。 - 编码错误问题:默认的CSV导出器用的是系统默认编码(你的环境里是cp1252),而你爬取的内容里有这个编码不认识的字符,指定
utf-8编码就能兼容所有Unicode字符,不会再触发编码失败的错误。
如果不想自定义导出器,也可以直接用命令行参数快速解决,执行这个命令就行:
scrapy crawl jobs -o items.csv -s FEED_EXPORT_ENCODING=utf-8 -s FEED_EXPORT_CSV_LINE_TERMINATOR='\n'
这个方法不用改代码,适合临时测试用。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

