python爬虫-------JsonPath(第十九天)

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

目录

一、了解JsonPath

二、JsonPath 用法

基本语法

表达式示例

过滤器

过滤器示例

支持的操作符

通配符

三、案列

三、总结


一、了解JsonPath

jsonPath 是一种用于在 JSON 数据中定位和提取信息的查询语言,类似于 XPath。它可以帮助你从复杂的 JSON 结构中提取所需的数据。以下是 JsonPath 的基本用法,包括选择器、过滤器和简单路径:

  1. 选择器:用于选择 JSON 对象的属性或数组元素。例如,$.store.book 选择了 JSON 数据中的 store 对象的 book 属性。
  2. 过滤器:用于根据条件过滤数组元素。过滤器使用 ?() 表达式,并可以包含比较操作符(如 ==!=<><=>=)和逻辑操作符(如 &&||)。例如,$.store.book[?(@.price > 10)] 选择了价格大于 10 的书籍。
  3. 简单路径:路径可以使用**.来访问对象的属性,[*]** 来表示数组中的所有元素,[n] 来表示数组中的第 n 个元素。例如,$.store.book[*].title 选择了所有书的标题。

这些是 JsonPath 的基本概念和用法。可以根据需要深入学习和探索 JsonPath 的更多功能和高级用法,例如递归下降、表达式计算等。

二、JsonPath 用法

JSONPath 是一种用于在 JSON 数据中查询和定位信息的表达式语言,类似于 XPath。它提供了一种灵活而强大的方式来处理 JSON 数据。以下是 JSONPath 表达式的详细全面解释:

基本语法

  • $:根对象。
  • .:属性操作符,用于访问对象的属性。
  • []:下标操作符,用于访问数组元素。

表达式示例

  • $.store.book[0].title:选择根对象中的 store 对象的 book 数组的第一个元素的 title 属性。
  • $.store.*:选择根对象中的 store 对象的所有属性。
  • $.store..price:选择根对象中的 store 对象及其子孙对象中的所有 price 属性。
  • $..book[?(@.price < 10)]:选择所有 book 数组中价格低于 10 的元素。
  • $..*:选择根对象及其所有子孙对象中的所有属性。

过滤器

  • ?():过滤器操作符,用于过滤数组元素。
  • @:当前对象。

过滤器示例

  • $..book[?(@.price < 10)]:选择所有价格低于 10 的书籍。
  • $.store.book[?(@.category == 'fiction' && @.price > 10)].title:选择类别为 fiction 且价格高于 10 的书籍的标题。

支持的操作符

  • ==:等于。
  • !=:不等于。
  • <<=>>=:比较操作符。
  • &&||:逻辑操作符。

通配符

  • ``:匹配所有属性或数组中的所有元素。
  • ..:递归下降,匹配所有子孙对象。

假设我们有以下 JSON 数据表示一个人的信息:

{"name": "John Doe","age": 30,"address": {"street": "123 Main St","city": "Anytown","zipcode": "12345"},"children": [{"name": "Jane","age": 5},{"name": "Alex","age": 8}]
}

下面是一些常见的 JSONPath 表达式示例:

  1. 获取姓名:

    $.name
    
  2. 获取地址城市:

    $.address.city
    
  3. 获取所有子女的姓名:

    $.children[*].name
    
  4. 获取年龄大于 6 岁的子女姓名:

    $.children[?(@.age > 6)].name
    
  5. 获取所有信息(包括姓名、年龄、地址等):

    $.*
    
  6. 获取所有子女信息(包括姓名和年龄):

    $.children[*]
    
  7. 获取所有信息中包含字母 'a' 的属性:

    $..*[?(@ =~ /a/)]
    

这些示例展示了 JSONPath 表达式的一些常见用法,包括访问对象属性、数组元素、使用过滤器等。JSONPath 还支持更多功能,如使用通配符、递归下降等,具体取决于需要查询的 JSON 数据结构和查询需求。

三、案列

提取汽车之家的汽车的品牌信息

1、获取JSON 数据结构

import requests
from jsonpath_ng import parseurl = '<https://www.autohome.com.cn/ashx/AjaxIndexCarFind.ashx?type=1&value=&_=1648458024986>'# 发起请求
response = requests.get(url)
data = response.json()# 打印整个 JSON 数据
print(data)

2、根据提取的 JSON 数据结构,使用以下代码来提取品牌信息:

