首页 前端知识 python爬虫-------JsonPath(第十九天)

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

2024-08-22 23:08:51 前端知识 前端哥 888 136 我要收藏

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏: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 parse

url = '<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 parse

url = '<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的函数和过滤器来处理数据。这些知识不仅可以帮助我们更好地完成网页抓取和数据提取的任务,还可以为我们未来的学习和工作打下坚实的基础。

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

转载请注明出处或者链接地址:https://www.qianduange.cn//article/16582.html
标签
爬虫
评论
发布的文章

安装Nodejs后,npm无法使用

2024-11-30 11:11:38

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!