1.json文件中文解码:

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

read_from_json

中文写入json:

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

write_to_json

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

例如:

  1. scrapy crawl huxiu --nolog -o huxiu.json
  2. $ head huxiu.json
  3. [
  4. {"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"},
  5. {"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文件改动:

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

注释去掉

pipelines.py改成如下:

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Define your item pipelines here
  4. #
  5. # Don't forget to add your pipeline to the ITEM_PIPELINES setting
  6. # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
  7. import json
  8. # import codecs
  9.  
  10. class CoolscrapyPipeline(object):
  11. # def __init__(self):
  12. # self.file = codecs.open('data_cn.json', 'wb', encoding='utf-8')
  13.  
  14. def process_item(self, item, spider):
  15. # line = json.dumps(dict(item),ensure_ascii=False) + '\n'
  16. # self.file.write(line)
  17.  
  18. with open('data_cn1.json', 'a') as f:
  19. json.dump(dict(item), f, ensure_ascii=False)
  20. f.write(',\n')
  21. return item

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

此时终端输入命令

  1. scrapy crawl huxiu --nolog

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

3.进一步

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

  1. ITEM_PIPELINES = {
  2. 'coolscrapy.pipelines.CoolscrapyPipeline': 300,
  3. 'coolscrapy.pipelines.CoolscrapyPipeline1': 300,
  4. }
  1. # -*- coding: utf-8 -*-
  2.  
  3. # Define your item pipelines here
  4. #
  5. # Don't forget to add your pipeline to the ITEM_PIPELINES setting
  6. # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
  7. import json
  8. # import codecs
  9.  
  10. class CoolscrapyPipeline(object):
  11. # def __init__(self):
  12. # self.file = codecs.open('data_cn.json', 'wb', encoding='utf-8')
  13.  
  14. def process_item(self, item, spider):
  15. # line = json.dumps(dict(item),ensure_ascii=False) + '\n'
  16. # self.file.write(line)
  17.  
  18. with open('data_cn1.json', 'a') as f:
  19. json.dump(dict(item), f, ensure_ascii=False)
  20. f.write(',\n')
  21. return item
  22. class CoolscrapyPipeline1(object):
  23.  
  24. def process_item(self, item, spider):
  25. with open('data_cn2.json', 'a') as f:
  26. json.dump(dict(item), f, ensure_ascii=False)
  27. f.write(',hehe\n')
  28. return item

pipelines.py

运行:

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

    原文:https://zhidao.baidu.com/question/1114325744502691499.html 在Navicat for MySQL 管理器中,创建目标数据库(注意:因为是 ...

  2. 一道搜索题【2013 noip提高组 DAY2 t3】华容道

    这篇不多说,具体的解释都在程序里 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果 ...

  3. percona-xtrabackup工具实现mysql5.6.34的主从同步复制

    percona-xtrabackup工具实现mysql5.6.34的主从同步复制 下载并安装percona-xtrabackup工具 # wget https://www.percona.com/do ...

  4. vmware不能装ghost系统怎么解决

    一般情况下一台电脑最好只安装一个系统,因为多系统容易出现问题,所以很多用户都会在Vmware虚拟机上安装其他的系统,为了安装的方便,我们会选择ghost版的系统快速安装,但是有用户遇到vmware虚拟 ...

  5. java中package指什么

    为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间,类似C#的 namespace的作用,防止名字相同的类产生冲突. Java中的一个package(包)就是一个类库单元,包内包含有一组 ...

  6. Golang的单引号、双引号与反引号

    Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String.C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用 ...

  7. STM32L476应用开发之八:便携式气体分析仪项目总结

    在本次项目中,我们实现的实际上是2套设备:便携式氧气分析仪以及便携式甲烷分析仪.但这两台仪器实际使用的主控板我们是设计了一套,所以主控板是适合于这两个设备的. 1.硬件设计 便携式气体分析仪的功能比较 ...

  8. 【MySql】删除操作

    删除表内数据,用 delete.格式为: delete from 表名 where 删除条件; 实例:删除学生表内姓名为张三的记录. delete from student where T_name ...

  9. Windows7上完全卸载Oracle 12c操作步骤

    注:本文来源于:< Windows7上完全卸载Oracle  12c操作步骤 > 1.关闭Oracle所有的服务,按[win+R]运行[services.msc]找到所有Oracle开头的 ...

  10. Confluence 6 升级自定义的站点和空间布局

    随着 Confluence 的演变.默认的站点和空间布局也会随着 Confluence 升级而让使用的所有页面进行改变.随着一些新功能的加入和一些老功能的修改,默认的布局也需要进行修改来支持这些改变. ...