1.json文件中文解码:

#!/usr/bin/python
#coding=utf-8
#author=dahu
import json
with open('huxiu.json','r') as f:
data=json.load(f)
print data[0]['title']
for key in data[0]:
print '\"%s\":\"%s\",'%(key,data[0][key])

read_from_json

中文写入json:

#!/usr/bin/python
#coding=utf-8
#author=dahu
import json
data={
"desc":"女友不是你想租想租就能租",
"link":"/article/214877.html",
"title":"押金8000元,共享女友门槛不低啊"
}
with open('tmp.json','w') as f:
json.dump(data,f,ensure_ascii=False) #指定ensure_ascii

write_to_json

2.scrapy在保存json文件时,容易乱码,

例如:

scrapy crawl huxiu --nolog -o huxiu.json
$ head huxiu.json
[
{"title": "\u62bc\u91d18000\u5143\uff0c\u5171\u4eab\u5973\u53cb\u95e8\u69db\u4e0d\u4f4e\u554a", "link": "/article/214877.html", "desc": "\u5973\u53cb\u4e0d\u662f\u4f60\u60f3\u79df\u60f3\u79df\u5c31\u80fd\u79df"},
{"title": "\u5f20\u5634\uff0c\u817e\u8baf\u8981\u5582\u4f60\u5403\u836f\u4e86", "link": "/article/214879.html", "desc": "\u201c\u8033\u65c1\u56de\u8361\u7740Pony\u9a6c\u7684\u6559\u8bf2\uff1a\u597d\u597d\u7528\u8111\u5b50\u60f3\u60f3\uff0c\u4e0d\u5145\u94b1\uff0c\u4f60\u4eec\u4f1a\u53d8\u5f3a\u5417\uff1f\u201d"},

结合上面保存json文件为中文的技巧:

settings.py文件改动:

ITEM_PIPELINES = {
'coolscrapy.pipelines.CoolscrapyPipeline': 300,
}

注释去掉

pipelines.py改成如下:

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
# import codecs class CoolscrapyPipeline(object):
# def __init__(self):
# self.file = codecs.open('data_cn.json', 'wb', encoding='utf-8') def process_item(self, item, spider):
# line = json.dumps(dict(item),ensure_ascii=False) + '\n'
# self.file.write(line) with open('data_cn1.json', 'a') as f:
json.dump(dict(item), f, ensure_ascii=False)
f.write(',\n')
return item

注释的部分是另一种写法,核心在于settings里启动pipeline,会自动运行process_item程序,所以就可以保存我们想要的任何格式

此时终端输入命令

scrapy crawl huxiu --nolog

如果仍然加 -o file.json ,file和pipeline里定义文件都会生成,但是file的json格式仍然是乱码。

3.进一步

由上分析可以得出另一个结论,setting里的ITEM_PIPELINES 是控制着pipeline的,如果我们多开启几个呢:

ITEM_PIPELINES = {
'coolscrapy.pipelines.CoolscrapyPipeline': 300,
'coolscrapy.pipelines.CoolscrapyPipeline1': 300,
}
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
# import codecs class CoolscrapyPipeline(object):
# def __init__(self):
# self.file = codecs.open('data_cn.json', 'wb', encoding='utf-8') def process_item(self, item, spider):
# line = json.dumps(dict(item),ensure_ascii=False) + '\n'
# self.file.write(line) with open('data_cn1.json', 'a') as f:
json.dump(dict(item), f, ensure_ascii=False)
f.write(',\n')
return item
class CoolscrapyPipeline1(object): def process_item(self, item, spider):
with open('data_cn2.json', 'a') as f:
json.dump(dict(item), f, ensure_ascii=False)
f.write(',hehe\n')
return item

pipelines.py

运行:

$ scrapy crawl huxiu --nolog
$ head -n  data_cn*
==> data_cn1.json <==
{"title": "押金8000元,共享女友门槛不低啊", "link": "/article/214877.html", "desc": "女友不是你想租想租就能租"},
{"title": "张嘴,腾讯要喂你吃药了", "link": "/article/214879.html", "desc": "“耳旁回荡着Pony马的教诲:好好用脑子想想,不充钱,你们会变强吗?”"}, ==> data_cn2.json <==
{"title": "押金8000元,共享女友门槛不低啊", "link": "/article/214877.html", "desc": "女友不是你想租想租就能租"},hehe
{"title": "张嘴,腾讯要喂你吃药了", "link": "/article/214879.html", "desc": "“耳旁回荡着Pony马的教诲:好好用脑子想想,不充钱,你们会变强吗?”"},hehe

可以看到两个文件都生成了!而且还是按照我们想要的格式!

scrapy中输出中文保存中文的更多相关文章

  1. python3中OpenCV imwrite保存中文路径文件

    原先一段将特征值保存为图片的代码,这部分学生的电脑上运行没有生成图片 代码的基本样子是: import os import cv2 import numpy as np def text_to_pic ...

  2. MyEclipse右键new菜单项的设置 及 Eclipse中各种文件不能保存中文的问题

    有时候,myeclipse右键new的时候经常出现一些ejb等文件你懂的,很是恶心~~ Window --> Customize Perspective --> Submenus --&g ...

  3. iText中输出中文

    原文链接 http://hintcnuie.iteye.com/blog/183690 转载内容 iText中输出中文,有三种方式: 1.使用iTextAsian.jar中的字体 BaseFont.c ...

  4. iText中输出 中文

    iText中输出中文,有三种方式: 1.使用iTextAsian.jar中的字体    BaseFont.createFont("STSong-Light", "UniG ...

  5. JAVA- JSP中解决无法在Cookie当中保存中文字符的问题

    因为cookie的值是ASCII字符,不能直接把自定义cookie的值直接赋值为中文,但是要实现这个功能,还是有方法的. 1.java中已经给我们提供了方法,此时只需要导入该包就行 <%@ pa ...

  6. 织梦后台系统设置在PHP5.4环境中不能保存中文参数的解决方法

    在没用PHP5.4的环境做Dede后台的时候,织梦58一直没有遇到这个问题,昨天上传一个新的模版到空间去测试发现后台的系统基本参数设置中所有的中文内容都无法保存,关于这个问题,其实以前也听说过,知识一 ...

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

    不了解编码的,需要先补下:http://www.cnblogs.com/jiangtu/p/6245264.html 在学习&使用scrapy抓取网上信息时,发现scrapy 会将含有中文的f ...

  8. EF 连接MySQL 数据库  保存中文数据后乱码问题

    EF 连接MySQL 数据库  保存中文数据后乱码问题 采用Code First 生成的数据库,MySQL数据库中,生成的表的编码格式为***** 发现这个问题后,全部手动改成UTF8(图是另一个表的 ...

  9. 处理SecureCRT中使用vim出现中文乱码问题

    处理SecureCRT中使用vim出现中文乱码问题 引用原文:http://blog.chinaunix.net/uid-20639775-id-3475608.html因为cat没有问题,定位是vi ...

随机推荐

  1. lua io.read()

    io.read(...) 从文件中读取内容,还有另外一种写法就是 file:read() 后面可以跟的读取方式有: (1) "n"  读取一个数字,这是唯一一个返回数字而不是字符串 ...

  2. windows server 2008开启共享文件设置

    之前设置过共享文件,将共享文件映射成磁盘,重新去设置另外服务器的时候,又到网络上找,特此记录 设置网络共享需要开启的服务如下: 以下服务都相关,需要全部开启后才能保证共享正常:1,UPnP Devic ...

  3. win10:在关闭防火墙下如何屏蔽特定端口

    如果win10没有组策略,请参考:https://www.cnblogs.com/huiy/p/9291392.html 在"开始"菜单选择"运行",输入&qu ...

  4. Tornado学习笔记(三) 请求方式/状态码

    本章我们来学习 Tornado 支持的请求方式 请求方式 Tornado支持任何合法的HTTP请求(GET.POST.PUT.DELETE.HEAD.OPTIONS).你可以非常容易地定义上述任一种方 ...

  5. linux软件安装、rpm操作命令、本地yum配置(有什么用)

    1.yum是什么? yum的全称是yellow dog updater,modified,是一个shell前端软件包管理器;基于RPM包管理,能够从指定的服务器下载RPM包并自动安装,可以自动处理依赖 ...

  6. 在v-html中,js 正则表达式清除字符串里的style属性

    项目中遇到这样的需求,后端返回的是字符串,在vue用v-html显示,里面有style样式,要去除style 在v-html中使用filters,和平时的不一样,推荐项目的方法,定义一个全局的过滤方法 ...

  7. 一篇文章让你了解Android各个版本的历程

    2008年--至今 Android 1.5(Cupcake纸杯蛋糕): 智能虚拟键盘:使用widgets实现桌面个性化:在线文件夹(Live Folder)快速浏览在线数据:视频录制和分享:图片上传: ...

  8. Confluence 6 安全相关问题提交链接

    找到和报告安全漏洞 Atlassian 有关安全漏洞的报告细节,请参考如何报告一个安全问题(How to Report a Security Issue)链接. 发布 Confluence 安全公共 ...

  9. Confluence 6 数据库表-内容(Content)

    这部分的内容描述了有关 Confluence 存储内容所使用的表格.内容是用户在 Confluence 存储和分享的信息. attachmentdata 附件文件的二进制数据.当 Confluence ...

  10. ios 逆向编程(环境搭建)

    首先如果你想要逆向其他的APP 动态的查看 或者修改人家APP里面的东西 1, 首先要有一台越狱的手机 最好是9.1以下的,因为9.2以上(包括9.2)就不能完美越狱了 2,手机也要5s以上的(因为从 ...