scrapy抓取的页面中文会变成unicode字符串

Posted thought

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy抓取的页面中文会变成unicode字符串相关的知识,希望对你有一定的参考价值。

不了解编码的,需要先补下:http://www.cnblogs.com/jiangtu/p/6245264.html

在学习&使用scrapy抓取网上信息时,发现scrapy 会将含有中文的field输出为 unicode字符串形式。

这个原因的根本是,在python中使用json序列化时,如果使用 ensure_ascii 编码就会出现这个问题。并且,json.dumps默认使用的也是这个编码。

在scrapy中,JsonItemExporter 也是默认使用的 ensure_ascii 编码:

1 class JsonItemExporter(BaseItemExporter):
2 
3     def __init__(self, file, **kwargs):
4         self._configure(kwargs, dont_fail=True)
5         self.file = file
6         kwargs.setdefault(\'ensure_ascii\', not self.encoding) # look here
7         self.encoder = ScrapyJSONEncoder(**kwargs)
8         self.first_item = True

可以看到,在第六行,如果不传递值的话,就会默认使用 ensure_ascii 编码。

所以,我们只要在 pipeline 中实例化 exporter 时,传入编码方式即可:

exporter = MyJsonExporter(fi, encoding=\'utf-8\')

然后就ok了。

JSON.dumps()同理。

 

以上是关于scrapy抓取的页面中文会变成unicode字符串的主要内容,如果未能解决你的问题,请参考以下文章

scrapy抓取的中文结果乱码解决办法

Scrapy输出文件格式问题汇总

Scrapy里Selectors 四种基础的方法

使用scrapy抓取电子商务

scrapy——scrapy介绍

scrapy学习Scrapy入门