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端更加容易 ...
随机推荐
- 通过反射实现IOC功能
这段时间园子里有不少介绍IOC组件的文章,由于自己也一直在学习IOC的各种组件,及IOC的思想,常见的IOC组件很多:AutoFac.Ninject.Utity包括.NET自带的MEF等.由于今天周六 ...
- 面试:C++工厂模式实现
#include <iostream> enum CTYPE {PRODUCTA,PRODUCTB}; class Product{ public: ; virtual ~Product( ...
- 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程
机器学习的发展可以追溯到1959年,有着丰富的历史.这个领域也正在以前所未有的速度进化.在之前的一篇文章中,我们讨论过为什么通用人工智能领域即将要爆发.有兴趣入坑ML的小伙伴不要拖延了,时不我待! 在 ...
- Trie(字典树)解析及其在编程竞赛中的典型应用举例
摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...
- [转]ionic3项目实战教程三(创建provider、http请求、图文列表、滑动列表)
本文转自:https://blog.csdn.net/lyt_angularjs/article/details/81145468 版权声明:本文为博主原创文章,转载请注明出处.谢谢! https:/ ...
- typeof() 和 GetType()区是什么
1.typeof(x)中的x,必须是具体的类名.类型名称等,不可以是变量名称. 2.GetType()方法继承自Object,所以C#中任何对象都具有GetType()方法,它的作用和typeof() ...
- 用JDOM解析XML文件时如何解决中文问题?如何解析?
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import ja ...
- Django Rest Framework之版本控制
基本代码结构 settings.py: REST_FRAMEWORK = { 'DEFAULT_VERSION': 'v1', # 默认版本 'ALLOWED_VERSIONS': ['v1', 'v ...
- js之模态对话框
目标效果:点击页面按钮,显示模态对话框,在模态对话框里点击取消关闭模式对话框. 效果如下 实现代码如下: <!DOCTYPE html> <html lang="en&qu ...
- 【读书笔记】iOS-基带攻击
一,iOS设备中的蜂窝网络通信栈运行在专门的芯片上,这个芯片就是数字基带处理器. 参考资料:<黑客攻防技术宝典-iOS实战篇>