【Python】【进阶篇】十九、Python爬虫的json模块

news/2024/7/19 9:05:39 标签: python, json, 爬虫

目录

json_2">十九、Python爬虫json模块

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,遵循欧洲计算机协会制定的 JavaScript 规范(简称ECMAScript)。
JSON易于人读写,同时也易于机器解析和生成,能有效的提升网信息的传输效率,因此它常被作为网络、程序之间传递信息的标准语言,比如客户端与服务器之间信息交互就是JSON 格式传递的。

简单地说,JSON 可以将 JavaScript对象表示的一组数据转换为字符串格式,以便于在网络、程序间传输这个字符串。并且在需要的时候,您还可以将它转换为编程语言所支持的数据格式。本节主要介绍如何实现JSON 数据与 Python 数据类型间的相互转换。

Python 语言内置了专门处理 JOSN 数据的模块 —— jons 模块,通过该模块就可以完成 JSON 与 Python 两种数据格式的相互转换。

19.1 jons.loads()

该方法可以将 json 格式的字符串转换成 Python 对象(比如列表、字典、元组、整型以及浮点型),其中最常用的是转换为字典类型。示例如下:

python"># coding:utf8
import json
#JOSN字符串
website_info='{"name" : "c语言中文网","PV" : "50万","UV" : "20万","create_time" : "2010年"}'
py_dict=json.loads(website_info)
print("python字典数据格式:%s;数据类型:%s"% (py_dict,type(py_dict)))

输出结果:

python">python字典数据格式:{'name': 'c语言中文网', 'PV': '50万', 'UV': '20万', 'create_time':
'2010年'};数据类型:<class 'dict'>

注意:上述示例中 JSON 字符串看上去和 Python 字典非常相似,但是其本质不同,JOSN 是字符串类型,而 Python 字典是 dict 类型。

jsondump_31">19.1 json.dump()

它可以将 Python 对象(字典、列表等)转换为 json 字符串,并将转换后的数据写入到 json 格式的文件中,因此该方法必须操作文件流对象。比如当使用爬虫程序完成数据抓取后,有时需要将数据保存为 json 格式,此时就用到了 json.dump()方法,语法格式如下:

python">json.dump(object,f,inden=0,ensure_ascii=False)

参数说明如下:

  • object:Python 数据对象,比如字典,列表等
  • f:文件流对象,即文件句柄。
  • indent:格式化存储数据,使 JSON 字符串更易阅读。
  • ensure_ascii:是否使用 ascii 编码,当数据中出现中文的时候,需要将其设置为 False。

示例示例如下:

python">import json

ditc_info={"name" : "c语言中文网","PV" : "50万","UV" : "20万","create_time" : "2010年"}
with open("web.josn","a") as f:
json.dump(ditc_info,f,ensure_ascii=False)

打开 web.json 文件,其内容如下所示:

json">{
"name": "c语言中文网",
"PV": "50万",
"UV": "20万",
"create_time": "2010年"
}

您也可以将 Python 列表转换成 JSON 字符串,并保存至 json 文件中,如下所示:

python">
import json

item_list = []
item = {'website': 'C语言中文网', 'url': "c.biancheng.net"}
for k,v in item.items():
item_list.append(v)

with open('info_web.json', 'a') as f:
json.dump(item_list, f, ensure_ascii=False)

打开 info_web.json 文件,其内容如下:

["C语言中文网", "c.biancheng.net"]

jsonload_88">19.1 json.load()

该方法用于操作文件流对象,不过它与 dump() 恰好相反,它表示从 json 文件中读取 JSON 字符串,并将读取内容转换为 Python对象。使用示例如下:

python">import json

site = {'name':'c语言中文网',"url":"c.biancheng.net"}
filename = 'website.json'
with open (filename,'w') as f:
    json.dump(site,f,ensure_ascii=False)
with open (filename,'r') as f:
    print(json.load(f))

输出结果如下:

{'name': 'c语言中文网', 'url': 'c.biancheng.net'}

jsondumps_109">19.1 json.dumps()

该方法可以将 Python 对象转换成 JSON 字符串。示例如下:

