在前面的某一篇中,说完了pickle,但我相信好多朋友都不懂到底有什么用,那么到了爬虫篇,它就大有用处了,而和pickle很相似的就是JSON模块

JSON

1.简介

1)JSON(JavaScript Object Notation) ,js对象标记,是一种轻量级的数据交换格式。它易于阅读和编写,同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集,所以有另一个说法,JSON 语法是 JavaScript 对象表示语法的子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等),它通用于几乎所有的编程语言以及Web开发

2)JSON建构于两种结构:“名称/值”对的集合(A collection of name/value pairs)(是不是有点类似字典啊?),不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array),所以使得一种数据格式在同样基于这些结构的不同编程语言之间能够实现数据交换

3)JSON 值可以是:
  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

2.方法/属性

json从Python2.6开始加入了JSON模块,所以它已经是内置模块,不用安装

其实方法/属性并不多对吧?

3.常用方法/属性解析

最常用的就这几个:

dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw):对文件的序列化

dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw):对对象的序列化

load(fp, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):对文件的反序列化

loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):对对象的反序列化

以上的是官方文档里的,参数太多了对吧,其实基本很少用,你知道pickle的dump/dumps和load/loads怎么用就行了,效果是一样的。

 json的序列化和反序列化的过程就是对对象的数据来回转化,这种就叫序列化与反序列化,或者叫编码与解码,相互关系:

序列化(dump/dumps):(这里只是针对python而言,当然可以序列化和反序列化为其他对象)

反序列化(load/loads)

例1:使用dumps和loads

#-*- coding:utf-8 -*-
import json
test={'username':'yang','password':'test','from':'中国'}
temp=json.dumps(test)
print(temp)
cont=json.loads(temp)
print(cont)

结果:

python3下:

python2下,因为python2下默认是用ASCII码,所以中文显示不正常,这里就可以用dumps的ensure_ascii参数解决:

但是只是dumps转为字符串时可以正常显示,当loads转为原对象还是这样,因为默认编码ASCII,单个输出是没问题的:

所以一般在不能显示中文时我都直接使用的是python3,这个问题前面也说过了,不再多说

例2:使用dump和load

#-*- coding:utf-8 -*-
import jsonf=open('test.txt','w')
test={'username':'yang','password':'test','from':'中国'}
json.dump(test,f)
f.close()f=open('test.txt','r')
cont=json.load(f)
print(cont)
f.close()

先打开test.txt文件看看:

再看运行结果:

有没有发现其实和pickle模块很相似,那么就用这个例子,改成用pickle看看:

发现报错了,问题出在哪呢?出在打开方式,pickle打开必须是一个二进制方式,使用'wb'和‘rb’后成功运行

再看test.txt文件成了什么:

成了一堆乱码对吧

到底json和pickle有什么异同和区别呢?

4.json与pickle模块的异同点

相同点:

  • json和pickle模块,两个都是用于序列化的模块
  • 两个模块都提供了dumps,dump,loads,load 4个功能

不同点:

  • json用于不同语言之间数据交换,多种语言通用,而pickle只在于python,是python特有
  • JSON只能处理基本数据类型,并且json只能是字符串格式;pickle能处理所有Python的数据类型(包括类,自定义函数,模块,包等python的一切)
  • pickle写入和读取文件时,用的是 ‘b'模式,而json不用加‘b’
  • pickle反序列化后的对象与原对象是等值的副本对象,类似与deepcopy,而json是原对象
  • json传输速度较慢,pickle较快,对大型数据的转换就能很明显的体现出来

5.json与爬虫有什么关系

在后期爬虫实战篇里绝对会遇到的,当网站使用js动态传输数据时,要爬取那些动态的数据,就知道它的用处了

补充一点:如果你觉得json模块序列化和反序列化麻烦,可以用第三方库dmjson来编码解码

Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。

Github 地址:https://github.com/dmeranda/demjson

官方地址:http://deron.meranda.us/python/demjson/

其主要的方法:

encode 将 Python 对象编码成 JSON 字符串

decode将已编码的JSON字符串解码为Python对象

转载于:https://www.cnblogs.com/yangva/p/7816501.html

