使用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中,当然,这是错误的。

原文地址:https://www.cnblogs.com/luo630/p/9247877.html

时间: 2024-12-16 07:20:41

使用Scrapy命令行工具【导出JSON文件】时编码设置的相关文章

Scrapy命令行工具简介

Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spider)程序,然后使用scrapy crawl命令执行Spider. 这种方式很初级.繁琐,不适合更大型的项目. 很好的是,Scrapy提供了 命令行工具(Command line tool),通过这套工具,开发者可以轻松建立 Scrapy项目,而不仅仅是一个一个的Spider程序. 初见Scrapy命

菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我们可以直接添加Microsoft.AspNetCore.All 安装完成之后,我们可以通过using Microsoft.Extensions.Configuration;来进行后续的配置 static void Main(string[] args) { var builder = new Con

[Windows]_[中级]_[使用命令行工具dumpbin分析文件]

dumpbin(vs自带) 1. 导出lib文件的函数符号(symbols) dumpbin /exports zlib1.lib Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file zlib1.lib File Type: LIBRARY Exports ordinal name 1 [email pr

怎么在命令行格式化输出json文件

见这里: http://stackoverflow.com/questions/352098/how-can-i-pretty-print-json 我选了一个最简单的,只需要通过npm安装: sudo npm install -g json 用起来也十分简单,比如cat sample.json|json 然后就是摘要中功能的实现了. 很简单,只需要把待处理的文本复制到剪切板.然后执行pbcopy < <(pbpaste|json)即可.不要太爽.

以cmd命令行方式执行php文件时,传递参数

1. php自带的两个参数$argc, $argv: 1.1. $argv : (后面的v是variables的意思),传递进来的参数会以数组的方式保持在这个变量里 1.2. $argc : (后面的c是count的意思),保持$argv中参数的个数,它不是数组 2.例子: 2.1. php代码: <?php if($argc==0) echo "here is no args"; else echo $argc; print_r($argv); ?> 2.2. 运行结果:

Scrapy 1.4 文档 05 命令行工具

在系统命令行中,使用 scrapy 命令可以创建工程或启动爬虫,它控制着 Scrapy 的行为,我们称之为 Scrapy 命令行工具(command-line tool)或 Scrapy 工具(Scrapy tool).紧跟在 scrapy 命令之后的命令属于子命令(我们称之为"命令(commands)"或"Scrapy命令(Scrapy commands)",例如用于新建项目的 startproject 命令). Scrapy 工具包含许多命令,有各自的功能.参数

scrapy系列教程二——命令行工具(Command line tools)

1.命令行工具(Command line tools) Scrapy是通过Scrapy命令行工具进行控制的.这里我们称之为 “Scrapy tool” 以用来和子命令进行区分. 对于子命令,我们称为 “command” 或者 “Scrapy commands”.Scrapy tool 针对不同的目的提供了多个命令,每个命令支持不同的参数和选项. 2.常用命令 官方命令行说明文档 http://scrapy-chs.readthedocs.org/zh_CN/latest/topics/comma

Xcode Command Line Tools(命令行工具)

OS X 10.9 Mavericks正式发布,免费更新,立即去更新看看效果. 不过升级后安装命令行工具(Command Line Tools)时发现官网没有clt的下载安装包了,原来改了,使用命令在线安装. 打开终端,输入命令:xcode-select --install                                                                                                           

OS X 10.9 Mavericks下如何安装Command Line Tools(命令行工具)

OS X 10.9 Mavericks正式发布,免费更新,立即去更新看看效果. 不过升级后安装命令行工具(Command Line Tools)时发现官网没有clt的下载安装包了,原来改了,使用命令在线安装. 打开终端,输入命令:xcode-select --install 选择“安装”,然后同意安装协议. OS X 10.9 Mavericks下如何安装Command Line Tools(命令行工具)