Scrapy的中文输出与存储

一、什么是json

json是一种在编程中常用的数据格式,属于一种轻量级的数据交换格式。json数据常见的基本存储结构有数组和对象两种。

数组结构的存储方式:

["苹果","梨子","葡萄"]

这种数组结构的存储方式,对应的值是通过索引的方式进行获取的,对应关系为:0->"苹果",1->"梨子",2->"葡萄"。

对象结构的存储方式

对象结构的json文件中的数据一般通过{}括起来,里面的数据一般是键值对的形式,键与值之间通过“:”分开,各项数据间通过“,”分开,基本格式为:“{key1:value1,key2:value2...}”,比如:

{"姓名":"hzc","头发":"黑色","皮肤":"黄色"}

Python对象->json对象

import json
dic = {"name":"hzc","sex":"man"}
j1 = json.dumps(dic)
print(dic)
print(j1)
print(type(dic))
print(type(j1))

代码执行结果:

可以看出,json.dumps()函数,它用于将 Python对象编码成json字符串。

下面列出几个常用的参数:

Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(比如中文),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key。

dic = {"name":"hzc",(1,3):"man"}
j1 = json.dumps(dic)
print(j1)# TypeError: keys must be a stringdic = {"name":"hzc",(1,3):"man"}
j2 = json.dumps(dic,skipkeys=True)
print(j2)
# {"name": "hzc"}

ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示。

dic = {"名字":"hzc","性别":"man"}
j3 = json.dumps(dic)
print(j3)
# {"\u540d\u5b57": "hzc", "\u6027\u522b": "man"}dic = {"名字":"hzc","性别":"man"}
j4 = json.dumps(dic,ensure_ascii = False)
print(j4)
# {"名字": "hzc", "性别": "man"}

indent:可以设置json的缩进格式。

dic = {'b':'I', 'a':123, 'c':'100'}
j5 = json.dumps(dic, sort_keys = True, indent = 4)
print (j5)
# {
#     "a": 123,
#     "b": "I",
#     "c": "100"
# }

separators:可以设置json对象的分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(',',':');这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。

dic = {'b':'I', 'a':123, 'c':'100'}
j6 = json.dumps(dic, sort_keys = True, separators = ('$','@'))
print (j6)
# {"a"@123$"b"@"I"$"c"@"100"}

encoding:默认是UTF-8,设置json数据的编码方式。

sort_keys:将数据根据keys的值进行排序。

dic = {'b':'I', 'a':123, 'c':'100'}
j7 = json.dumps(dic, sort_keys = True)
print (j7)
# 输出为:{"a": 123, "b": "I", "c": "100"}

json对象->Python对象

import json
dic = {"name":"hzc","sex":"man"}
j1 = json.dumps(dic)
print(j1)
# {"name": "hzc", "sex": "man"}decode1 = json.loads(j1)
print(decode1)
# {'name': 'hzc', 'sex': 'man'}

json.loads()函数用于将json对象解码为python对象。

存取json文件

如果要将python对象存到json格式的文件中,此时不再用dumps,而是要用dump:

import json
dic_info = {'name':'hzc', 'sex':'男', 'age':21}
file = open ('E://test.json', 'w', encoding='utf-8')
json.dump(dic_info, file,ensure_ascii=False)
file.close()

如果要从json文件中读取内容存入python对象,不再用loads而是要用load:

import json
file = open ('E://test.json', 'r', encoding='utf-8')
hzc = json.load(file)
file.close()
print(hzc)
print(type(hzc))


二、Scrapy的中文存储

下面,我们来学习如何将Scrapy爬虫爬取到的含有中文的数据,存储为json格式的文件。

在这里我们主要进行的是爬取数据的后续处理,所以主要编写与修改的是一个项目中的pipelines文件。

在这里直接给出spiders文件夹下的爬虫文件:

import scrapy
from hzc.items import HzcItem
class MySpider(scrapy.Spider):name = "hzc"start_urls = ['http://www.baidu.com']def parse(self, response):item = HzcItem()item["title"] = response.xpath("/html/head/title/text()")[0].extract()print(item["title"])yield item

该爬虫只是一个简单的获取百度网页title的程序,因为重点在于pipelines,所以在此不另讲爬虫。

打开项目对应文件夹中的pipelines文件,然后修改为如下所示,关键部分已给出注释:

import codecs
import json
class HzcPipeline(object):def __init__(self):self.file = codecs.open("E://hzc.json","w",encoding="utf-8")def process_item(self, item, spider):#通过dic(item)将item转化成一个字典#然后通过json模块下的dumps()处理字典数据line = json.dumps(dict(item), ensure_ascii=False) + "\n"#将line写入到文件中self.file.write(line)return itemdef spider_closed(self, spider):self.file.close()

