在做爬虫的时候用的比较多的就是xpath来提取html中的数据,这个相信大家还是比较熟悉的,在python中也有这样一个第三方模块jsonpath可以直接提取json格式数据。
安装jsonpath
pip install jsonpath
如下格式数据:
使用jsonpath获取数据方式如下:
import json
from jsonpath import jsonpath
with open('h3blog.json') as f :
data = json.loads(f.read())
jsonpath(data, '$..steps[*].duration')
jsonpath 常见语法
功能 | 语法 |
---|---|
根节点 | $ |
当前节点 | @ |
子节点 | .或[] |
任意子节点 | * |
任意后代节点 | .. |
# 提取所有steps键的子节点对应instruction值
jsonpath(data, '$..steps.*.instruction')
# 多选所有steps键的子节点对应的instruction与action值
jsonpath(data, '$..steps.*[instruction,action]')
# 选择steps键的第0个子节点对应的instruction与action值
jsonpath(data, '$..steps[0][instruction,action]')
# 选择steps键的第1到3(不包括3)个子节点对应的instruction与action值
jsonpath(data, '$..steps[1:3][instruction,action]')
# 配合@,选择steps键的最后一个子节点对应的instruction与action值
jsonpath(data, '$..steps[(@.length-1)][instruction,action]')
# 找到所有steps子节点中orientation为“西”的
jsonpath(data, '$..steps[?(@.orientation == "西")]')
# 找到所有具有polyline键的节点对应的polyline与road键对应值
jsonpath(data, '$..[?(@.polyline)][polyline,road]')
# 获取结果的JSONPath表达式
jsonpath(data, '$..[?(@.polyline)][polyline,road]', result_type=None)