python-jsonpath模块教程

python - jsonPath模块教程

  • 了解jsonPath模块的使用场景
    • 如果有一个多层嵌套的复杂字典,想要根据key和小标来批量提取value,这是比较困难的。jsonPath模块就能解决这个痛点,接下来我们来学习一下jsonpath模块
      • jsonPath可以按照key对python字典进行批量数据提取
  • 掌握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练习操作

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

    • 参考代码

      #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)
      
      
  • 12
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值