python-jsonpath模块教程

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语法规则字符串')
      
    • 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)
      
      

你可能感兴趣的:(python)