商业爬虫学习笔记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/ ,获取书名、作者、简介
商业爬虫学习笔记day8-------json的使用的更多相关文章
- 商业爬虫学习笔记day1
day1 一. HTTP 1.介绍: https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html http://blog.csdn.ne ...
- 商业爬虫学习笔记day4
一.获取登录后页面信息的两种方法 1.第一种方法: 人为把有效cookies加到请求头中,代码如下 import urllib.request # 确定url url = "https:// ...
- 商业爬虫学习笔记day2
1. get传参 (1)url中包含中文报错解决方法 urllib.request.quote("包含中文的url", safe = "string.printtable ...
- 商业爬虫学习笔记day6
一. 正则解析数据 解析百度新闻中每个新闻的title,url,检查每个新闻的源码可知道,其title和url都位于<a></a>标签中,因为里面参数的具体形式不一样,同一个正 ...
- 商业爬虫学习笔记day3
一. 付费代理发送请求的两种方式 第一种方式: (1)代理ip,形式如下: money_proxy = {"http":"username:pwd@192.168.12. ...
- 商业爬虫学习笔记day7-------解析方法之bs4
一.Beautiful Soup 1.简介 Beautiful Soup 是python的一个库,最主要的功能是从网页抓取数据.其特点如下(这三个特点正是bs强大的原因,来自官方手册) a. Beau ...
- 商业爬虫学习笔记day5
一. 发送post请求 import requests url = "" # 发送post请求 data = { } response = requests.post(url, d ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- springmvc学习笔记(18)-json数据交互
springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...
随机推荐
- 链表中倒数第K个结点 牛客网 程序员面试金典 C++ Python
链表中倒数第K个结点 牛客网 程序员面试金典 C++ Python 题目描述 输入一个链表,输出该链表中倒数第k个结点. C++ /* struct ListNode { int val; struc ...
- Django(73)django-debug-toolbar调试工具
介绍 Django框架的调试工具栏使用django-debug-toolbar库,是一组可配置的面板,显示有关当前请求/响应的各种调试信息,点击时,显示有关面板内容的更多详细信息. 应用 1. 安装 ...
- 攻防世界Web之fakebook
打开题目,得到一个网页,包含一个表格.两个按钮. 习惯性先查看网页源码,但没发现有效信息. <!doctype html> <html lang="ko"> ...
- 记录一次因subprocess PIPE 引起的线上故障
sence:python中使用subprocess.Popen(cmd, stdout=sys.STDOUT, stderr=sys.STDERR, shell=True) ,stdout, stde ...
- PTA 7-1 邻接矩阵表示法创建无向图 (20分)
PTA 7-1 邻接矩阵表示法创建无向图 (20分) 采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶 ...
- EDG夺冠!用Python分析22.3万条数据:粉丝都疯了!
一.EDG夺冠信息 11月6日,在英雄联盟总决赛中,EDG战队以3:2战胜韩国队,获得2021年英雄联盟全球总决赛冠军,这个比赛在全网各大平台也是备受瞩目: 1.微博热搜第一名,截止2021-11-1 ...
- 全球首发-基于.NET 6长线支持Zoomla!逐浪CMS v8.6.0正式发布
传送门: https://www.z01.com/down/3778.shtml 全新Zoomla!逐浪CMS v8.6.0 全于首个基于.net 6长线支持的CMS-Zoomla!逐浪CMS v8. ...
- 全面的Docker快速入门教程
前言: 都2021年了,你还在为了安装一个开发或者部署环境.软件而花费半天的时间吗?你还在解决开发环境能够正常访问,而发布测试环境无法正常访问的问题吗?你还在为持续集成和持续交付(CI / CD)工作 ...
- 菜鸡的Java笔记 第九 - java 接收键盘输入
package mysterious; import java.util.Scanner; public class lianxi { public static void hhh (){ Scann ...
- Windows11下的快捷键(win10通用,部分win11独有的不通用)
给大家介绍一下win11下我常用的几个快捷键,在微软官方的文档里面都可以查到,官网链接 https://support.microsoft.com/zh-cn/windows/windows-%E7% ...