Python爬虫——解析常用三大方式之JsonPath

2024-03-04 07:36

本文主要是介绍Python爬虫——解析常用三大方式之JsonPath,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

JsonPath

安装

使用

我们的json数据

基本使用

案例

总结


JsonPath

主要适用于解析一些json的数据

安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jsonpath

使用

obj = json.load(open( ' json文件 ' , ' r ' , encoding = ' utf-8 ' ) )ret = jsonpath.jsonpath ( obj , ' jsonpath 语法 ' )

可以看看这个文章:JSONPath-简单入门_jsonpath简单入门-CSDN博客

 注意:jsonpath和xpath不一样,jsonpath只能解析本地的文件,无法解析服务器的文件


我们的json数据

{"store": {"book": [{"category": "爽文","author": "发飙的蜗牛","title": "妖神记","price": 8.95},{"category": "战争","author": "超神影业","title": "雄兵连","price": 12.99},{"category": "爽文","author": "唐家三少","title": "斗罗大陆","isbn": "0-553-21311-3","price": 8.99},{"category": "爽文","author": "南派三叔","title": "星辰变","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "蓝色","price": 19.95}}
}

基本使用

import jsonpath
import jsonobj = json.load(open('20_解析_jsonpath.json', 'r', encoding='utf-8'))
# print(obj)
# 书店所有的书
author_book_list = jsonpath.jsonpath(obj, '$.store.book[*].author')
print(author_book_list)# 所有的作者
author_list = jsonpath.jsonpath(obj, '$..author')
print(author_list)# store的所有元素
store_list = jsonpath.jsonpath(obj, '$.store.*')
print(store_list)# store里所有的price
store_price_list = jsonpath.jsonpath(obj, '$.store..price')
print(store_price_list)# 第三本书
book_3 = jsonpath.jsonpath(obj, '$.store.book[2]')
print(book_3)# 最后一本书
book_last = jsonpath.jsonpath(obj, '$..book[(@.length-1)]')
print(book_last)# 前两本书
book_12_way1 = jsonpath.jsonpath(obj, '$.store.book[0,1]')
book_12_way2 = jsonpath.jsonpath(obj, '$.store.book[:2]')
print(book_12_way1)
print(book_12_way2)# 条件过滤需要在 () 的前面添加 ?
# 过滤出所有包含isbn(版本号)的书
book_isbn = jsonpath.jsonpath(obj, '$..book[?(@.isbn)]')
print(book_isbn)# 哪本书超过了十块
book_moreThan_10 = jsonpath.jsonpath(obj, '$..book[?(@.price>10)]')
print(book_moreThan_10)

案例

获取淘淘票支持的全部城市

案例代码: 

import urllib.request
import jsonpath
import jsonurl = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1709386130547_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'headers = {# ':authority': 'dianying.taobao.com',# ':method': 'GET',# ':path': '/cityAction.json?activityId&_ksTS=1709386130547_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true',# ':scheme': 'https','Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',# 'Accept-Encoding': 'gzip, deflate, br, zstd','Accept-Language': 'zh-CN,zh;q=0.9','Bx-V': '2.5.11','Cookie': 'cna=ckPSHCe/+WACAW8q8CaeQGRA; t=d1bf17f4ff9b1a4f81050b57987cfd21; cookie2=107a2f127e9443a844b590a9101e6a01; v=0; _tb_token_=3a373550bdf81; xlly_s=1; isg=BNPTBeN8shk43n7NaOUT023XYlf9iGdKzTNYOIXw1fIpBPKmDVtGm_XaPnRqo79C','Referer': 'https://dianying.taobao.com/','Sec-Ch-Ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"','Sec-Ch-Ua-Mobile': '?0','Sec-Ch-Ua-Platform': '"Windows"','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-origin','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36','X-Requested-With': 'XMLHttpRequest',
}request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request)content = response.read().decode('utf-8')# print(content)
# 处理掉jsonp109
content = content.split('(')[1].split(')')[0]# 保存到本地
with open('TaoPiaoPiao_city.json' , 'w', encoding='utf-8') as fp:fp.write(content)obj = json.load(open('TaoPiaoPiao_city.json', 'r', encoding='utf-8'))city_list = jsonpath.jsonpath(obj, '$..regionName')
print(city_list)

总结

学会xpath之后稍作修改便是jsonpath,很简单

ヾ( ̄▽ ̄)Bye~Bye~

这篇关于Python爬虫——解析常用三大方式之JsonPath的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772466

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下