爬虫之数据提取jsonpath模块的使用场景和使用方法
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模块的使用场景和使用方法相关推荐
- 【python】——爬虫03 数据提取[jsonpath模块、lxml模块]
目录 一.概述 1. 响应内容分类 2. xml和html 3. 数据解析 二.jsonpath模块 1. 提取数据的方法 2. jsonpath语法规则 3. jsonpath练习:获取拉钩网城市j ...
- python网络爬虫系列(五)——数据提取 jsonpath模块
一.数据提取概述 知识点 了解 响应内容的分类 了解 xml和html的区别 1. 响应内容的分类 在发送请求获取响应之后,可能存在多种不同类型的响应内容:而且很多时候,我们只需要响应内容中的一部分数 ...
- python网络爬虫系列(六)——数据提取 lxml模块
一.数据提取-lxml模块 知识点 了解 lxml模块和xpath语法的关系 了解 lxml模块的使用场景 了解 lxml模块的安装 了解 谷歌浏览器xpath helper插件的安装和使用 掌握 x ...
- Python爬虫学习之第七天---数据提取-lxml模块和Xpath使用
爬虫学习之第七天-数据提取-lxml模块和Xpath使用 知识点:了解 lxml模块和xpath语法的关系了解 lxml模块的使用场景了解 lxml模块的安装了解 谷歌浏览器xpath helper插 ...
- 爬虫之数据提取响应内容的分类
爬虫之数据提取响应内容的分类 在发送请求获取响应之后,可能存在多种不同类型的响应内容:而且很多时候,我们只需要响应内容中的一部分数据 结构化的响应内容 json字符串 [高频出现] 可以使用re. ...
- Python数据提取-lxml模块
更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn.com p ...
- 爬虫常用数据提取方式:正则、xpath、beautifulsoup
文章目录 1.正则re 2.xpath 2.1 定位 2.1.1 xpath中选取节点的路径表达式 2.1.2 xpath谓语,即[ ]中的内容 2.1.3 选取未知节点 2.1.4 选择多个路径 2 ...
- 数据提取-lxml模块系列二
3.2 xpath中节点的关系 author是title的第一个兄弟节点 4. xpath语法-基础节点选择语法 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集. 这些路径表达式和我 ...
- edge新版 能够正则式_Python爬虫七 数据提取之正则
数据提取之正则,主要用到的re模块. 一.正则表达式 用事先定义好的一些特定字符.及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑. 二.正则表达式的常见语法 正 ...
最新文章
- Flex 布局:语法篇
- Python实例介绍正则化贪心森林算法(附代码)
- 过滤器应用【编码、敏感词、压缩、转义过滤器】
- 集合 判断是否为同一元素 总结
- SICP 1.21 1.22 1.23 1.24
- js动态生成div和事件
- pointer-events属性
- 《实施Cisco统一通信管理器(CIPT2)》一1.6 拨号计划方面面临的挑战
- Python架构(二)
- android t跳转到fragment,Android 使用EventBus进行Fragment和Activity通信
- 循环内的局部变量和性能
- 线性表----链式表
- matlab机液位置伺服系统,基于MATLAB的电液位置伺服系统仿真分析
- H5 FileReader对象
- 蓝桥杯 ADV-73 算法提高 数组输出
- nginx 配置文件详解 深入理解nginx配置文件
- Xen虚拟机加入Puppet环境如何解决时间同步问题
- 进销存excel_超实用Excel完整进销存管理系统,多功能实现,轻松套用赶GET
- USB3.0接口定义浅析
- java基于ssm的在线装机DIY系统的分析与设计