在爬虫过程中,常需要拿到接口来解析返回的json数据,方法有很多,传统的做法便是一层一层的取数据,这样过于麻烦,还耗时,于是找到了JsonPath这样的神器

一、JsonPath的优势

1、操作方式简单

2、有通用的表达式获取指定的值

3、减少代码量和内存消耗

4、依赖于强大的XPath库

二、使用方法

1、JsonPath的操作符

操作 说明
$ 查询根元素。这将启动所有路径表达式
@ 当前节点由过滤谓词处理
* 通配符,必要时可用任何地方的名称或数字
.. 深层扫描,必要时在任何地方可以使用名称
. 点,表示子节点
[‘‘ (, ‘‘)] 括号表示子项
[ (, )] 数组索引或索引
[start:end] 数组切片操作
[?()] 过滤表达式,表达式必须求值为一个布尔值引

2、使用JsonPath

2.1 json数据:

{
  "code": 200,
  "current": 1,
  "msg": "操作成功",
  "pages": 1,
  "product_all": [{
    "created_at": "2021-10-20 15:52:26",
    "id": 4,
    "product_description": "",
    "product_name": "云大学",
    "product_sign": "YUN",
    "product_type": 0,
    "producter": "Init"
  }, {
    "created_at": "2021-07-16 16:23:44",
    "id": 3,
    "product_description": "--",
    "product_name": "APP",
    "product_sign": "APP",
    "product_type": 0,
    "producter": "Init"
  }, {
    "created_at": "2021-07-16 15:53:01",
    "id": 2,
    "product_description": "--",
    "product_name": "WEB",
    "product_sign": "WEB",
    "product_type": 0,
    "producter": "Init"
  }],
  "total": 3
}

2.2 python语法

import jsonpath


class AnalysisJson:
    def __init__(self, result, element):
        self.result = result
        self.element = element

    def JsonResult(self):
        """
        :param result: 返回值
        :param element: 元素名称
        :return: city: 筛选后的结果
        """
        result = jsonpath.jsonpath(self.result, self.element)
        return result

2.3 测试结果

操作 说明
$.code 取到code的值
$.product_all[..product_name] 取到所有product_name值
$.product_all[0,1][..product_name] 取到前两个list中product_name的值

添加微信