2022年jsonpath的超详细介绍以及在爬取移动端app上的灵活运用

   日期:2024-12-18     作者:ira0v       评论:0    移动:http://w.yusign.com/mobile/news/961.html
核心提示:jsonpath介绍 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供

jsonpath介绍

用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

安装方法:pip install jsonpath

官方文档:http://goessner.net/articles/JsonPath

语法: jsonpath.jsonpath(python数据类型,筛选条件)  

     没筛选到则返回False,筛选到则返回一个列表

import jsonpath

dict_data = {"store": {

    "book": [

        {"category": "reference",

         "author": "吴承恩",

         "title": "西游记",

         "price": 8.95

         },

        {"category": "fiction",

         "author": "曹雪芹",

         "title": "红楼梦",

         "price": 12.99

         },

        {"category": "fiction",

         "author": "罗贯中",

         "title": "三国演义",

         "isbn": "0-553-21311-3",

         "price": 8.99

         },

        {"category": "fiction",

         "author": "施耐庵",

         "title": "水浒传",

         "isbn": "0-395-19395-8",

         "price": 22.99

         }

    ],

    "bicycle": {

        "color": "red",

        "price": 19.95

    }

}

}

# # 获取store的值

# # $ 根节点   .选取子节点

# bookList = jsonpath.jsonpath(dict_data, "$.store")

# print(bookList)  # 返回的是一个列表

# # # 获取book的值 (键=《book,值=》列表)

# bookList = jsonpath.jsonpath(dict_data, "$.store.book")

# print(bookList)  # 返回的是一个列表

#

# # 获取book所有值   (列表里面的值

# # * 匹配所有的元素

# bookList = jsonpath.jsonpath(dict_data, "$.store.book.*")

# print(bookList)  # 返回的是一个列表

# # 获取book的值  ..

# # .. 跨节点

# bookList = jsonpath.jsonpath(dict_data, "$..book")

# print(bookList)  # 返回的是一个列表

#

# bookList = jsonpath.jsonpath(dict_data, "$..book.*")

# print(bookList)  # 返回的是一个列表

# 总结:. 和 ..

# . 选取子节点必须要一个一个取,直到定位到对应的节点元素为止

# ..  直接跨过中间的节点,定位到要取的节点

# # 获取第三本书的信息

# # 同学们还记不得列表怎么取单个值

# # [] 迭代器表示(下标取值) 下标也是从0开始

# bookList = jsonpath.jsonpath(dict_data, "$..book[2]")

# print(bookList)  # 返回的是一个列表

# # 获取前两本书的信息(第一本和第二本)

# # [,] 支持在迭代器中取多个值   切片 [初始值:结束值]

# bookList = jsonpath.jsonpath(dict_data, "$..book[0,1]")  # 注意:包前包后

# print(bookList)  # 返回的是一个列表

# bookList = jsonpath.jsonpath(dict_data, "$..book[:2]")  # 注意:包前不包后

# print(bookList)  # 返回的是一个列表

# # 最后一本书

# # @当前选中的节点   @.length 获取长度的 相当于len()  () 支持表达式计算

# bookList = jsonpath.jsonpath(dict_data, "$..book[(@.length-1)]")  # 下标从0开始

# print(bookList)  # 返回的是一个列表

# # 获取有author的所有值

# # [] 根据内容选值  ?()根据条件过滤  @当前选中的节点

# bookList = jsonpath.jsonpath(dict_data, "$..book[?(@.author)]")

# print(bookList)  # 返回的是一个列表

# # 获取所有isbn的值

# bookList = jsonpath.jsonpath(dict_data, "$..book[?(@.isbn)]")

# print(bookList)  # 返回的是一个列表

# # 获取价格小于10的所有书

# bookList = jsonpath.jsonpath(dict_data, "$..book[?(@.price <10)]")

# print(bookList)  # 返回的是一个列表

我们以拉勾网城市JSON文件为例

http://www.lagou.com/lbs/getAllCitySearchLabels.json

 
 

使用fiddler抓取到https的数据包,复制到JSON在线解析及格式化验证 - JSON.cn上查看,如图

本次目标要提取出contentabstract的值,但是content这个节点的内容却是字符串了

所以

第一步先"$..content"提取出content的列表

第二步遍历content的列表转换为json数据(python数据)

最后再使用jsonpath语法提取abstract的值

代码如下

 

 

     本文地址:http://w.yusign.com/news/961.html    述古往 http://w.yusign.com/static/ , 查看更多
 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
资讯
点击排行
{
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号