一、jsonpath

在PyCharm pip install jsonpath库

jsonpath只能解析本地文件,和xpath不同

基本语法如下图,和xpath对应记忆

以解析下面的json文件为例,存着一些书还有一辆自行车

{ "store": {"book": [{"category": "修真","author": "六道","title": "坏蛋是怎样炼成的","price": 8.95},{"category": "修真","author": "天蚕土豆","title": "斗破苍穹","price": 12.99},{"category": "修真","author": "唐家三少","title": "斗罗大陆","isbn": "0-553-21311-3","price": 18.99},{"category": "修真","author": "南派三叔","title": "星辰变","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "黑色","price": 19.95}}
}

先打开json文件,将其反序列化

import jsonobj = json.load(open('json_path_解析.json', 'r', encoding='utf-8'))
  1. 书店所有书的作者
# 书店所有书的作者
author_list = jsonpath.jsonpath(obj, '$.store.book[*].author')
  1. 所有的作者
# 所有的作者
author_list = jsonpath.jsonpath(obj, '$..author')
  1. store的所有元素,所有的books和bicycle
# store的所有元素,所有的books和bicycle
store_list = jsonpath.jsonpath(obj, '$.store.')
  1. store里面所有东西的price
# store里面所有东西的price
price_list = jsonpath.jsonpath(obj, '$.store..price')
  1. 第n本书,第n-m本书
# 第三本书
book = jsonpath.jsonpath(obj, '$.store..book[2]')# 最后一本书
book = jsonpath.jsonpath(obj, '$.store..book[(@.length-1)]')# 前面的两本书(两个方法)
book_list = jsonpath.jsonpath(obj, '$.store..book[0,1]')
book_list = jsonpath.jsonpath(obj, '$.store..book[:2]')
  1. 条件过滤:所有的包含isbn的书 / 价格低于10的书
# 所有的包含isbn的书
book_list = jsonpath.jsonpath(obj, '$.store..book[?(@.isbn)]')# 价格低于10的书
book_list = jsonpath.jsonpath(obj, '$.store..book[?(@.price<10)]')

总结如下图,参考博客JSONPath-简单入门

二、jsonpath实战

解析淘票票网站,获取地区名单

直接访问url获取不到内容,说明做了反爬

定制请求头后,打印数据发现结果前面有一个jsonp108,我们需要的是里面的内容,所以过程中还需要做一个简单的切割。

完整代码:

import urllib.request
import jsonpath
import jsonurl = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1647574620570_107&jsoncallback=jsonp108&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/98.0.4758.102 Safari/537.36 ",'referer': 'https://dianying.taobao.com/'
}request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request)content = response.read().decode('utf-8')
content = content.split('(')[1].split(')')[0]# jsonpath只能解析本地文件,所以先存入文件
with open('taopiaopiao.json', 'w', encoding='utf-8') as f:f.write(content)# json.load参数必须是一个文件
obj = json.load(open('taopiaopiao.json', 'r', encoding='utf-8'))result = jsonpath.jsonpath(obj, '$.returnValue..regionName')print(result)

总结

  1. jsonpath只能解析本地文件
  2. 条件过滤要用?(),例如book[?(@.price<10)]
  3. [@.length-1]代表最后一个元素 [*]代表所有

Python 爬虫学习笔记(七(2))JsonPath解析+实战相关推荐

  1. python爬虫学习笔记(三)——淘宝商品比价实战(爬取成功)

    2020年最新淘宝商品比价定向爬取 功能描述 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格. 理解:淘宝的搜索接口 翻页的处理 技术路线:requests­          re 程序的结 ...

  2. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  3. python爬虫学习笔记3.2-urllib和request练习

    python爬虫学习笔记3.2-urllib和request练习 一.urllib练习 1.百度贴吧案例 需求 分析 手动测试查询流程 观察页面 分析特殊部分 https://tieba.baidu. ...

  4. python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)

    python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...

  5. python爬虫学习笔记 3.9 (了解参考:训练Tesseract)

    python爬虫学习笔记 3.9 (了解参考:训练Tesseract) 参考阅读:训练Tesseract 要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新 ...

  6. python爬虫学习笔记2模拟登录与数据库

    前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...

  7. Python爬虫学习笔记总结(一)

    〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大家可以 ...

  8. 一入爬虫深似海,总结python爬虫学习笔记!

    正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...

  9. 一入爬虫深似海,总结python爬虫学习笔记! 1

    正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...

  10. python爬虫学习笔记一:网络爬虫入门

    参考书目 <python网络爬虫从入门到实践>唐松 第一章 网络爬虫入门 1.1 robots协议 举例:查看京东的robots协议 京东robots协议地址 User-agent: * ...

最新文章

  1. ASP.NET的Cookie跨域问题
  2. 100多年了,左右大脑的不对称性依然备受关注
  3. php程序是如何运行,如何第一次运行PHP程序?
  4. 跳表(SkipList)设计与实现(java)
  5. 远程Linux主机安装zsh插件zsh-syntax-highlighting
  6. MVC架构 -- 初学试水选课管理系统
  7. Log4j 第三次发布漏洞补丁,漏洞或将长存
  8. 09-03 Java 抽象类
  9. flask-mail异步发送邮件_Python爬虫系列:用邮件来通知爬虫异常状况
  10. 如何让mysql配置文件生效_mysql配置文件生效测试
  11. 使用ARGV在命令行里接收参数
  12. SpringMVC Java config freemarker
  13. 何以笙箫默,一部有剧情的创意广告集?
  14. 网络综合布线线缆如何敷设布放_网络综合布线知识点
  15. AI(Adobe illustrator)修改所有字体
  16. 软件需求功能测试用例,软件测试用例与需求的对应关系
  17. css数字怎么换行,css实现连续的英文或数字自动换行的方法
  18. 厦大计算机 专硕 分数线,厦门大学2020年专硕复试分数线
  19. 企业要如何利用360评估法做好人才盘点?
  20. 人工智能和计算机程序有什么区别,人工智能和机器学习之间有什么区别?

热门文章

  1. SqlServer 计算年龄(岁月天)的函数
  2. html实现画板的基本操作,JavaScript操作Canvas实现画板实例分析
  3. 十五个免费Windows桌面系统工具(附下载)
  4. 树莓派 USB摄像头 实现网络监控
  5. 三相PWM整流器Simulink仿真
  6. 2.3 OverFeat
  7. 测试电脑整机功耗软件,最真实的耗电!PConline权威整机功耗评测
  8. 旧主机改NAS最终成功的过程
  9. 用计算机完成计算win7,算天数转单位Win7计算器能做得更多
  10. Origin2021安装过程中的系列问题