python - jsonPath模块教程
-
了解jsonPath模块的使用场景
- 如果有一个多层嵌套的复杂字典,想要根据key和小标来批量提取value,这是比较困难的。jsonPath模块就能解决这个痛点,接下来我们来学习一下jsonpath模块
- jsonPath可以按照key对python字典进行批量数据提取
- 如果有一个多层嵌套的复杂字典,想要根据key和小标来批量提取value,这是比较困难的。jsonPath模块就能解决这个痛点,接下来我们来学习一下jsonpath模块
-
掌握jsonPath模块的使用
-
jsonpath模块的安装
-
jsonpath是第三方模块,想要额外安装
pip install jsonpath
-
-
jsonpath模块提取数据的方法
from jsonpath import jsonpath result = jsonpath(a,'jsonpath语法规则字符串')
-
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
-
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)
-