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

# 1.确定url
import jsonimport jsonpath
import requestsurl = "http://www.lagou.com/lbs/getAllCitySearchLabels.json"# 用户代理
headers_ = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"
}# 2.发送请求
response = requests.get(url, headers=headers_)
# 字符串类型
str_data = response.text  # 数据是json数据类型# 将json数据类型转换成python类型
python_data = json.loads(str_data)
# 3.提取数据  获取所有城市
jsonpath_data = jsonpath.jsonpath(python_data, "$..name")
print(jsonpath_data)
# 4.保存数据
# # 方式二:
# # python数据类型转换成json数据
# json_data = json.dumps(jsonpath_data, ensure_ascii=False)
# with open("city_data_1.json",'w',encoding='utf-8')as f:
#     f.write(json_data)# python数据类型转换成json类型并且写入文件
with open("city_data_2.json", 'w', encoding='utf-8')as f:json.dump(jsonpath_data, f, ensure_ascii=False)

 在爬取移动端app上的应用:

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

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

所以

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

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

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

代码如下:

import json
import requests
import jsonpathif __name__ == '__main__':url_ = 'https://ib.snssdk.com/api/news/feed/v47/?last_ad_show_interval=-1&cached_item_num=0&ad_ui_style=%7B%22van_package%22%3A41000006%7D&concern_id=6286225228934679042&refer=1&session_refresh_idx=3&refresh_reason=1&count=20&min_behot_time=1651989970&last_refresh_sub_entrance_interval=1651990078&cp=6a2178715ee3eq1&plugin_enable=4&loc_mode=5&tt_from=pull&lac=4527&cid=28883&client_extra_params=%7B%22ad_download%22%3A%7B%22space_unoccupied%22%3A121412376%2C%22space_cleanable%22%3A0%7D%2C%22last_ad_position%22%3A-1%2C%22playparam%22%3A%22codec_type%3A7%2Ccdn_type%3A1%2Cunwatermark%3A1%22%2C%22sec_uid%22%3A%22%22%7D&iid=1939982869873063&device_id=3685210262092968&ac=wifi&mac_address=68%3A54%3A5A%3A87%3A16%3ADA&channel=lite2_tengxun&aid=35&app_name=news_article_lite&version_code=828&version_name=8.2.8&device_platform=android&ab_version=1859936%2C668908%2C4061161%2C668907%2C4061157%2C668905%2C4061123%2C668906%2C4061131%2C668904%2C4061108%2C668903%2C4061151%2C3596061%2C4021758&ab_client=a1%2Ce1%2Cf2%2Cg2%2Cf7&ab_feature=z1&abflag=3&ssmix=a&device_type=SM-N976N&device_brand=samsung&language=zh&os_api=25&os_version=7.1.2&openudid=8ca3db10f2914a74&manifest_version_code=8280&resolution=900*1600&dpi=320&update_version_code=82809&_rticket=1651990078866&dq_param=0&sa_enable=0&tma_jssdk_version=1.95.0.28&rom_version=25&plugin_state=7740064952349&cdid=f6167b84-e640-47e1-97f7-c900d4744731'headers_ = {'Accept-Encoding': 'gzip','X-SS-REQ-TICKET': '1651990078867','x-tt-dt': 'AAAQ3KIX6HMI2AFGNDQMZYO4JU7ZT5YQG6TBJTAOYUQA4DMDMKV63L3PWEF56XY2OW2V4HDTMM3F5FWR2TTXLARPZ3ASK76F6JQ5VJFPJCXGWXI7OB44Y7UXFQ5C2','passport-sdk-version': '30','sdk-version': '2','x-vc-bdturing-sdk-version': '2.0.0','User-Agent': 'Dalvik/2.1.0(Linux;U;Android7.1.2;SM-N976NBuild/QP1A.190711.020)NewsArticle/8.2.8tt-ok/3.10.0.2','Cookie': 'install_id=1939982869873063;ttreq=1$ac5b9b480c6fe137d919eb36caeff410926d402a;odin_tt=c28540dd78aaf7aa3a381426e0eb10f3d5c4c48fb988b4e007015c9c6127d59d41e4f4a4ace27f8f31945c9448b4cc920c3cd9e6bcd5bb847f00ee96fd7ea09d6b8e6da720938fcc8c6c80d51446445b;passport_csrf_token=fa73a154eec72cad9ed4b700e740c763;passport_csrf_token_default=fa73a154eec72cad9ed4b700e740c763','X-Tyhon': 'njJg0oYvGPaxKlnjggt+8qIQY/OfIFTpnSBnZ44=','X-Khronos': '1651990078','X-Gorgon': '04042095000145faad5d6be3941c963c963cbc1ebe78635fcff6','Host': 'ib.snssdk.com','Connection': 'Keep-Alive',}python_data = requests.get(url=url_, headers=headers_).json()content_list = jsonpath.jsonpath(python_data, '$..content')li = []for item in content_list:li.append(json.loads(item))abstract_list = jsonpath.jsonpath(li, '$..abstract')print(abstract_list)print("=================================================================")# 过滤掉空字符串abstract_new = []for item in abstract_list:if len(item) != 0:abstract_new.append(item)print(abstract_new)

