Python爬虫——Python json模块常用方法

news/2024/7/19 11:20:38 标签: python, 爬虫, json

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,遵循欧洲计算机协会制定的 JavaScript 规范(简称 ECMAScript)。

JSON 易于人阅读和编写,同时也易于机器解析和生成,能够有效的提升网信息的传输效率,因此它常被作为网络、程序之间传递信息的标准语言,比如客户端与服务器之间信息交互就是以 JSON 格式传递的。

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

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

jons.loads()

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

python"># coding:utf8
import json
#JOSN字符串
website_info='{"name" : "CSDN","PV" : "2000万","UV" : "800万","create_time" : "1999年"}'
py_dict=json.loads(website_info)
print("python字典数据格式:%s;数据类型:%s"% (py_dict,type(py_dict)))

输出结果:

python">python字典数据格式:{'name': 'CSDN', 'PV': '2000万', 'UV': '800万', 'create_time': '1999年'};数据类型:<class 'dict'>

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

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" : "CSDN","PV" : "2000万","UV" : "800万","create_time" : "1999年"}
with open("web.josn","a") as f:
    json.dump(ditc_info,f,ensure_ascii=False)

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

python">{
"name": "CSDN",
"PV": "2000万",
"UV": "800万",
"create_time": "1999年"
}

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

python">import json
item_list = []
item = {'website': 'CSDN', 'url': "www.CSDN.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 文件,其内容如下:

python">["CSDN", "www.CSDN.net"]

json.load()

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

python">import json
site = {'name':'CSDN',"url":"www.CSDN.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))

输出结果如下:

python">{'name': 'CSDN', 'url': 'www.CSDN.net'}

json.dumps()

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

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

输出结果如下:

python">转换之后的数据类型为: <class 'str'>
{"website": "CSDN", "url": "www.CSDN.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 字符串。

Python教程,8天python从入门到精通,学python看这套就够了


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

相关文章

MFC界面控件BCGControlBar v33.4 - 日历、属性网格组件升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了&#xff0c;该版本包含了对Windows 11 Mica materia…

10从零开始学Java之开发Java必备软件Intellij idea的安装配置与使用

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者前言壹哥在前面的文章中&#xff0c;带大家下载、安装、配置了Eclipse这个更好用的IDE开发工具&#xff0c;并教会了大家如何在Ecli…

Microsoft ICMP远程代码执行漏洞(CVE-2023-23415)

漏洞描述Internet Control Message Protocol (ICMP) 协议是TCP/IP协议簇的一个子协议&#xff0c;用于在IP主机、路由器之间传递控制消息&#xff0c;Microsoft 在 Windows TCPIP 驱动程序中实现了对ICMP协议包的解析流程。该漏洞存在于处理tcpip协议栈中&#xff0c;在处理ICM…

Win11的两个实用技巧系列之电脑磁盘分区的方法、任务栏点击网络声音图标无反应怎么办

Win11怎么把C盘分成几个盘?Win11电脑磁盘分区的方法近期有用户刚给电脑安装了新的Win11系统&#xff0c;在后续的使用中&#xff0c;发现电脑磁盘只有一个C盘,需要分盘&#xff0c;如何分呢&#xff1f;本文就为大家带来了详细的分盘教程&#xff0c;需要的朋友一起看看吧Win1…

Linux: 网络数据收发流程简析

文章目录1. 前言2. 背景3. 网卡数据收发流程3.1 网络数据接收流程3.1.1 网卡数据接收流程3.1.2 网卡数据向上传递给L3&#xff0c;L4的流程3.2 网卡数据发送流程1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做…

最大流

最大流 一些定义 流网络&#xff1a;\(G(V,E)\) 一个连通图满足 \(|E|\ge |V|-1\) &#xff0c;其中有源点 \(S\) 汇点 \(T\) 每一条边 \((u,v)\) 有一个非负容量 \(c(u,v)\ge 0\) 流&#xff1a;边 \((u,v)\) 的流是一个函数 \(f(u,v)\) &#xff0c; \(\forall u,v\in V\) &a…

JVM系列(二) Java 堆内存分析

Java 堆内存分析 堆是GC&#xff08;垃圾收集器&#xff09;执行垃圾回收的重点区域, 所以今天我们着重讲下堆内存 自己的项目&#xff0c;如果出现OOM或者出现内存泄露,一定是出在堆内存上&#xff0c;因为堆是JVM中最大的一块内存空间&#xff0c;所有线程共享Java堆&#…

菜鸟刷题Day2

菜鸟刷题Day2 一.判定是否为字符重排&#xff1a;字符重排 描述 给定两个由小写字母组成的字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 解题思路&#xff1a; 这题思路与昨天最后两道类似&…