import requests
from jsonpath_ng import parseurl = '<https://www.autohome.com.cn/ashx/AjaxIndexCarFind.ashx?type=1&value=&_=1648458024986>'# 发起请求
response = requests.get(url)
data = response.json()# 使用 JsonPath 提取品牌信息
brand_expr = parse("$.result.branditems[*]")
brands = [match.value for match in brand_expr.find(data)]print("汽车品牌信息:")
for brand in brands:brand_id = brand["id"]brand_name = brand["name"]logo_url = brand["logo"]country = brand["country"]print(f"品牌ID:{brand_id},品牌名称:{brand_name},国家:{country},Logo URL:{logo_url}")

结果展示:

三、总结

在使用Python进行网页抓取时,JsonPath是一个非常强大的工具,可以帮助我们以一种简洁而高效的方式提取和处理JSON格式的数据。通过使用JsonPath,我们可以轻松地定位和提取目标数据,而无需编写复杂的解析代码。同时,JsonPath还支持各种过滤器和函数,使得数据提取更加灵活和方便。

然而,在使用JsonPath时,也需要注意一些问题。首先,JsonPath的语法相对较新,需要一定的学习成本。其次,JsonPath虽然功能强大,但有时候可能会比较难以理解和调试,特别是对于复杂的数据结构和路径表达式。需要我们花费时间去学习,

在Python爬虫学习的第19天,我们一起深入了解了JsonPath这一强大的工具,它可以帮助我们更好地处理JSON格式的数据,从而提高爬虫的效率和准确性。通过学习JsonPath,我们可以更加灵活地定位和提取JSON数据中的信息,为我们的爬虫项目带来更多可能性。

在学习过程中,我们不仅掌握了JsonPath的基本语法和常用操作符,还学会了如何利用JsonPath表达式来定位和提取JSON数据中的目标信息,以及如何使用JsonPath的函数和过滤器来处理数据。这些知识不仅可以帮助我们更好地完成网页抓取和数据提取的任务,还可以为我们未来的学习和工作打下坚实的基础。

希望大家在学习过程中有所收获,也希望大家能够将所学知识应用到实际项目中,不断提升自己的技能和能力。感谢大家的参与和支持,希望我们能够在以后的学习中继续共同进步!再见喽,小伙伴们!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【一学就会】(一)C++编译工具链——基于VSCode的CMake、make与g++简单理解与应用示例

目录 一、CMake、make与g 1、名词辨析 2、孰优孰劣 二、应用示例 1、工具类安装与配置 1&#xff09;VSCode安装与配置 2&#xff09;CMake下载与安装 3&#xff09;MinGW-W64下载与安装 A、科学上网法 B、无需科学上网法 4&#xff09;VSCode推荐插件 A、c/c编译环…

Linux/Ubuntu/Debian中与进程和系统资源有关的命令top/ps

top命令是Linux系统中非常实用的一个工具&#xff0c;其主要功能是展示当前系统中资源使用情况最高的进程列表。通过这个命令&#xff0c;我们可以一目了然地看到哪些进程正在消耗大量的CPU、内存等资源。top命令默认每3秒更新一次数据&#xff0c;提供了实时的系统资源状态&am…

【Qt 学习笔记】QWidget的geometry属性及window frame的影响

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的geometry属性 文章编号&#xff1a;Qt 学习笔记 / 16 文章目…

BK-SDM读图片逻辑-评估结果FID逻辑

以inherit为例 这是借助bksdm的代码用于我的A-sdm的生成 bksdm中2个关键路径是 src/genetate.py script/eval_scores.sh 一 以generate.py文件进行生成 借助ms-coco的csv文件里面的30K个提示词和图片名字&#xff0c;来生成图片&#xff0c;并保存 share/huanggao/zjc/code_i2…

【智能算法】省时方便,智能算法统计指标——一键运行~

目录 1.常用统计指标2.参数统计检验3.结果展示4.自定义修改测试框架 1.常用统计指标 测试智能算法性能时&#xff0c;常常会用到以下5种常用指标&#xff0c;简单不赘述&#xff1a; 最优值、最差值、均值、中位数、标准差 2.参数统计检验 单纯依靠常用统计指标说服力不足&…

07 Php学习:运算符

PHP 算术运算符 在 PHP 中&#xff0c;算术运算符用于执行基本的数学运算&#xff0c;包括加法、减法、乘法、除法、取余数&#xff0c;负数运算、取反和并置运算。以下是这些运算符的详细解释和示例&#xff1a; 加法运算符 &#xff1a;用于将两个数值相加。 $a 5; $b 3;…

初识--数据结构

