Python3编写网络爬虫09-数据存储方式二-JSON文件存储
2.JSON文件存储
全称为JavaScript Object Notation 通过对象和数组的组合来表示数据,构造简洁且结构化程度非常高。
是一种轻量级的数据交换格式
2.1 对象和数组
在JavaScript中 一切皆对象。 因此任何类型都可以通过json来表示,如 字符串,数字,对象,数组等
对象 : 在JavaScript中使用{}括起来 数据结构为{key1:value,key2:value2...}的键值对结构
在面向对象中 key为对象的属性,value为对应的值,键名可以使用整数和字符串表示,值的类型可以是任意类型。
数组 : 数组在JavaScript中使用方括号[] 括起来 数据结构为["java","JavaScript","Python"...]索引结构。
在JavaScript中数组是一种比较特殊的数据类型,可以像对象那样使用键值对,更多的是索引,值可以是任意类型。
示例:
[{
"name" : "Bod",
"gender" : "male",
"birrhday" : "1992-10-19"
},{
"name" : "Selina",
"gender" : "female",
"birthday" : "1995-10-18"
}]
JSON 可以是以上两种形式自由组合,无限次嵌套,结构清晰,数据交换的极佳方式。
2.2 读取JSON
Python为我们提供了简易的JSON库实现JSON文件的读写操作。
可以调用 loads()方法将JSON文本字符串转为JSON对象,
dumps() 方法将JSON对象转为文本字符串
示例:
import json
str1 = '''
[{
"name" : "Bod",
"gender" : "male",
"birrhday" : "1992-10-19"
},{
"name" : "Selina",
"gender" : "female",
"birthday" : "1995-10-18"
}]
'''
print(type(str1))#str
data = json.loads(str1)
print(data)
print(type(data))#list
通过索引来获取对应的内容 例如 第一个元素的name属性
print(data[0]['name'])
print(data[0].get('name'))
推荐第二种方式 get()方法 如果键名不存在 不会报错 返回None 另外可以传入第二个参数 默认值
print(data[0].get('age'))
print(data[0].get('age',20))
注意: JSON的数据需要用双引号括起来 不能使用单引号
示例:
import json
str1 = '''
[{
'name' : 'Bod',
'gender' : 'male',
'birrhday' : '1992-10-19'
},{
'name' : 'Selina',
'gender' : 'female',
'birthday' : '1995-10-18'
}]
''' data = json.loads('str1')
报错 解析错误
如何读取文本文件json内容
import json
with open('data.json','r') as file:
str1 = file.read()
data = json.loads(str1)
print(data)
2.3 输出JSON
调用 dumps() 将JSON对象转化为字符串
示例:
import json
data = [{
"name" : "Bod",
"gender" : "male",
"birrhday" : "1992-10-19"
}]
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2))#indent 缩进字符个数
如果JSON包含中文字符
示例:
import json
data = [{
"name" : "小米",
"gender" : "男",
"birrhday" : "1992-10-19"
}]
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2))#indent 缩进字符个数
结果中文字符 变成了Unicode字符 需要指定参数 ensure_ascii=False
示例:
import json
data = [{
"name" : "小米",
"gender" : "男",
"birrhday" : "1992-10-19"
}]
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2,ensure_ascii=False))#indent 缩进字符个数
后面做数据分析时会经常用到 需熟练掌握
Python3编写网络爬虫09-数据存储方式二-JSON文件存储的更多相关文章
- python3编写网络爬虫13-Ajax数据爬取
一.Ajax数据爬取 1. 简介:Ajax 全称Asynchronous JavaScript and XML 异步的Javascript和XML. 它不是一门编程语言,而是利用JavaScript在 ...
- Python3编写网络爬虫12-数据存储方式五-非关系型数据库存储
非关系型数据库存储 NoSQL 全称 Not Only SQL 意为非SQL 泛指非关系型数据库.基于键值对 不需要经过SQL层解析 数据之间没有耦合性 性能非常高. 非关系型数据库可细分如下: 键值 ...
- Python3编写网络爬虫11-数据存储方式四-关系型数据库存储
关系型数据库存储 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表保存的,所以它的存储方式就是行列组成的表.每一列是一个字段,每一行是一条记录.表可以看作某个实体的集合,而实体之间存在联系, ...
- Python3编写网络爬虫10-数据存储方式三-CSV文件存储
3.CSV文件存储 CSV 全称 Comma-Separated Values 中文叫做逗号分隔值或者字符分隔值,文件以纯文本形式存储表格数据.文件是一个字符序列 可以由任意数目的记录组成相当于一个结 ...
- Python3编写网络爬虫08-数据存储方式一-文件存储
数据存储 用解析器解析出数据之后,就是存储数据了.保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如TXT JSON CSV等.另外还可以保存到数据库中,如关系型数据库MySQL 非关系型数 ...
- python3编写网络爬虫18-代理池的维护
一.代理池的维护 上面我们利用代理可以解决目标网站封IP的问题 在网上有大量公开的免费代理 或者我们也可以购买付费的代理IP但是无论是免费的还是付费的,都不能保证都是可用的 因为可能此IP被其他人使用 ...
- python3编写网络爬虫21-scrapy框架的使用
一.scrapy框架的使用 前面我们讲了pyspider 它可以快速的完成爬虫的编写 不过pyspider也有一些缺点 例如可配置化不高 异常处理能力有限对于一些反爬虫程度非常强的网站 爬取显得力不从 ...
- python3编写网络爬虫20-pyspider框架的使用
二.pyspider框架的使用 简介 pyspider是由国人binux 编写的强大的网络爬虫系统 github地址 : https://github.com/binux/pyspider 官方文档 ...
- python3编写网络爬虫19-app爬取
一.app爬取 前面都是介绍爬取Web网页的内容,随着移动互联网的发展,越来越多的企业并没有提供Web页面端的服务,而是直接开发了App,更多信息都是通过App展示的 App爬取相比Web端更加容易 ...
随机推荐
- MyBatis 分页之拦截器实现
分页是WEB程序中常见的功能,mybatis分页实现与hibernate不同,相比hibernate,mybatis实现分页更为麻烦.mybatis实现分页需要自己编写(非逻辑分页RowBounds) ...
- kubernetes1.13之后的kubeadm init config
1.kubernetes1.13之后kubeadm开始GA,由于1.13的kube-proxy有bug,删除ipvs的地方总是导致kube-proxy挂掉,所以建议直接用1.13.2,这个版本解决了b ...
- Vue2.5开发去哪儿网App 详情页面开发
一,banner 图的设计 1. 新建detail的路由 import Detail from '@/pages/detail/Detail' ...... { path: '/detail', na ...
- S5PV210 串口实验(中断方式)
结合之前的串口实验(轮询方式)与中断体系分析,我们来做下中断方式的串口接收实验. start.S .global _start .global IRQ_handle _start: /* 关 Watc ...
- 深入浅出 JVM ClassLoader
# 前言 在 JVM 综述里面,我们说,JVM 做了三件事情,Java 程序的内存管理, Java Class 二进制字节流的加载(ClassLoader),Java 程序的执行(执行引擎).我们也说 ...
- 你不知道的Linux(持续更新中)
1.关于GNU.Linux.GNU/Linux三者的关系 GNU 项目创始于一九八四年,旨在开发一个类似 Unix ,且为自由软件的完整的操作系统: GNU 系统.(也可把GNU看成一个自由软件工程) ...
- 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 <深入理解Java虚拟机> 第四章 ,为了整理思路,简单记录一下,方便后期查阅. JDK本身提供了很多方便的JVM性 ...
- 【Redis】3、Redis集群部署
Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下 ...
- 【ajax】1、ajax原理
Ajax核心XMLHttpRequest对象 XMLHttpRequest对象方法 XMLHttpRequest对象属性 onreadystatechange 状态改变的事件触发器.每次 readyS ...
- linux下vscode的c++工程配置
准备 安装vscode,可直接下载deb包进行安装,完成后安装C/C++ for Visual Studio Code插件,安装后重启(最新1.3版本以后不需要重启). 生成目录和文件 新建文件夹[t ...