https://blog.csdn.net/nd211314555/article/details/88426529

python – jsonPath模块教程
目录
python – jsonPath模块教程
了解jsonPath模块的使用场景
掌握jsonPath模块的使用
了解jsonPath模块的使用场景
如果有一个多层嵌套的复杂字典,想要根据key和小标来批量提取value,这是比较困难的。jsonPath模块就能解决这个痛点,接下来我们来学习一下jsonpath模块
jsonPath可以按照key对python字典进行批量数据提取
掌握jsonPath模块的使用
jsonpath模块的安装

jsonpath是第三方模块,想要额外安装

pip install jsonpath

jsonpath模块提取数据的方法

from jsonpath import jsonpath

result = jsonpath(a,’jsonpath语法规则字符串’)
1
2
3
jsonpath语法规则

JsonPath 描述
$ 根节点
@ 现行节点
.or[] 取子节点
n/a 取父节点,jsonpath为支持
.. 就是不管位置,选择所有复合条件的条件
* 匹配所有元素节点
n/a 根据属性访问,json不支持,因为json是个key-value递归结构,不需要数属性访问
[] 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
[,] 支持迭代器中做多选
?() 支持过滤操作
() 支持表达式计算
n/a 分组,JsonPath不支持
jsonpath使用示例

book_dict = {
“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
}
}
}

from jsonpath import jsonpath
print(jsonpath(book_dict,’$..author’)) #如果取不到返回false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
jsonpath练习操作

JsonPath Result
$.store.book[*].author store中的所有的book作者
$…author 所有的作者
$.store.* store下的所有元素
$.store…price store中的所有价钱
$…book[2] 第三本书
$…book[(@.length-1)] 最后一本书
$…book[0,1] 取前两本书
$…book[?(@.isbn)] 获取有jsbn的所有数
$…book[?(@.price<10)] 获取价格大于10
$…* 匹配所有数据
jsonpath练习

我们以拉勾网城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有城市的名字的列表
参考代码

#jsonPath示例
# @Author : joker
# @Date : 2019-03-12
import json

import requests

import jsonpath

url = ‘http://www.lagou.com/lbs/getAllCitySearchLabels.json’

headers = {
“User-Agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36”
}

response = requests.get(url,headers = headers)

html_str = json.loads(response.content.decode())

# print(html_str)

#从根节点开始,获取所有key为name的值
city_list = jsonpath.jsonpath(html_str, ‘$..name’)

print(city_list)
————————————————
版权声明:本文为CSDN博主「joker_hai」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nd211314555/article/details/88426529

发表评论

邮箱地址不会被公开。 必填项已用*标注