python">import json
#python字典
item = {'website': 'C语言中文网', 'rank': 1}
# json.dumps之后
item = json.dumps(item,ensure_ascii=False)
print('转换之后的数据类型为:',type(item))
print(item)

输出结果如下:

转换之后的数据类型为: <class 'str'>
{"website": "C语言中文网", "url": "c.biancheng.net"}

最后对上述方法做简单地总结,如下表所示:

JSON方法总结
方法作用
json.dumps()将 Python 对象转换成 JSON 字符串。
json.loads() 将 JSON 字符串转换成 Python 对象。
json.dump()将 Python 中的对象转化成 JSON 字符串储存到文件中。
json.load() 将文件中的 JSON 字符串转化成 Python 对象提取出来。

综上所述 json.load() 与 json.dump() 操作的是文件流对象,实现了 json 文件的读写操作,而 json.loads() 与
json.dumps() 操作的是 Python 对象或者 JOSN 字符串。


http://www.niftyadmin.cn/n/226979.html

相关文章

TryHackMe-Year of the Fox(Linux渗透测试)

Year of the Fox 你能熬过狡猾的狐狸吗&#xff1f; 端口扫描 循例nmap 有个域名&#xff0c;加入hosts SMB枚举 smbmap enum4linux -a&#xff0c;枚举到两个账户 Web枚举 进80发现需要登录 上hydra RCE to Getshell 进来可以查看一些文件 bp发现这里存在过滤 burpfuzz一…

剑指 Offer 58 - I. 翻转单词顺序 / LeetCode 151. 反转字符串中的单词(双指针字符串处理 / 栈)

题目&#xff1a; 链接&#xff1a;剑指 Offer 58 - I. 翻转单词顺序&#xff1b;LeetCode 151. 反转字符串中的单词 难度&#xff1a;简单 输入一个英文句子&#xff0c;翻转句子中单词的顺序&#xff0c;但单词内字符的顺序不变。为简单起见&#xff0c;标点符号和普通字母…

vue-element-admin 动态菜单改造

vue-element-admin 动态菜单改造 vue-element-admin 是一款优秀后台前端解决方案&#xff0c;它基于 vue 和 element-ui实现。开源后台管理系统解决方案项目 Boot-admin的前端模块就是基于vue-element-admin开发而来。 作为一款纯前端的后台界面解决方案&#xff0c;vue-elem…

【SQL】一文带你掌握SQL基础语法

文章目录&#x1f496;1&#xff0c;SQL概述&#x1f388;1.1 SQL简介&#x1f388;1.2 通用语法&#x1f388;1.3 SQL分类&#x1f496;2&#xff0c;DDL:操作数据库&#x1f388;2.1 查询&#x1f388;2.2 创建数据库&#x1f388;2.3 删除数据库&#x1f388;2.4 使用数据库…

C++语法(17)---- 二叉搜索树

1.概念 1.父节点的左子树全小于本身 2.父节点的右子树全大于本身 3.左右子树也是二叉搜索树 时间复杂度&#xff1a;O(N)&#xff0c;有可能只有左数&#xff0c;这样就遍历了所有&#xff0c;所有复杂度为N 平衡二叉树的时间复杂度才是&#xff1a;O(logN) 2.模拟 1.数据元素…

蓝桥 卷“兔”来袭编程竞赛专场-04栅栏加密 题解

赛题介绍 挑战介绍 栅栏密码是一种简单的移动字符位置的加密方法&#xff0c;规则简单。加密方式是将明文按照一定的字数分成多个组&#xff0c;取每组第一个字连起来得到密文 1&#xff0c;再取每组第二个字连起来得到密文 2&#xff0c;以此类推&#xff0c;最后将密文 1、…

App 自动化测试

一、移动端测试基础 1 移动端自动化环境搭建 1.1 java安装 1.2 Android SDK安装 SDK (Software Development Kit) 软件开发工具包是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK 就是 Android 专属的软件开…

JavaScript的学习理解

文章目录一、JavaScript 对象二、JavaScript 函数三、JavaScript 作用域总结一、JavaScript 对象 JavaScript 对象是拥有属性和方法的数据。 真实生活中的对象&#xff0c;属性和方法 在 JavaScript中&#xff0c;几乎所有的事物都是对象。 在 JavaScript 中&#xff0c;对象…