商业爬虫学习笔记day8-------json的使用
一. 简介
JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
二. json语法
1. json语法规则
在js语言中,一切都是对象。因此,任何支持的类型都可以通过json来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型
(1)对象表示为键值对
(2)数据由逗号分隔
(3)花括号保存对象
(4)方括号保存数组
2 json键值对
JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值
注意:(1)python中的key:value必须都是双引号(不能用单引号)
(2) 末尾不能写逗号
(3)整个文件内容只能是被一个大括号{}或中括号[]包裹
3.对象和数组
(1)对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
(2)数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。
三. json常用操作
loads,dumps;load,dump
1. 字符串和dict,list转换(loads,dumps)
(1)字符串向dict,list转换
str_list = '[{"name":"张三", "age":"20"}, {"name":"李四", "age":18}]' str_dict = '{"name":"张三", "age":"20"}' list_data = json.loads(str_list) dict_data = json.loads(str_dict) print(type(list_data)) print(list_data) print(type(dict_data)) print(dict_data)
打印结果
<class 'list'> [{'name': '张三', 'age': '20'}, {'name': '李四', 'age': 18}] <class 'dict'> {'name': '张三', 'age': '20'}
(2)dict,lis向字符串转换
data_list = [{"name":"张三", "age":"20"}, {"name":"李四", "age":18}] data_dict = {"name":"张三", "age":"20"} list_str = json.dumps(data_list) dict_str = json.dumps(data_dict) print(type(list_str)) print(list_str) print(type(dict_str)) print(dict_str)
打印结果
<class 'str'> [{"name": "\u5f20\u4e09", "age": "20"}, {"name": "\u674e\u56db", "age": 18}] <class 'str'>
{"name": "\u5f20\u4e09", "age": "20"}
2. dict,list和文件对象(只包含一个json的文件)间的转换(load,dump)
(1)dict、list写入文件
list2 = [{"name": "张三", "age": 20}, {"name": "李四", "age": 18}] with open('new.json', 'w') as f: json.dump(list2, f)
结果能得到new.json文件(其内容为list2中的内容)
(2)读取文件=====>list、dict
with open('new.json', 'r') as f: result = json.load(f) print(result)
打印结果如下:
[{'name': '张三', 'age': 20}, {'name': '李四', 'age': 18}]
3. json中的数据转换成csv文件(比较常用的是表格形式,便于数据分析)
import json import csv # 需求 json 中的数据 转换 成 csv文件 # 1.分别 读 , 创建文件 json_fp = open('02new.json', 'r') csv_fp = open('03csv.csv', 'w') with open('02new.json', 'r') as f: # 读取出json内容,并转换为dict格式 data_list = json.load(f) # 提取出表头 sheet_title = data_list[0].keys() # 提取出表内容 sheet_data = [] for data in data_list: sheet_data.append(data.values()) # csv 写入器,初始化写入对象 writer = csv.writer(csv_fp) # 写入表头 writer.writerow(sheet_title) # 写入内容 writer.writerows(sheet_data) # 6. 关闭两个文件 json_fp.close() csv_fp.close()
结果得到03csv.csv文件,内容如下:
四. 案例------爬取http://www.allitebooks.org/ ,获取书名、作者、简介