jsonpath介绍

jsonpath是一种信息抽取类库,是从json文档中抽取指定信息的工具,提供多种语言实现的版本

jsonpath对json来说,就相当于xpath对于xml

jsonpath和xpath的语法对比

jsonpath用一个抽象的名字$来表示最外层对象

网络上请求json数据的方式

import requests
# 请求json数据,使用requests模块
response =requests.get(url=url,headers=headers)
# 对json进行解码,解码utf8格式
response.encoding=("utf8")
# 获取json的content属性
content = response.content
案例一
# jsonpath的索引从0开始,区别于xpath从1开始
shu01 = jsonpath.jsonpath( shudata, "$.store.book" )
print( shu01 )
# 输出结果:[[{'category': 'reference', 'author': '李白', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': '杜甫', 'title': 'Sword of Honour', 'price': 12.99}, {'category': 'fiction', 'author': '白居易', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': 'fiction', 'author': '苏轼', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]]
shu0 =jsonpath.jsonpath(shudata,"$.store.book[1]")
print(shu0)
# 输出结果:显示第二个对象
# [{'category': 'fiction', 'author': '杜甫', 'title': 'Sword of Honour', 'price': 12.99}]
案例二
# 加载json文件,读成数据流
fp = open("lagou_json.json","r",encoding="utf8")
# 将数据流加载成python中显示的json格式数据
jsondata = json.load(fp)
# 解析当前json数据
# 如:或取中国A开头的市级行政区名
city = jsonpath.jsonpath(jsondata,'$..[A].[name]')
print(city)
# 输出结果:['安庆', '安顺', '安康', '澳门特别行政区', '鞍山', '安阳', '阿坝藏族羌族自治州'] 案例三
# 查找数的价格大于10元的书对象
shu = jsonpath.jsonpath(shudata,"$..book[?(@.price>10)]")
print(shu)
# 输出结果:
# 输出结果:[{'category': 'fiction', 'author': '杜甫', 'title': 'Sword of Honour', 'price': 12.99}, {'category': 'fiction', 'author': '苏轼', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]
案例四
# 查找json对象中含有‘isbn’属性的json对象
shu1 =jsonpath.jsonpath(shudata,"$..book[?(@.isbn)]")
print(shu1)
# 输出结果:[{'category': 'fiction', 'author': '白居易', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': 'fiction', 'author': '苏轼', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]
 

爬虫学习(十六)——jsonpath的更多相关文章

  1. 强化学习(十六) 深度确定性策略梯度(DDPG)

    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...

  2. Scala学习十六——XML处理

    一.本章要点 XML字面量<like>this</like>的类型为NodeSeq 可以在XML字面量中内嵌Scala代码 Node的child属性产出后代节点 Node的at ...

  3. Python爬虫学习==>第六章:爬虫的基本原理

    学习目的: 掌握爬虫相关的基本概念 正式步骤 Step1:什么是爬虫 请求网站并提取数据的自动化程序 Step2:爬虫的基本流程 Step3:Request和Response 1.request 2. ...

  4. Python3爬虫(十六) pyspider框架

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.pyspider介绍1.基本功能 提供WebUI可视化功能,方便编写和调试爬虫 提供爬取进度监控.爬取结果查看 ...

  5. 爬虫(十六):scrapy爬取知乎用户信息

    一:爬取思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账 ...

  6. Java学习十六

    学习内容: 1.做毕设 2.Java异常类 3.Java包装类 1.System.exit(1):终止程序运行,终止final执行方法 2.throws抛出异常类型,throw抛出异常对象 用法:th ...

  7. Java开发学习(十六)----AOP切入点表达式及五种通知类型解析

    一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...

  8. 智能车学习(十六)——CCD学习

    一.使用硬件 1.兰宙CCD四代      优点:可以调节运放来改变放大倍数      缺点:使用软排线(容易坏),CCD容易起灰,需要多次调节   2.野火K60底层     二.CCD硬件电路 ( ...

  9. Java编程思想学习(十六) 并发编程

    线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础. 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是 ...

  10. java web 学习十六(JSP指令)

    一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...

随机推荐

  1. nginx的反向代理功能和负载均衡

    使用nginx实现反向代理 Nginx只做请求的转发,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定把请求转发给谁. 1安装tomcat 在一个虚拟机上创建两个t ...

  2. pat04-树7. Search in a Binary Search Tree (25)

    04-树7. Search in a Binary Search Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 ...

  3. WebGL 踩坑系列-2

    需求:绘制斑点在球面上走过的路径 思路:要绘制斑点在球面上走过的路径,首先要记录上一时刻和当前时刻该斑点所在球面的位置,并且实时更新当前时刻的斑点位置和上一时刻的斑点位置. 为了方便,上一时刻斑点所在 ...

  4. C#设计模式——单例

    单例模式是设计模式中最简单的形式之一.这一模式的目的是使得类的一个对象成为系统中的唯一实例.对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任 ...

  5. log4net 基础

    log4net:日志输出工具. 新建工程Log4NetDemo App.config配置如下: <?xml version="1.0" encoding="utf- ...

  6. EntityFramework报错

    解决:未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” 使用 ...

  7. 【转】大数据批处理框架 Spring Batch全面解析

    如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...

  8. Day3 Form表单

    Day3  Form表单 一.form表单 :提交数据    表单在网页中主要负责数据采集功能,它用<form>标签定义.    用户输入的信息都要包含在form标签中,点击提交后,< ...

  9. css属性(常用属性整理)

    摘要:本文是我在学习前端的过程中整理的一些常用css属性,部分是css3新增的,因能力有限,文中如有错误,欢迎提出,我会及时修改.希望对大家有帮助! CSS属性 CSS属性 1 1. css颜色属性 ...

  10. (一)Hybrid app混合开发模式

    hybrid app是什么? 这里我们先看一下词条上的定义 Hybrid App:Hybrid App is a mobile application that is coded in both br ...