数据提取之JSON与JsonPATH

第一章 json

一、json简介

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

> 1. 对象:对象在js中表示为`{ }`括起来的内容,数据结构为 `{ key:value, key:value, ... }`的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。

> 2. 数组:数组在js中是中括号`[ ]`括起来的内容,数据结构为 `["Python", "javascript", "C++", ...]`,取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

二、json用法

导包

 import json

json模块提供了四个功能:`dumps`、`dump`、`loads`、`load`,用于字符串 和 python数据类型间进行转换。

1.json.loads()

作用:把json格式的字符串转为Python数据类型

示例代码:

import json#json格式的字符串
strList = '[1, 2, 3, 4]'
strDict = '{"city": "北京", "name": "大猫"}'list=json.loads(strList)
print(list)
print(type(list))
# [1, 2, 3, 4]
dict=json.loads(strDict)
print(dict)# json数据自动按Unicode存储
print(type(dict))

e966e38eac394dcbaabd839a066fc116.png

2.json.load()

作用:将json文件读取,并转为python类型

pingping.json

c605f53cc14242c592a4fb5dbce83116.png

示例代码

import jsonwith open('./pingping.json', 'r') as f:data = json.load(f)print(data)
print(data["name"])  # 输出: pingping
print(data["age"])   # 输出: 23
print(data["is_active"])  # 输出: True

0ec126960de94596999472c074a6fb37.png

3.json.dumps()

作用:把 python 类型 转为 json 类型

示例代码:

import json# json.dumps()之前
item = {'name':'QQ','app_id':1}
print('before dumps',type(item)) # dict
# json.dumps之后
item = json.dumps(item)
print('after dumps',type(item)) # str

7e69803aff214b21a6fc3a44115727e2.png

4.json.dump()

作用:把python数据类型转为 json格式的字符串

注意:一般让你把抓取的数据保存为json文件时使用

示例代码:

import jsonitem_list = []
for i in range(3):item = {'name': 'QQ', 'id': i}item_list.append(item)with open('xiaomi.json', 'a') as f:json.dump(item_list, f, ensure_ascii=False)

15fcedaa74a5437d9ac50a9dceed2b4d.png

5.json模块总结

爬虫最常用

        1、数据抓取 - json.loads(html)

             将响应内容由: json 转为 python

        2、数据保存 - json.dump(item_list,f,ensure_ascii=False)

             将抓取的数据保存到本地 json文件

抓取数据一般处理方式

        1、txt文件

        2、csv文件

        3、json文件

        4、MySQL数据库

        5、MongoDB数据库

        6、Redis数据库

第二章 jsonpath

一、jsonpath简介

JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。