在项目路径下通过执行命令行:scrapy crawl 项目名 得到生成的json文件:

注:在进行json.dumps()序列化的时候,中文信息会默认使用ASCII编码,所以需要把ensure_ascii参数设置为False,不使ASCII进行编码,这样就可以处理中文信息。

Python3.X网络爬虫学习(六)相关推荐

  1. python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片

    本篇博文在编写时参考了http://cuiqingcai.com/2652.html,向作者表示感谢 一.新的问题与工具 平时在淘宝上剁手的时候,总是会看到各种各样的模特.由于自己就读于一所男女比例三 ...

  2. java jsoup 网络爬虫 学习例子(六)京东和当当商品比价

    java jsoup 网络爬虫 学习例子(六)京东和当当商品比价 package com.iteye.injavawetrust.jdvsdd;import java.util.List;/*** * ...

  3. python网络爬虫学习资料

    第一:Python爬虫学习系列教程(来源于某博主:http://cuiqingcai.com/1052.html) Python版本:2.7 整体目录: 一.爬虫入门 1. Python爬虫入门一之综 ...

  4. 2022年网络我的网络爬虫学习心得

    2022年网络我的网络爬虫学习心得 写在前面 一.心得 二.爬虫项目中所需要的pip模块 1.requests 2.bs4 3.Pandas 4.selenium 5.Scrapy 6.gerapy_ ...

  5. python网络爬虫学习笔记(6)动态网页抓取(一)知识

    文章目录 网络爬虫学习笔记(2) 1 资料 2 笔记 2-1 动态抓取概述 2-2 通过浏览器审查元素解析真实网页地址 2-3 网页URL地址的规律 2-4 json库 2-5 通过Selenium模 ...

  6. java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS

    java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS /** filename getHtml.js* phantomjs.exe 2.0.0* author InJa ...

  7. 关于使用Python3进行网络爬虫的字符问题

    使用Python3进行网络爬虫的时候,对于某一些网页,使用utf-8编码是没有问题的.比如: import urllib.request url = "https://www.baidu.c ...

  8. java jsoup 网络爬虫 学习例子(七)京东和淘宝商品比价 htmlunit

    java jsoup 网络爬虫 学习例子(七)京东和淘宝商品比价 htmlunit package com.iteye.injavawetrust.pricecheck;import java.uti ...

  9. 网络爬虫学习第一弹:urllib库使用

    小道之前有学过一点爬虫,但是面对越来越严峻的就业形势,为了提高自身竞争力,决定系统的学习一下爬虫.用的是崔庆才大大的书.写博作为自己的学习笔记,方便以后复习.欢迎高人补充赐教!小道感激不尽! 网络爬虫 ...

最新文章

  1. Spring对事务管理的支持的发展历程(基础篇)
  2. GoEasy导入依赖的时候报错,包用不了,maven导包
  3. cocos2dx游戏开发简单入门视频教程 (cocos2d-x)- 第3天
  4. 回顾声智科技助力联想智能音箱MINI亮相CES Asia
  5. HBase的java操作,最新API。(查询指定行、列、插入数据等)
  6. Dell’Oro 5年期数据中心报告预测25G/100G端口速率市场快速上升
  7. bin文件用cad打开_bin文件 打开方法_win7如何打开bin 格式的文件图文步骤
  8. pdf转word文档保留原格式 本地离线软件
  9. 极速版RPS选股,一秒出结果的方案是如何实现的!股票量化分析工具QTYX-V2.5.3...
  10. Office server webs app 集成(JAVA)
  11. 如何调用common.js
  12. View基础知识---MotionEvent和TouchSlop
  13. Python面向对象06/反射/双下方法
  14. 为什么英语是程序员的竞争力?
  15. win10安装xshell免费版
  16. 人工智能细分领域龙头企业排行榜单
  17. 设计幸运大转盘h5小游戏总结
  18. python怎么计算相关系数_Python三种方法计算皮尔逊相关系数
  19. 解决 0X000000该内存不能为read 的方法
  20. 洛谷 P1423 小玉在游泳 AC

热门文章

  1. APS计划排程结果的量化评价
  2. Java Web GIS 地理信息系统开发
  3. 关于跨境电商你了解多少!我们应该怎么做跨境电商?(中)
  4. 用Django加PIL做一个证件照模板生成器网页
  5. 计算机控制专业的就业前景,计算机控制管理专业就业前景和就业方向分析
  6. Java知识点整理(SE) IO
  7. [DP] 【UNR #2】积劳成疾
  8. java什么时候触发gc_什么时候触发 GC
  9. Spring boot 日志分档基于log4j2.yml 配置文件
  10. Apache安装配置(Linux)-有手就行