【发布时间】:2015-09-06 01:29:21
【问题描述】:
scrapy 的 json 输出有问题。爬虫效果很好,cli 输出没有问题。 XML 项目导出器正常工作,输出以正确的编码保存,文本没有转义。
- 尝试使用管道并直接从那里保存项目。
- 使用来自 json 库的 Feed Exporters 和 jsonencoder
这些不起作用,因为我的数据包含子分支。
json 输出文件中的 Unicode 文本转义如下: "\u00d6\u011fretmen S\u00fcleyman Yurtta\u015f Cad。"
但是对于 xml 输出文件,它是正确写入的: “Öğretmen Süleyman Yurttaş Cad。”
甚至更改了 scrapy 源代码以包含用于 ScrapyJSONEncoder 的 ensure_ascii=False,但没有用。
那么,有没有办法强制 scrapyjsonencoder 在写入文件时不转义。
编辑1: 顺便说一句,使用 Python 2.7.6 作为 scrapy 不支持 Python3.x
这是标准的scrapy爬虫。蜘蛛文件、设置文件和项目文件。首先从基本 url 开始抓取页面列表,然后从这些页面中抓取内容。从页面中提取的数据被分配给在 scrapy 项目的 items.py 中定义的变量,以 utf-8 编码。这没有问题,因为 XML 输出一切正常。
scrapy crawl --nolog --output=output.json -t json spidername
使用此命令可以正常输出 Xml:
scrapy crawl --nolog --output=output.xml -t xml spidername
我已尝试编辑 scrapy/contrib/exporter/init.py 和 scrapy/utils/serialize.py 以将 ensure_ascii=False 参数插入 json.JSONencoder。
编辑2:
又试了调试,到Python2.7/json/encoder.py代码都没问题。数据完好无损且未转义。之后,由于scrapy异步工作并且有很多回调,因此很难调试。
编辑3:
有点脏 hack,但是在编辑 Python2.7.6/lib/json/encoder.py 并将 ensure_ascii 参数更改为 False 后,问题似乎解决了。
【问题讨论】:
-
这将有助于包含您的一些代码,以及您正在使用的 python 版本
-
你在插入数据库之前尝试过编码吗??
-
在
ScrapyJSONEncoder的参数中设置ensure_ascii=False应该可以正常工作,发布更多关于你在做什么的信息? -
@Jithin 数据未保存到数据库中。输出只是一个普通的 json 文档。
-
@Jithin 我没有使用数据库。它是一个纯文本文件,其中包含 json 数据。它与文本文件的编码无关。问题是数据被转义。 vi、nano、Sublime Text 等都以相同的方式显示,因为保存的数据被转义了。
标签: python json unicode utf-8 scrapy