使用Scrapy命令行工具【导出JSON文件】时编码设置
Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0,
使用scrapy命令行工具建立了爬虫项目(startproject),并使用scrapy genspider建立了爬虫,用于抓取某中文门户网站首页的 新闻标题及其链接,全程都在虚拟环境(virtualenv)中执行。
使用scrapy crawl执行爬虫程序并导入一个json文件,此时可以看到,命令行窗口显示的 新闻标题是中文,但在打开导出的json文件时,其新闻标题显示为以\u开头的Unicode编码:

V.S.

文件中的内容并非孤想要的,需要的是 显示为中文。
在胡乱地使用encode('utf-8')、encode('gbk').decode('utf-8')等代码处理后,结果问题未能解决,而且还导致爬虫程序执行发生异常。
直到发现博主“西瓜的瓜”的文章,问题才得以解决:执行scrapy crawl时添加配置 -s FEED_EXPORT_ENCODING=UTF-8。

配置项FEED_EXPORT_ENCODING的官网介绍:

查看scrapy crawl命令的帮助信息:可以看到-o FILE选项是用的“dump”,dump这个词在json模块使用时见到过,而在json中,dump到文件中的非ASCII都被转换为以\u开头的形式。不过,这个帮助信息里面没有说怎么更改或设置。

直到今天(30日)看了Scrapy的Settings文档才对此问题有了更透彻的了解:
给爬虫或爬虫项目添加FEED_EXPORT_ENCODING配置项即可解决问题,这个配置项可以是 命令行级别的(最高)、项目级别的、爬虫级别的;默认情况下,在任何一个地方做了配置,使用-o时输出的文件都会按照这个配置来进行编码。
在西瓜的瓜的博文中,是在命令行中进行设置,最高的优先级(方法一)。
今天尝试了在 爬虫项目 的配置文件settings.py中进行设置,也是可以得到想要的结果的(方法二):此时不需要在命令行中添加FEED_EXPORT_ENCODING选项了。

当然,还有方法三、四、五,就不多说了,大家可以仔细看Scrapy的Settings文档。
后记
怎么设置这个到处的编码是best practices呢?设置到哪一级别?是否需要设置?
在本文的示例中,如果不设置的话,Python读取导出的文件时,使用json的loads也是可以获得正确的内容的。
怎么用代码解决这个问题呢?如果使用命令行的-o的话,无法解决,只有通过自己打开、存储内容的方式解决。
在测试过程中,孤还尝试将配置写到项目的scrapy.cfg中,当然,这是错误的。
使用Scrapy命令行工具【导出JSON文件】时编码设置的更多相关文章
- Python -- Scrapy 命令行工具(command line tools)
结合scrapy 官方文档,进行学习,并整理了部分自己学习实践的内容 Scrapy是通过 scrapy 命令行工具进行控制的. 这里我们称之为 “Scrapy tool” 以用来和子命令进行区分. 对 ...
- 命令行工具解析Crash文件,dSYM文件进行符号化
备份 文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...
- Scrapy命令行工具简介
Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...
- 二、Scrapy命令行工具
本文转载自以下链接:https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/commands.html Scrapy是通过 scrapy 命令行工具 ...
- MYSQL 命令行导入导出数据库文件
MYSQL命令行导入数据库 1.首先通过命令行进入到mysql安装目录的bin目录下,比如我输入的命令为: cd E:\MySQL\MySQL Server 5.5\bin,输入如下命令: mysql ...
- 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...
- 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...
- MySql:mysql命令行导入导出sql文件
命令行导入 方法一:未连接数据库时方法 #导入命令示例 mysql -h ip -u userName -p dbName < sqlFilePath (结尾没有分号) -h : 数据库所在的主 ...
- MySQL命令行导入导出sql文件
linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构(常用):mysqldump -u用户名 -p密码 数据库名 > 数据库名. ...
随机推荐
- 【CF888G】Xor-MST(最小生成树,Trie树)
[CF888G]Xor-MST(最小生成树,Trie树) 题面 CF 洛谷 题解 利用\(Kruskal\)或者\(Prim\)算法都很不好计算. 然而我们还有一个叫啥来着?\(B\)啥啥的算法,就叫 ...
- 【bzoj4542】 Hnoi2016—大数
http://www.lydsy.com/JudgeOnline/problem.php?id=4542 (题目链接) 题意 给出一个素数$P$,一个数串$S$,$m$个询问,每次询问区间$[l,r] ...
- 我们为什么要迁移PHP到HHVM
我们为什么要迁移PHP到HHVM 程序员日志 · 2014-12-26 18:33 简介 该调研是2013年10月份做的,目标是寻找更好的PHP引擎,来代替百度各产品线正在使用的PHP 5.2. 环境 ...
- java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误
情况 myeclipse发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误. 这种情况一般是 .classpath文件设置的输出路径不对导致的. 1.. ...
- 【费用流】【网络流24题】【P4014】 分配问题
Description 有 \(n\) 件工作要分配给 \(n\) 个人做.第 \(i\) 个人做第 \(j\) 件工作产生的效益为 \(C_{i,j}\) .试设计一个将 \(n\) 件工作分配给 ...
- rovio视觉里程计的笔记
rovio是一个紧耦合,基于图像块的滤波实现的VIO. 他的优点是:计算量小(EKF,稀疏的图像块),但是对应不同的设备需要调参数,参数对精度很重要.没有闭环,没有mapping thread.经常存 ...
- Cannot enlarge string buffer containing XX bytes by XX more bytes
在ELK的数据库报警系统中,发现有台机器报出了下面的错误: 2018-12-04 18:55:26.842 CST,"XXX","XXX",21106,&quo ...
- Java Learning之文档注释
文档注释的结构 文档注释主体的开头是一句话,概述类型或成员的作用,应自成一体.后面可跟其他句子或段落,用以详细说明类.接口.方法或字段. 除了这些描述性的段落以外,后也可跟其他段落,数量不限,并且每段 ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- python---django的模块简便使用
一:登录操作 from django.contrib.auth import authenticate,login,logout #可以用来做登录验证 from django.contrib.auth ...