当前位置: 首页 > news >正文

Python爬虫---解析---JSONPath

Xpath可以解析本地文件和服务器响应的文件,JSONPath只能解析本地文件

1. 安装jsonpath:pip install jsonpath

注意:需要安装在python解释器相同的位置,例如:D:\Program Files\Python3.11.4\Scripts

2. 使用步骤

2.1 导入:import jsonpath

2.2 使用:

示例1:

# 导包
import jsonpath
import jsonobj = json.load(open("1224-解析-jsonpath.json", "r", encoding="utf-8"))
# print(obj)# 书店所有书的作者
author_list = jsonpath.jsonpath(obj,"$.store.book[*].author")
print(author_list)# 所有的作者
all_author_list= jsonpath.jsonpath(obj,"$..author")
print(all_author_list)# store下面的所有元素
tag_list = jsonpath.jsonpath(obj,"$.store.*")
print(tag_list)# store里面所有东西的price
price_list= jsonpath.jsonpath(obj,"$.store..price")
print(price_list)# 第三个书
book= jsonpath.jsonpath(obj,"$..book[2]")
print(book)# 最后一本书
end_book = jsonpath.jsonpath(obj, "$..book[(@.length-1)]")
print(end_book)# 前两本书
# before_two_book = jsonpath.jsonpath(obj,"$..book[0,1]")
before_two_book = jsonpath.jsonpath(obj,"$..book[:2]")
print(before_two_book)# 过滤出所有包含isbn的书-------条件过滤需要在 () 前面加个 ?
contain_isbn_book = jsonpath.jsonpath(obj, "$..book[?(@.isbn)]")
print(contain_isbn_book)# 哪本书超过了10块钱
over_ten_book = jsonpath.jsonpath(obj,"$..book[?(@.price>10)]")
print(over_ten_book)

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}}
}

示例2:获取淘票票城市名称