什么是数据结构&#xff1f;我们为什么要学习数据结构呢....一系列的问题就促使我们不得不了解数据结构。我们不禁要问了&#xff0c;学习C语言不就够了吗&#xff1f;为什么还要学习数据结构呢&#xff1f;这是因为&#xff1a;数据结构能够解决C语言解决不了的问题&#xff0…

【Java基础题型】矩阵的对角线求和

一、题目-矩阵 求一个33矩阵对角线元素之和。 输入格式 矩阵 输出格式 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7 二、参考的知识 这里给大家送点英语单词&#xff0c;记得学习&#xff1a; p r i m a r y. adj.主要的&#xff1b;初…

软考中级之软件设计师---知识点汇总总结

软考中级之软件设计师---知识点汇总总结 软考介绍资格设置证书样本 计算机组成原理操作系统1. 进程的三态模型2. 磁盘调度算法 计算机网络1. 网络的分类2. 各层的互连设备3. 网络模型&#xff0c;协议簇4. 传输层协议TCP、UDP4.1 TCP (Transmission Control Protocol,传输控制协…

day77 JSPServlet

知识点&#xff1a; 1Web工程 2JSP是什么&#xff1f;JSP页面包含哪些内容&#xff1f;JSP页面执行原理 3JSP九大内置对象&#xff0c;及四个作用域 4什么是SERVLET&#xff1f;及servlet相关API 5MVC模型 6EL表达式及JSTL标签库的使用 7在JSP页面实现分页和多条件查询 …

【UE5 C++】访问修饰符public/protected/private继承

限制类与类之间访问级别的方法 public 在类中创建一个public的部分&#xff0c;即" public: "&#xff0c;public之下的所有内容都是公共的,可以在类之间访问 private&#xff08;最常见&#xff09; 如若没有指明修饰符&#xff0c;则默认为private 不能在类的外…

【LAMMPS学习】七、加速性能(4)加速器包

7. 加速性能 7.1.基准测试 7.2.测试性能 7.3.通用技巧 7.4.加速器包 LAMMPS 中添加了各种pair_style、fixes、compute 和其他命令的加速版本&#xff0c;其运行速度通常比标准非加速版本更快。有些需要您的系统上存在适当的硬件&#xff0c;例如GPU 或 Intel Xeon Phi 协处…

每日OJ题_BFS解决FloodFill②_力扣200. 岛屿数量

目录 力扣200. 岛屿数量 解析代码 力扣200. 岛屿数量 200. 岛屿数量 难度 中等 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方…

聊聊自己12岁车龄的福克斯

1. 2005年&#xff0c;国内进入了 福克斯 ( 参数 | 询价 ) 这台车&#xff0c;中间经历了两次换代&#xff0c;而我自己的这台车则是第一批进入国内的福克斯&#xff0c;它的到来颠覆了大家当时对汽车设计的印象&#xff0c;在十年前家用车都是捷达、桑塔纳等那些古板油腻的车…

全球变暖蓝桥杯2018省赛真题

全球变暖蓝桥杯2018省赛真题 DFS大法 全球变暖 #include <bits/stdc.h> using namespace std; #define int long long bool flag; char a[1010][1010]; int cnt,n,ans0,pre_ans0,d[4][2] {1,0,-1,0,0,1,0,-1}; void dfs(int x,int y){if(x>n||x<0||y>n||y<…

德勤:《中国AI智算产业2024年四大趋势》

2023年《数字中国建设整体布局规划》的发布&#xff0c;明确了数字中国是构建数字时代竞争优势的关键支撑&#xff0c;是继移动互联网时代以来经济增长新引擎。当我们谈论数字中国的构建&#xff0c;不仅仅是在讨论一个国家级的技术升级&#xff0c;而是关乎如何利用数字技术来…

操作系统(第四周 第一堂)

目录 回顾 进程调度&#xff08;process schedule&#xff09; 进程角度 计算机整体——调度队列 队列图 调度程序 总结 回顾 上一篇文章的重点只有一个————进程 对进程的了解包含以下几个方面&#xff1a;1、程序如何变为进程 2、进程在内存中的存储形式 3、进…

【网站项目】校园二手交易平台小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

力扣HOT100 - 189. 轮转数组

解题思路&#xff1a; 三次反转。 先反转一次&#xff0c;再根据 k 拆分成两部分各反转一次。 class Solution {public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}pu…

相机参数的意义

相机标定的意义&#xff1a; 相机标定&#xff1a;使用带有pattern的标定板来求解相机参数的过程&#xff1b;用一个简化的数学模型来代表复杂的三维到二维的成像过程&#xff1b;相机参数包括&#xff1a;相机内参&#xff08;焦距等&#xff09;&#xff0c;外参&#xff08…