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. WPF调用Win Form

    WPF是win form的下一代版本,现在越来越多的公司使用WPF.如何兼容已有的使用win form开发的应用程序呢?下面有三种方式来在WPF中调用win form. 使用WPF中的WindowsF ...

  2. c语言中的隐式函数声明(转)

    本文转自:http://www.jb51.net/article/78212.htm 在c语言里面开来还是要学习c++的编程习惯,使用函数之前一定要声明.不然,即使编译能通过,运行时也可能会出一些莫名 ...

  3. Apache和PHP的相关配置

      一.Apache2.4的配置和安装a. 打开Apache24/conf/httpd.conf文件进行编辑.1).38行改为Define SRVROOT "D:/myphp2017/Apa ...

  4. dreamweaver,access2010,数学

    dreamweaver 1,点插入-表格-设置表格. 2,再次修改表格,打开属性修改指标. (修改图片时,也可以选中图片打开对应的属性修改) 设置字体: 1,打开属性-页面属性,弹出操作窗口,设置想改 ...

  5. [Java][Liferay] 模拟用户

    以admin的帐号登陆 Navigation to Users and Organizations -> All Users 找到你要查看的user,点击Actions->Imperson ...

  6. iOS 时间戳转成今天,上午,下午,星期几,几月几日,某年某月某日

    项目中有聊天功能,老板让聊天的时间转换成和 QQ 的聊天时间一样的格式, 研究了一下,来分析下 QQ 的聊天格式时间 代码: 会话列表显示的时间 如需转成24小时制,需要使用 HH //时间显示内容 ...

  7. maven常用依赖

    HttpServletRequest HttpServletResponse <dependency> <groupId>javax.servlet</groupId&g ...

  8. Java基础入门 - 关键字及其分类和说明

    类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 extends 扩充,继承 ...

  9. webapi 开启跨域支持

    1.Global文件: GlobalConfiguration.Configuration.EnableCors(); 2.需要跨域的action或controller添加跨域规则 [EnableCo ...

  10. position的参考基准

    static(静态):position默认的样式:占据标准流的位置, 它会忽略top.bottom.left . right 的设置 relative(相对): 占据标准流的位置:可将其移至相对于其正 ...