首页 > 其他分享 >最详细爬虫零基础教程10——json格式提取之jsonpath

最详细爬虫零基础教程10——json格式提取之jsonpath

时间:2024-03-26 22:30:51浏览次数:24  
标签:__ 10 python json jsonpath 基础教程 print data

文章目录


一、json数据解析

用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。
jsonpath
语法使用案例:

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

练习
exercise

# 拿到json数据之后,先转换格式,转换成Python能操作的格式
python_data = json.loads(json_data)
# jsonpath取到的数据是以列表的形式返回

print(jsonpath.jsonpath(python_data, '$.store.book[*].author'))
print(jsonpath.jsonpath(python_data, '$..author'))
print(jsonpath.jsonpath(python_data,'$.store.*'))
print(jsonpath.jsonpath(python_data,'$.store..price'))
print(jsonpath.jsonpath(python_data,'$..book[(@.length-1)]'))
print(jsonpath.jsonpath(python_data,'$..book[:2]'))  # 前两本书
print(jsonpath.jsonpath(python_data,'$..book[?(@.isbn)]'))

感兴趣的可以自己打印尝试一下,这里就不多做阐述了。

二、案例演示

1.解析获得数据

import requests
import json
import jsonpath
if __name__ == '__main__':
    url_ = 'https://www.lagou.com/lbs/getAllCitySearchLabels.json'
    headers_ = {
        '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 Edg/122.0.0.0'
    }
    response_ = requests.get(url_,headers=headers_)
    json_data = response_.text
    print(type(json_data))
    python_data = json.loads(json_data)
    res = jsonpath.jsonpath(python_data,'$..A[0].name')
    print(res)

2.简化代码

前提—响应对象必须是json格式的数据

if __name__ == '__main__':
    url_ = 'https://www.lagou.com/lbs/getAllCitySearchLabels.json'
    headers_ = {
        '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 Edg/122.0.0.0'
    }
    response_ = requests.get(url_,headers=headers_)
    python_data = response_.json()  # json是一个方法,不是import导入模块的json模块,直接得到Python格式的数据,自动转换类型哦
    res = jsonpath.jsonpath(python_data,'$..A[0].name')
    print(res)

3.豆瓣json数据解析

import requests
import jsonpath
if __name__ == '__main__':
    url_ = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20'
    headers_ = {
        '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 Edg/122.0.0.0'
    }
    response_ = requests.get(url_,headers=headers_)
    py_data = response_.json()
    # 解析出电影名称和评分
    title_list = jsonpath.jsonpath(py_data,'$..title')
    print('tltle',title_list)

    score_list = jsonpath.jsonpath(py_data,'$..score')
    print('score',score_list)

    # 转成键值对对应的字典
    movie_dict = {}
    for i in range(len(title_list)):
        movie_dict[title_list[i]] = score_list[i]
    print(movie_dict)

总结

json数据提取的语法比较复杂,需要多花一些时间去学习。

人一生的价值,不应该用时间去衡量,而是用深度去衡量。

标签:__,10,python,json,jsonpath,基础教程,print,data
From: https://blog.csdn.net/ZxVSaccount/article/details/136888003

相关文章

  • 代码随想录算法训练营第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之
    文档链接:https://programmercarl.com/LeetCode110.平衡二叉树题目链接:https://leetcode.cn/problems/balanced-binary-tree/思路:这里强调一波概念:二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数......
  • 10. 一起学习机器学习 -- Convolutional Neural Networks (CNNs)
    ConvolutionalNeuralNetworks(CNNs)ThepurposeofthisnotebookistopracticeimplementingandtrainingCNNs.Westartwitha1-dimensionalconvolutionallayerinNumPy.WewillthenusePyTorch,anoptimisedmachinelearningframeworkforPythonbas......
  • 没想到三天10KStar的营销利器MediaCrawler开源作者已经删库了
    前言一站式社交平台数据抓取利器,带你玩转小红书、抖音、快手、B站和微博数据分析不经意间,来查看MediaCrawler仓库源码,发现作者已经删库了。看来是领奖了。才几天不到的时间Star数量已经直逼10K了,增长速度近乎疯狂。前两天只是将代码下载下来了,还没认真的玩。还好代码本地已经......
  • Windows Packet Divert(WinDivert)是一个适用于Windows 10、Windows 11和Windows Server
    WindowsPacketDivert(WinDivert)是一个适用于Windows10、Windows11和WindowsServer的用户模式数据包捕获和重定向工具。WinDivert允许用户模式应用程序捕获/修改/丢弃发送到/从Windows网络堆栈的网络数据包。总之,WinDivert可以:捕获网络数据包过滤/丢弃网络数据包嗅探......
  • 0101支付安全-支付模块-项目实战
    文章目录一、信息安全的基础-机密性1相关概念2对称加密和非对称加密二、身份认证三摘要算法四、数字签名五、数字证书结语在支付过程中,设计多方的敏感信息,那么安全尤为重要。下面先简单介绍下,相关概念。一、信息安全的基础-机密性1相关概念明文:加密前的消......
  • 摩根大通:金和铜短期都涨多了 & “一年十倍股”超微:预计在AI服务器占10-15%份额,给24倍P
    今年以来大宗商品持续回暖,黄金、铜等金属表现尤为亮眼,乐观情绪蔓延之际摩根大通站出来提醒,小心回调风险!摩根大通在最新商品金属周报指出,黄金和铜价的急剧上涨反映了市场对中长期趋势的乐观预期,然而近期涨势可能超出了基本面的短期支撑,投资者需关注潜在的回调风险。黄金方面,摩......
  • C#JsonConvert.DeserializeObject反序列化与JsonConvert.SerializeObject序列化
    原文链接:https://blog.csdn.net/qq_45451847/article/details/120434797JSONJSON序列化是将对象转换为JSON格式的字符串,而JSON反序列化是将JSON格式的字符串转换为对象。对于JSON大家都了解,JSON是一种轻量级的文本数据交换格式而非编程语言,既然是数据交换格式,那就需要不断的进......
  • GBU3510-ASEMI开关电源整流桥GBU3510
    编辑:llGBU3510-ASEMI开关电源整流桥GBU3510型号:GBU3510品牌:ASEMI封装:GBU-4平均正向整流电流(Id):35A最大反向击穿电压(VRM):1000V产品引线数量:4产品内部芯片个数:4产品内部芯片尺寸:160MIL峰值正向漏电流:<10ua恢复时间:>2000ns正向浪涌电流:350A正向压降:1.05V恢复时间:工作结温......
  • 洛谷题单指南-集合-P3879 [TJOI2010] 阅读理解
    原题链接:https://www.luogu.com.cn/problem/P3879题意解读:此题本质上是计算倒排索引,所谓倒排索引,即不是通过文章来找单词,而是通过单词来找文章。解题思路:要建立单词和文章之间的关系,一个单词对应多篇文章,且要按照文章编号排序,可以使用如下数据结构:map<string,set<int>>h;只......
  • Win10专业版永久密钥(支持重装)
    Win10专业版是Windows10操作系统的商业版本,面向中小型企业和个人用户。它在家庭版的基础上增加了许多面向企业的功能,例如:设备和应用程序管理:可使用组策略、BitLocker和WindowsDefender等工具来管理设备和应用程序。数据保护:可使用BitLocker和WindowsDefender等工具......