洗礼灵魂,修炼python(70)--爬虫篇—补充知识:json模块相关推荐

  1. 【python】爬虫篇:python对于html页面的解析(二)

    我,菜鸡,有什么错误,还望大家批评指出!! 前言: 根据自己写的上一篇文章,我继续更第二部分的内容,详情请点击如下链接 [python]爬虫篇:python连接postgresql(一):https: ...

  2. python网络爬虫_python小知识,基于Python 的网络爬虫技术分析

    在现阶段大数据的时代中,想要实现对数据的获取和分析,要先具备足够的数据源,网络爬虫技术就为其数据获取提供了良好的条件,且还能够实现对数据源的目的性采集. 在网络爬虫技术应用中,Python 脚本语言的 ...

  3. 北京理工大学·Python网络爬虫与信息提取·知识整理

    学习目标: python爬虫部分的学习 学习内容: mooc北京理工大学·Python网络爬虫与信息提取 对Scrapy内核依然一知半解,但mooc内容已经学完整理 后续将对Scrapy继续进行学习 ...

  4. python decimal类型转化_python的json模块,针对decimal类型直接dumps报错

    主要涉及的代码 def _iterencode(o, _current_indent_level): if isinstance(o, basestring): yield _encoder(o) e ...

  5. 【零基础学Python】爬虫篇 :第十四节--爬虫+词云解决实际问题

    十行代码帮助小姐姐给偶像送上最真挚的礼物----爬虫词云齐上阵,熬夜精心制作 905.png#pic_center) 故事背景 最近嘛,有位朋友找我帮忙嘛,希望我帮她做一份礼物,送给一直鼓舞着她不断向 ...

  6. 小白学Python之爬虫篇(一)——爬取PPT网站模板

    说明 菜狗大学生一枚,本着用什么学什么的原则,对之前简单学习的爬虫进行略微系统的整理,一方面方便以后复习,另一方面也希望给需要的人一点参考,毕竟看了那么多大佬的博客,是时候开始回报社会了哈哈哈(尴尬笑 ...

  7. Python(爬虫篇)--- 验证码破解【一】图片、文字验证码

    文章目录 一.图片验证码概述 (一)机器视觉 (二)OCR库概述 (1)Tesseract 简介 (2)Tesseract 缺点 二.方式一:Selenium手动打码 三.方式二:使用三方打码平台 ( ...

  8. 小白学Python之爬虫篇(二)——隐式资源链接查找与爬取

    说明 在上一篇文章中,我们对PPT网站的模板进行了爬取,该网站中,每个模板的详情网页直接包含目标资源的链接,因此只需遍历列表中的模板,依次提取链接即可,是一种十分简单的爬虫程序.对于某些稍微复杂些的网 ...

  9. [Python笔记]第一篇:基础知识

    本篇主要内容有:什么是python.如何安装python.py解释器解释过程.字符集转换知识.传参.流程控制 初识Python 一.什么是Python Python是一种面向对象.解释型计算机程序设计 ...

最新文章

  1. 【JBOSS】User not found SA
  2. python3.7.1安装教程详细_CentOS 7 安装python3.7.1的方法及注意事项
  3. 使用OpenCV校准鱼眼镜头-第2部分
  4. python语言由ps f组织所有_python面试题100.docx
  5. 爱丁堡大学计算机专业alevel,爱丁堡大学alevel要求?
  6. java学习笔记(五)----super用法,final用法,抽象类,接口
  7. Request.UrlReferrer详解
  8. Socket 多线程FTP软件开发
  9. 启动rocketmq 报错_RocketMQ为什么要保证订阅关系的一致性?
  10. Lecture 19 Shortest Paths III
  11. T-SQL SUM Functions
  12. web 端JS取得window 的按键动作(按下Shift, Alt,Ctrl....)
  13. 女程序员在GitHub提交PR更易被拒?开源世界“她”力量
  14. Bailian4151 电影节【贪心】
  15. netty mysql 中间件_阿里开源Mysql分布式中间件:Cobar
  16. ajaxSubmit()上传
  17. 解决报错 Initialize failed: invalid dom.
  18. php分享网ecshop二次开发视频教程,ecshop二次开发--视频上传
  19. 第九章 SG90伺服舵机模块的使用
  20. 《Loy解说Eureka客户端源码(一)》

热门文章

  1. 飓风“桑迪”路径图的制作
  2. erlang 二进制
  3. input type=file /,美化自定义上传按钮
  4. Alluxio HA 写入文件失败
  5. C#调用DataV token代码
  6. Mysql安装及入门
  7. 给自己的Sublime Text换上Soda Theme主题后清爽了好多
  8. 如何应对安全漏洞的修复
  9. linux symbolic link attack tutorial
  10. 《Pro ASP.NET MVC 3 Framework》学习笔记之十三【示例项目SportsStore】