1. jsonpath模块的使用场景

如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的。jsonpath模块就能解决这个痛点.

jsonpath可以按照key对python字典进行批量数据提取    【多层嵌套的复杂字典直接提取数据】

示例代码:

data = {'key1':  {'key2': {'key3': {'key4': {'key5': {'key6': 'python'}}}}}}
print(data)
print(data['key1']['key2']['key3']['key4']['key5']['key6'])

运行结果:


2. jsonpath模块的使用方法

2.1 jsonpath模块的安装

jsonpath是第三方模块,需要额外安装

pip install jsonpath

2.2 jsonpath模块提取数据的方法         【jsonpath的结果为列表,获取数据需要索引】

from jsonpath import jsonpath
ret = jsonpath(a, 'jsonpath语法规则字符串')    #  此处的a就是对应的词典

2.3 jsonpath语法规则

示例代码:

from jsonpath import jsonpathdata = {'key1':  {'key2': {'key3': {'key4': {'key5': {'key6': 'python'}}}}}}
print(data)
#  jsonpath的结果为列表,获取数据需要索引
print(data['key1']['key2']['key3']['key4']['key5']['key6'])
print(jsonpath(data, '$.key1.key2.key3.key4.key5.key6'))
print(jsonpath(data, '$.key1.key2.key3.key4.key5.key6')[0])
print(jsonpath(data, '$..key6')[0])

运行效果:

2.4 jsonpath使用示例

from jsonpath import jsonpathbook_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}}
}print(jsonpath(book_dict, '$..author'))
print(jsonpath(book_dict, '$..prince'))
print(jsonpath(book_dict, '$..price'))
print(jsonpath(book_dict, '$..book..price'))
print(jsonpath(book_dict, '$..book'))
print(jsonpath(book_dict, '$..bicycle.color'))
print(jsonpath(book_dict, '$..color'))

【print(jsonpath(book_dict, '$..author'))   有一个输出一个,有多个则全部输出,若没有则报错】

运行效果:

3. jsonpath练习

我们以拉勾网城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有城市的名字的列表,并写入文件。

参考代码:

import requests
import json
import jsonpath#  获取拉勾网城市json字符串
url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'
headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
}
response = requests.get(url, headers=headers)
html_str = response.content.decode()
print(html_str)
#  把json格式字符串转换成python对象
jsonobj = json.loads(html_str)
print(jsonobj)
#  从根节点开始,获取所有key为name的值
citylist = jsonpath.jsonpath(jsonobj, '$..name')
print(citylist)

获取的json数据进行解析:

运行效果:

爬虫之数据提取jsonpath模块的使用场景和使用方法相关推荐

  1. 【python】——爬虫03 数据提取[jsonpath模块、lxml模块]

    目录 一.概述 1. 响应内容分类 2. xml和html 3. 数据解析 二.jsonpath模块 1. 提取数据的方法 2. jsonpath语法规则 3. jsonpath练习:获取拉钩网城市j ...

  2. python网络爬虫系列(五)——数据提取 jsonpath模块

    一.数据提取概述 知识点 了解 响应内容的分类 了解 xml和html的区别 1. 响应内容的分类 在发送请求获取响应之后,可能存在多种不同类型的响应内容:而且很多时候,我们只需要响应内容中的一部分数 ...

  3. python网络爬虫系列(六)——数据提取 lxml模块

    一.数据提取-lxml模块 知识点 了解 lxml模块和xpath语法的关系 了解 lxml模块的使用场景 了解 lxml模块的安装 了解 谷歌浏览器xpath helper插件的安装和使用 掌握 x ...

  4. Python爬虫学习之第七天---数据提取-lxml模块和Xpath使用

    爬虫学习之第七天-数据提取-lxml模块和Xpath使用 知识点:了解 lxml模块和xpath语法的关系了解 lxml模块的使用场景了解 lxml模块的安装了解 谷歌浏览器xpath helper插 ...

  5. 爬虫之数据提取响应内容的分类

    爬虫之数据提取响应内容的分类 在发送请求获取响应之后,可能存在多种不同类型的响应内容:而且很多时候,我们只需要响应内容中的一部分数据 结构化的响应内容 json字符串   [高频出现] 可以使用re. ...

  6. Python数据提取-lxml模块

    更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn.com p ...

  7. 爬虫常用数据提取方式:正则、xpath、beautifulsoup

    文章目录 1.正则re 2.xpath 2.1 定位 2.1.1 xpath中选取节点的路径表达式 2.1.2 xpath谓语,即[ ]中的内容 2.1.3 选取未知节点 2.1.4 选择多个路径 2 ...

  8. 数据提取-lxml模块系列二

    3.2 xpath中节点的关系 author是title的第一个兄弟节点 4. xpath语法-基础节点选择语法 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集. 这些路径表达式和我 ...

  9. edge新版 能够正则式_Python爬虫七 数据提取之正则

    数据提取之正则,主要用到的re模块. 一.正则表达式 用事先定义好的一些特定字符.及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑. 二.正则表达式的常见语法 正 ...

最新文章

  1. Flex 布局:语法篇
  2. Python实例介绍正则化贪心森林算法(附代码)
  3. 过滤器应用【编码、敏感词、压缩、转义过滤器】
  4. 集合 判断是否为同一元素 总结
  5. SICP 1.21 1.22 1.23 1.24
  6. js动态生成div和事件
  7. pointer-events属性
  8. 《实施Cisco统一通信管理器(CIPT2)》一1.6 拨号计划方面面临的挑战
  9. Python架构(二)
  10. android t跳转到fragment,Android 使用EventBus进行Fragment和Activity通信
  11. 循环内的局部变量和性能
  12. 线性表----链式表
  13. matlab机液位置伺服系统,基于MATLAB的电液位置伺服系统仿真分析
  14. H5 FileReader对象
  15. 蓝桥杯 ADV-73 算法提高 数组输出
  16. nginx 配置文件详解 深入理解nginx配置文件
  17. Xen虚拟机加入Puppet环境如何解决时间同步问题
  18. 进销存excel_超实用Excel完整进销存管理系统,多功能实现,轻松套用赶GET
  19. USB3.0接口定义浅析
  20. java基于ssm的在线装机DIY系统的分析与设计

热门文章

  1. 技术新贵:RPA与NLP技术的结合与应用
  2. 中文NLP的分词真有必要吗?李纪为团队四项任务评测一探究竟 | ACL 2019
  3. 周志华、宋继强谈如何培养高端AI人才,以及深度学习的局限性和未来
  4. @程序员,第一批00后开始报考AI专业了
  5. 腾讯SNG举办TSAIC大会,学术和工业界共话AI前沿趋势
  6. 蓝绿发布、滚动发布、灰度发布,有什么区别?这下明白了
  7. 来!一起搭建个永久运行的个人服务器吧!
  8. 10个重构小技巧,去掉代码中的S味
  9. 鱼佬:我的数据挖掘之路!
  10. 漫画 | 大数据风控从业者的一天