import json
import jsonpath
import urllib.requesturl = "https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1703418735341_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true"headers = {# 带 冒号 的不能用# ':authority': 'dianying.taobao.com',# ':method': 'GET',# ':path': '/cityAction.json?activityId&_ksTS=1703418735341_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','Accept-Language': 'zh-CN,zh;q=0.9','Bx-V': '2.5.6','Cookie': 'cna=lZ14HbG2yWQCAQ6bDW7ouWON; t=017bbe5210a298f352a8db14812a276e; cookie2=1441fe3ded83f315b1b19dfc2b9a9e05; v=0; _tb_token_=eb85057357ee1; xlly_s=1; tb_city=110100; tb_cityName="sbG+qQ=="; l=fBxZpp6rNqEgeUwFBO5Clurza77TFIOb4sPzaNbMiIEGa1RP9F_IcNCO6tx2WdtjgTCYLetPx-igEdLHR3VMCc0c07kqm05KFxvtaQtJe; tfstk=eM463YjsPdv12gxMdO1UFp6SAG3fTR_yhIGYZSLwMV3tGZw4LCPagPrIM-yhi10aMxwbLv2jm1DqHxw4Ml5FzaPgsq0xhT7PzJCuyP6y925dL50mk9Rekg77s87O5ASeMhJeUjOtOEaB4ilGt9lBkEUOocMW0vcntysmjYFT5ELYsfise5HC4i8rFAgWcBiklXMPO6tDmF8jN-kGwsXtXXc1U61BInmttXMAO6tkIchn1WfCO3xl.; isg=BKWlkniMLCwIKUkEEWtg7T3NtGHf4ll0cWg1jKeLS1zrvsUwbzLcRHbQSCLIvnEs','Referer': 'https://dianying.taobao.com/?spm=a1z21.3046609.city.1.32c0112aGBdQw9&city=110100','Sec-Ch-Ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"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/120.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(); 需要去掉,使用split切割# split切割
content = content.split("(")[1].split(")")[0]
# print(content)# json写入文件
with open("1224-解析-jsonpath解析淘票票.json", "w", encoding="utf-8") as fp:fp.write(content)obj = json.load(open("1224-解析-jsonpath解析淘票票.json", "r", encoding="utf-8"))# 获取所有regionName
city_list = jsonpath.jsonpath(obj, "$..regionName")
print(city_list)

相关文章:

Python爬虫---解析---JSONPath

Xpath可以解析本地文件和服务器响应的文件,JSONPath只能解析本地文件 1. 安装jsonpath:pip install jsonpath 注意:需要安装在python解释器相同的位置,例如:D:\Program Files\Python3.11.4\Scripts 2. 使用步骤 2.1 导入&…...

路由器介绍和命令操作

先来回顾一下上次的内容: ip地址就是由32位二进制数组 二进位数就是只有数字0和1组成 网络位:类似于区号,表示区域作用 主机位:类似于号码,表示区域中编号 网络名称:网络位不变,主机位全为0 …...

Hadoop——分布式计算

一、分布式计算概述 1. 什么是计算、分布式计算? 计算:对数据进行处理,使用统计分析等手段得到需要的结果分布式计算:多台服务器协同工作,共同完成一个计算任务2. 分布式计算常见的2种工作模式分散->汇总 (MapReduce就是这种模式)将数据分片,多台服务器各自负责一…...

LaTeX引用参考文献 | Texstudio引用参考文献

图片版教程: 文字版教程: ref.bib里面写参考的文献,ref.bib和document.tex要挨着放,同一个目录里面. 解析一下bib文件格式:aboyeji2023effect是引用文献的关键字,需要在正文document.tex里面使用\cite指令…...

如何在Go中使用模板

引言 您是否需要以格式良好的输出、文本报告或HTML页面呈现一些数据?你可以使用Go模板来做到这一点。任何Go程序都可以使用text/template或html/template包(两者都包含在Go标准库中)来整齐地显示数据。 这两个包都允许你编写文本模板并将数据传递给它们,以按你喜欢的格式呈…...

云原生之深入解析基于FunctionGraph在Serverless领域的FinOps的探索和实践

一、背景 Serverless 精确到毫秒级的按用付费模式使得用户不再需要为资源的空闲时间付费。然而,对于给定的某个应用函数,由于影响其计费成本的因素并不唯一,使得用户对函数运行期间的总计费进行精确的事先估计变成了一项困难的工作。以传统云…...

电子电器架构(E/E)演化 —— 主流主机厂域集中架构概述

电子电器架构(E/E)演化 —— 主流主机厂域集中架构概述 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。…...

Python常用的几个函数

print()函数:用于打印输出信息到控制台。 input()函数:用于从控制台获取用户输入。 len()函数:用于获取字符串、列表、元组、字典等对象的长度。 range()函数:用于生成一个整数序列,常用于循环中。 type()函数&…...

【Linux系统基础】(2)在Linux上部署MySQL、RabbitMQ、ElasticSearch等各类软件

实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用,…...

HarmonyOS4.0系统性深入开发01应用模型的构成要素

应用模型的构成要素 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。 HarmonyOS应用模型的构成要…...

线下终端门店调研包含哪些内容

品牌渠道一般分为线上和线下,线上的价格、促销信息、店铺优惠机制等都可以通过登录查看,但是线下门店的数据则需要进店巡查,否则无法得到真实的店铺销售数据,当然也有品牌是靠线下的业务团队报备机制获得这些信息,但是…...

倾斜摄影三维模型数据在行业应用分析

倾斜摄影三维模型数据在行业应用分析 倾斜摄影三维模型数据是一种重要的地理信息资源,可以广泛应用于各个行业和场景,以解决不同领域的问题。以下将详细探讨几个典型的行业或场景,它们利用倾斜摄影三维模型数据解决问题的应用。 1、地理测绘…...

Apache Flink 进阶教程(七):网络流控及反压剖析

目录 前言 网络流控的概念与背景 为什么需要网络流控 网络流控的实现:静态限速 网络流控的实现:动态反馈/自动反压 案例一:Storm 反压实现 案例二:Spark Streaming 反压实现 疑问:为什么 Flink(bef…...

k8s学习 — (DevOps实践)第十三章 DevOps 环境搭建

k8s学习 — (DevOps实践)第十三章 DevOps 环境搭建 学习资料1 Gitlab1.1 安装 Gitlab1.2 页面配置1.3 配置 Secret1.4 为项目配置 Webhook1.5 卸载 2 Harbor2.1 安装 Harbor2.1 配置 Secret 3 SonarQube3.1 安装 SonarQube3.2 生成服务 token3.3 创建 We…...

Java_Stream流

一、JDK8新特性(Stream流) 接下来学习一个全新的知识,叫做Stream流(也叫Stream API)。它是从JDK8以后才有的一个新特性,是专业用于对集合或者数组进行便捷操作的。有多方便呢?我们用一个案例体…...

delphi中,tstringlist使用方法示例

delphi中,tstringlist使用方法示例 在 Delphi 中,TStringList 是一个常用的字符串列表类,它提供了许多用于处理字符串列表的方法。以下是一个示例,演示了如何在 Delphi 中使用 TStringList 类: program TStringListEx…...

【飞凌 OK113i-C 全志T113-i开发板】视频编解码测试

前言 本文测试OK113i-S开发板-视频编解码的功能 OK113i-S开发板是支持视频的编解码的,下面是官方介绍的编解码功能 T113-i 是一种为多媒体解码平台设计的高级应用处理器。T113-i 集成了64位玄铁C906 RISC-V CPU, 双核 Cortex - A7 CPU 和 HiFi4 DSP&a…...

全部没有问题 (一.5)

java mooc练习 基础练习: 进阶练习: final 赋值一次 局部 必须赋值 抽象类 多态测试 package com.book;public class moocDraft1 {static int variable1;public void fatherMethod(moocDraft1 a){System.out.println(variable);}public static void…...

C++归并排序详解以及代码实现

1. 介绍 归并排序(Merge Sort)是一种采用分治法(Divide and Conquer)策略的排序算法。该算法首先将已有序的子序列合并,得到完全有序的序列。在归并排序中,合并操作是将两个有序表合并成一个有序表的过程。…...

springboot整合JPA 多表关联 :一对多 多对多

补充一下自定义SQL 这是连表查询,可以任意查出字符,用Map接收 Testvoid test3() {JPAQueryFactory jpaQueryFactory new JPAQueryFactory(em);QStudent student QStudent.student;QMessage message QMessage.message;//constructor(StuMesDto.class, …...

Python 数据分析 Matplotlib篇 plt.rcParams 字典(第5讲)

Python 数据分析 Matplotlib篇 plt.rcParams字典(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…...

DeamonSet详解

目录 1.1 何为DaemonSet 1.2 DaemonSet 的 API 对象的定义 1.3 DaemonSet实践 1.3.1 创建 DaemonSet 对象 1.3.2 查看 DaemonSet 对象 1.3.3 DaemonSet 版本管理 1.3.4 DaemonSet 的容器镜像版本到 v2.2.0 1.1 何为DaemonSet 介绍DaemonSet我们先来思考一个问题&#x…...

TwIST算法MALTLAB主程序详解

TwIST算法MALTLAB主程序详解 关于TwIST算法的具体原理可以参考: 链接: https://ieeexplore.ieee.org/abstract/document/4358846 链接: https://blog.csdn.net/jbb0523/article/details/52193209 该算法的MATLAB源代码: 链接: http://www.lx.it.pt/~bi…...

Flutter 三: Dart

1 数据类型 数字(number) int double 字符串转换成 num int.parse(“1”) double.parse(“1”);double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为stringdouble 直接舍弃小数点后几位的数据 可使用字符串截取的方式 字符串(string) 单引号 双引号 三引号三引号 可以输…...

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端,EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法,FreeRedis和CsRedis算是近亲(都是GitHub中账号为2881099下的开源项目),因此其用法特别相似。FreeRedis的主要…...

Postman接口测试(超详细整理)

常用的接口测试工具主要有以下几种 Postman:简单方便的接口调试工具,便于分享和协作。具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server, …...

【深入解析spring cloud gateway】12 gateway参数调优与分析

本节主要对网关主要的一些参数做一些解释说明,并用压测工具测试一下网关的接口,通过压测来验证参数配置是否合理 一、连接池参数 参数示例 spring:application:name: gatewaycloud:gateway:# http连接设置httpclient:# 全局的响应超时时间&#xff0c…...

Java继承,父类没有无参构造方法时,子类必须要显式调用父类的构造方法

在Java中,如果一个类没有定义任何构造函数,那么编译器会默认为这个类提供一个无参的构造函数。 这个隐式的构造函数在继承的时候,子类会在自己的构造方法里面默认的调用这个构造函数。 但是,如果我们在父类中定义了一个有参构造…...

Ubuntu 20.04使用Livox Mid-360

参考文章: Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一:Livox mid 360驱动安装与测试 前言: Livox mid360需要使用Livox-SDK2,而非Livox-SDK,以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部…...

C语言之冒泡排序

其实排序有很多的方法,比如:冒泡排序,插入排序,快速排序,归并排序,选择排序等。今天来讲一下最简单的排序:冒泡排序。这种排序的方法效率极其低下。 假设有一个整型数组: int arr[…...