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


一、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数据提取的语法比较复杂,需要多花一些时间去学习。

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

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莘薪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值