> 下载地址:[https://pypi.python.org/pypi/jsonpath](https://pypi.python.org/pypi/jsonpath/)

> > 安装方法:点击`Download URL`链接下载jsonpath,解压之后执行`python setup.py install`

                        或者终端命令中输入pip install josnpath

> > 官方文档:[http://goessner.net/articles/JsonPath](http://goessner.net/articles/JsonPath/)

二、jsonpath的使用

1. jsonpath 函数参数

我们在使用jsonpathd的时候一般是使用它里面的jsonpath函数,即jsonpath.jsonpath()。

jsonpath()接受5个参数,如下

jsonpath(obj, expr, result_type='VALUE', debug=0, use_eval=True)

obj:要搜索的 JSON 对象。

expr:JSONPath 表达式,用于指定要提取的值的路径。

result_type:可选参数,用于指定返回结果的类型。默认为 ‘VALUE’,表示返回匹配到的值;还可以选择 ‘PATH’,表示返回匹配到的路径;或者选择 ‘BOTH’,表示同时返回匹配到的值和路径。

debug:可选参数,用于控制调试模式。默认为 0,表示关闭调试模式;设置为 1,则会在控制台输出调试信息。

use_eval:可选参数,用于指定是否使用 eval() 函数来计算表达式。默认为 True,表示使用 eval();设置为 False,则会使用更安全的方式来计算表达式。

其中obj 和 expr 是必须参数,即要处理的json数据对象和提取表达式,常用的就是这两个参数,其他参数可以根据个人需要赋值。

2.jsonpath 匹配规则

jsonpath
$从根节点开始匹配
@从当前节点开始匹配
. or [ ]取子节点
. .就是不管位置,选择所有符合条件的条件(递归匹配)
*匹配所有节点
[ ]迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
[ , ]支持迭代器中做多选
?()支持过滤操作
( )支持表达式

如:

表达式描述

$

根对象

$.store

根对象下的 store 属性

$.store.book

store 对象下的 book 属性

$.store.book[*]

book 数组中的所有元素

$.store.book[0]

book 数组中索引为 0 的元素

$.store.book[*].author

book 数组中每个元素的 author 属性

$..author

所有嵌套的 author 属性

$.store.*

store 对象中的所有属性

$..*

所有嵌套的属性

$.store.book[?(@.isbn)]

book 数组中所有有 isbn 属性的元素

$.store.book[?(@.price < 10)]

book 数组中所有价格小于 10 的元素

$.store.book[?(@.price <= 10 && @.category == 'fiction')]

book 数组中所有价格小于等于 10 且类别为小说的元素

$.store.book[?(@.price * 0.9 < 10)]

book 数组中所有打折后价格小于 10 的元素

$.store.book[0:3]

book 数组中索引从 0 到 2 的元素

$.store.book[:2]

book 数组中索引从 0 到 1 的元素

$.store.book[1:]

book 数组中索引从 1 到最后的元素

$.store.book[-1]

book 数组中的最后一个元素

$.store.book[1:2:1]

book 数组中索引从 1 到 1 的元素,步长为 1

$.store.book.length()

book 数组的长度

$..book[?(@.price < 10)].title

所有嵌套的 book 数组中价格小于 10 的元素的 title 属性

$..[?(@.isbn)]

所有有 isbn 属性的嵌套元素

$..[?(@.price < 10)]

所有价格小于 10 的嵌套元素

$..[?(@.price <= 10 && @.category == 'fiction')]

所有价格小于等于 10 且类别为小说的嵌套元素

$..[?(@.price * 0.9 < 10)]

所有打折后价格小于 10 的嵌套元素

$..[?(@.price < 10)].author

所有价格小于 10 的嵌套元素的 author 属性

$..[?(@.price < 10)].title

所有价格小于 10 的嵌套元素的 title 属性

示例代码:

from jsonpath import jsonpath
data = { "store": {"book": [{ "category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{ "category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{ "category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{ "category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}}
}
authors=jsonpath(data,'$..author')
titles=jsonpath(data,'$.store.book[*].title')
items=jsonpath(data,'$.store.*')
print(authors)
print(titles)
print(items)

bc4bdbab74e24b3f8056f7d4fdf37235.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/438771.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链+Web3学习笔记(METAMASHK、密码学知识)

学习资料来源于B站&#xff1a; 17小时最全Web3教程&#xff1a;ERC20&#xff0c;NFT&#xff0c;Hardhat&#xff0c;CCIP跨链_哔哩哔哩_bilibili 该课程提供的Github代码地址&#xff0c;相关资料详见README.md&#xff1a; Web3_tutorial_Chinese/README.md at main sm…

银河麒麟系统内存清理

银河麒麟系统内存清理 1、操作步骤2、注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 当银河麒麟系统运行较长时间&#xff0c;内存中的缓存可能会积累过多&#xff0c;影响系统性能。此时&#xff0c;你可以通过简单的命令来清理这…

JS | 如何解决ajax无法后退的问题?

Ajax请求通常不支持浏览器的后退按钮&#xff0c;因为它们是异步的&#xff0c;不会导致页面重新加载(刷新)。但如果你想要用户能够通过浏览器的后退按钮回到之前的页面状态&#xff0c;你可以通过几种方法来解决这个问题&#xff1a; 1、使用pushState和replaceState方法 hi…

【Android】数据存储

本章介绍Android五种主要存储方式的用法&#xff0c;包括共享参数SharedPreferences、数据库SQLite、SD卡文件、App的全局内存&#xff0c;另外介绍重要组件之一的应用Application的基本概念与常见用法&#xff0c;以及四大组件之一的内容提供器ContentProvider的基本概念与常见…

五.海量数据实时分析-FlinkCDC+DorisConnector实现数据的全量增量同步

前言 前面四篇文字都在学习Doris的理论知识&#xff0c;也是比较枯燥&#xff0c;当然Doris的理论知识还很多&#xff0c;我们后面慢慢学&#xff0c;本篇文章我们尝试使用SpringBoot来整合Doris完成基本的CRUD。 由于 Doris 高度兼容 Mysql 协议&#xff0c;两者在 SQL 语法…

Redis数据库与GO(二):list,set

一、list&#xff08;列表&#xff09; list&#xff08;列表&#xff09;是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表&#xff0c; list是一个双向链表&#xff0c;其元素是有序的&#xff0c;元…

GS-SLAM论文阅读笔记-CaRtGS

前言 这篇文章看起来有点像Photo-slam的续作&#xff0c;行文格式和图片类型很接近&#xff0c;而且貌似是出自同一所学校的&#xff0c;所以推测可能是Photo-slam的优化与改进方法&#xff0c;接下来具体看看改进了哪些地方。 文章目录 前言1.背景介绍GS-SLAM方法总结 2.关键…

uniapp+Android面向网络学习的时间管理工具软件 微信小程序

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…

STM32F103C8----3-3 蜂鸣器(跟着江科大学STM32)

一&#xff0c;电路图 &#xff08;接线图&#xff09; 面包板的的使用请参考&#xff1a;《面包板的使用_面包板的详细使用方法-CSDN博客》 二&#xff0c;目的/效果 3-3 蜂鸣器 三&#xff0c;创建Keil项目 详细参考&#xff1a;《STM32F103C8----2-1 Keil5搭建STM32项目模…

Linux ssh 免密登录配置

参考资料 ~/.ssh/configについて~/.ssh/configを使ってSSH接続を楽にする.ssh/configファイルでSSH接続を管理する 目录 一. 密钥生成1.1 生成工具1.1.1 OpenSSH1.1.2 Git 1.2 生成命令1.3 注意事项1.4 解决路径中的用户名乱码 二. 将公钥配置到目标服务&#xff0c;免密登录2…

Spring Boot集成encache快速入门Demo

1.什么是encache EhCache 是一个纯 Java 的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是 Hibernate 中默认的 CacheProvider。 Ehcache 特性 优点 快速、简单支持多种缓存策略&#xff1a;LRU、LFU、FIFO 淘汰算法缓存数据有两级&#xff1a;内存和磁盘&a…

Linux bash脚本 远程开发环境配置

参考资料 太香了&#xff0c;VSCode远程开发插件&#xff0c;值得一试Visual Studio Code で Remote SSH する。Managing extensions 目录 一. 远程开发必备二. 连接远程开发服务器三. 安装远程开发插件 一. 远程开发必备 ⏹ VSCode插件 Remote - SSH 通过使用 SSH 链接虚拟…

C++之多态篇(超详细版)

1.多态概念 多态就是多种形态&#xff0c;表示去完成某个行为时&#xff0c;当不同的人去完成时会有不同的形态&#xff0c;举个例子在车站买票&#xff0c;可以分为学生票&#xff0c;普通票&#xff0c;军人票&#xff0c;每种票的价格是不一样的&#xff0c;当你是不同的身…

如何高效删除 MySQL 日志表中的历史数据?实战指南

在处理高并发的物联网平台或者其他日志密集型应用时&#xff0c;数据库中的日志表往往会迅速增长&#xff0c;数据量庞大到数百GB甚至更高&#xff0c;严重影响数据库性能。如何有效管理这些庞大的日志数据&#xff0c;特别是在不影响在线业务的情况下&#xff0c;成为了一项技…

使用Windows远程桌面连接Linux

要在Kali Linux上使用Windows远程桌面连接&#xff08;MSTSC.exe&#xff09;&#xff0c;你可以通过配置xrdp服务来实现。以下是在Kali Linux上设置xrdp以便Windows远程桌面连接的具体步骤&#xff1a; 一、安装xrdp和Xfce桌面环境 更新软件包列表&#xff1a; 打开终端&…

Python和C++混淆矩阵地理学医学物理学视觉语言模型和算法模型评估工具

&#x1f3af;要点 优化损失函数评估指标海岸线检测算法评估遥感视觉表征和文本增强乳腺癌预测模型算法液体中闪烁光和切伦科夫光分离多标签分类任务性能评估有向无环图、多路径标记和非强制叶节点预测二元分类评估特征归因可信性评估马修斯相关系数对比其他准确度 Python桑…

基于C++和Python的进程线程CPU使用率监控工具

文章目录 0. 概述1. 数据可视化示例2. 设计思路2.1 系统架构2.2 设计优势 3. 流程图3.1 C录制程序3.2 Python解析脚本 4. 数据结构说明4.1 CpuUsageData 结构体 5. C录制代码解析5.1 主要模块5.2 关键函数5.2.1 CpuUsageMonitor::Run()5.2.2 CpuUsageMonitor::ComputeCpuUsage(…

大数据技术:Hadoop、Spark与Flink的框架演进

大数据技术&#xff0c;特别是Hadoop、Spark与Flink的框架演进&#xff0c;是过去二十年中信息技术领域最引人注目的发展之一。这些技术不仅改变了数据处理的方式&#xff0c;而且还推动了对数据驱动决策和智能化的需求。在大数据处理领域&#xff0c;选择合适的大数据平台是确…

有些硬盘录像机接入视频汇聚平台EasyCVR后通道不显示/显示不全,该如何处理?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T 1400协…

排序算法剖析

文章目录 排序算法浅谈参考资料评价指标可视化工具概览 插入排序折半插入排序希尔排序冒泡排序快速排序简单选择排序堆排序归并排序基数排序 排序算法浅谈 参考资料 数据结构与算法 评价指标 稳定性&#xff1a;两个相同的关键字排序过后相对位置不发生变化时间复杂度空间复…