商业爬虫学习笔记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转换的依赖 ...
随机推荐
- SpringCloud微服务实战——搭建企业级开发框架(十二):OpenFeign+Ribbon实现负载均衡
Ribbon是Netflix下的负载均衡项目,它主要实现中间层应用程序的负载均衡.为Ribbon配置服务提供者地址列表后,Ribbon就会基于某种负载均衡算法,自动帮助服务调用者去请求.Ribbo ...
- conda无法导入,pip可以导入
在conda中创建测试的虚拟环境 进入test虚拟环境,输入命令:conda install keras 输入命令python,进入python环境,输入import keras 返回错误,No mo ...
- vue配置请求拦截器和响应拦截器
首先确保我们已经设置的store.js进行值的存取,这时候我们需要配置请求和响应的拦截器设置 main.js import Vue from 'vue' import App from './App' ...
- IDEA格式化项目中所有文件的方法
1,单个文件打开后,直接快捷键Ctrl+Alt+L就可将当前文件格式化 2,快捷键Ctrl+Alt+O可将import格式化(删除无用的import) 3,如果需要格式化整个项目的所有代码,在项目名上 ...
- jenkins项目发布
目录 一.简介 二.docker打包 一.后端打包 二.前端打包 三.启动容器 四.完整代码 五.发布测试 六.优化方案 七.源码地址: 八.参考 一.简介 1.该章节基于jenkins.Harbor ...
- [第二章]c++学习笔记4(复制构造函数)
性质 (1)只有一个参数,即被同类对象的引用. 注 起作用的三种情况 注 常量引用参数
- ExtJS 去除水印
在路径(根目录/ext/classic(或者modern)/theme-base/sass/etc/all.scss)文件中修改\(ext-trial: true !default; 为\)ext-t ...
- java miniui(datagrid) 取值赋值
... (本想放项目代码上来的 可是这放上去就看不了不知为何,下面是项目中的代码) // 获取时间设置到时间上,加载没有那个快,所以需要先加载完数据然后才能获取 function obtain(e) ...
- 关于 RocketMQ ClientID 相同引发的消息堆积的问题
首先,造成这个问题的 BUG RocketMQ 官方已经在 3月16号 的这个提交中修复了,这里只是探讨一下在修复之前造成问题的具体细节,更多的上下文可以参考我之前写的 <RocketMQ Co ...
- uni-app开发 uni.scss 样式的整体化设置
今天在写uni-app设计的时候,界面图片.图标规格一直无法正常显示.查看了uni-app官网的代码注释后,发现了在style中设置<style lang="scss"> ...