代码中就不做数据保存了,可以参照前一个举例!不懂得欢迎留言!

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

  1. 【Python爬虫实例学习篇】——5、【超详细记录】从爬取微博评论数据(免登陆)到生成词云

    [Python爬虫实例学习篇]--5.[超详细记录]从爬取微博评论数据(免登陆)到生成词云 个人博客地址:ht/tps://www.asyu17.cn/ 精彩部分提醒: (1)微博评论页详情链接为一个 ...

  2. 超详细的Android百度地图开发:在APP上定位并显示出来

    超详细的Android百度地图开发:在APP上定位并显示出来 一 写在前面 二 注册百度开发者账户.申请API KEY 三.代码实现 四.问题 五.总结 一 写在前面 由于项目所需,我需要在手机APP ...

  3. 超详细解析python爬虫爬取京东图片

    超详细图片爬虫实战 实例讲解(京东商城手机图片爬取) 1.创建一个文件夹来存放你爬取的图片 2.第一部分代码分析 3.第二部分代码分析 完整的代码如下所示: 升级版代码: 爬取过程中首先你需要观察在手 ...

  4. Burpsuite介绍及2022.8.2版本超详细安装教程(图文版)

    Burpsuite介绍及2022.8.2版本超详细安装教程(图文版) 文章目录 Burpsuite介绍及2022.8.2版本超详细安装教程(图文版) Burpsuite是什么? Burpsuite环境 ...

  5. 卷积神经网络超详细介绍

    文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图像识别的任务 4.CNN的特征 5.CNN的求解 6.卷积神经网络注意事项 7.CNN发展综合介绍 8.LeNet-5结构分析 ...

  6. 卷积神经网络超详细介绍(转载)

    卷积神经网络超详细介绍 文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图像识别的任务 4.CNN的特征 5.CNN的求解 6.卷积神经网络注意事项 7.CNN发展综合介绍 8 ...

  7. 【目标检测】56、目标检测超详细介绍 | Anchor-free/Anchor-based/Backbone/Neck/Label-Assignment/NMS/数据增强

    文章目录 1.双阶段和单阶段目标检测器 1.1 双阶段目标检测器 1.1.1 R-CNN 1.1.2 SPP 1.1.3 Fast R-CNN 1.1.4 Faster R-CNN 1.2 单阶段目标 ...

  8. MyBatis超详细介绍——SQL语句构建器类

    MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...

  9. 卷积神经网络(CNN)超详细介绍

    文章转自:https://blog.csdn.net/jiaoyangwm/article/details/80011656 文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图 ...

  10. 卷积神经网络超详细介绍1

    1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图像识别的任务 4.CNN的特征 5.CNN的求解 6.卷积神经网络注意事项 7.CNN发展综合介绍 8.LeNet-5结构分析 9.Al ...

最新文章

  1. Linux-进程、进程组、作业、会话、控制终端详解
  2. JavaScript学习总结(三)——逻辑And运算符详解
  3. 手机号段对应地区编码_漫画:“哈夫曼编码” 是什么鬼?
  4. python机器学习常用包下载安装以及使用案例汇总
  5. 英特尔处理器的性能监控事件文件下载
  6. ubuntu重置root密码
  7. Youki的Matlab命名规则
  8. java内存映射缓存,java – 用于数据库实现的内存映射的MappedByteBuffer或直接ByteBuffer?...
  9. Struts,Spring 等开源项目svn 地址
  10. fanuc机器人试题_工业机器人知识要点解析(FANUC机器人)
  11. mysql nfs存储_NFS存储服务及部署
  12. openCV—converTo()用法
  13. 树莓派驱动低成本双目VR摄像头
  14. 《IT老外在中国》第29期:这位美籍华裔兜兜转转又回到了心心念念的故乡
  15. CMD 常用命令总结
  16. typec扩展坞hdmi没反应_解决电脑接口不足难题,实测绿联九合一type-c扩展坞到底有多强...
  17. Oracle-08:连接查询
  18. android pak文件_游戏中的Pak文件解析
  19. Linux mkdir文件已存在,Linux 命令之 mkdir
  20. hr 0x800401f0 尚未调用 CoInitialize

热门文章

  1. 微信小程序云数据库操作
  2. 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)
  3. java编程基础总结——20.foreach遍历及lambda表达式
  4. ESP32核心原理图
  5. android apr分析,APR分析-设计篇
  6. MySQL gtid purge_MySQL中set gtid_purged的行为变更及对备份恢复的影响
  7. 把抽奖活动写成一篇技术博客是怎样一种体验
  8. python des解密_python des加解密
  9. matlab 求特征值的命令,matlab怎么求特征值
  10. 冰河竟然被腾讯邀请去做技术分享了,这是要起飞的节奏吗?