爬虫解析-jsonpath (六)

jsonpath只能解析本地文件

jsonpath的使用:

    obj = json.load(open('.json文件','r',encoding='utf-8'))place_name = jsonpath.jsonpath(obj, 'json语法')

目录

1.安装jsonpath

2.Xpath和jsonpath的语法对比

练习:使用jsonpath解析JSON文件 

3.使用jsonpath抓取淘票票中的城市名称

参考


应用场景

打开检查中的网络,当鼠标悬浮在“深圳”这个位置上时,就会出现一个下拉列表,我门点击左侧新出现的名称后,从预览中可以看到与上面对应的所有的城市名称,我们就可以用jsonpath把这些城市都爬下来。

1.安装jsonpath

pip install jsonpath

2.Xpath和jsonpath的语法对比

练习:使用jsonpath解析JSON文件 

JSON文件

{ "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": {"author": "me","color": "red","price": 19.95}}
}

练习代码:

import json
import jsonpathobj = json.load(open('_073.json', 'r', encoding='utf-8'))
# 所有的作者
book_author = jsonpath.jsonpath(obj, '$.store.book.*.author')
print(book_author)# 所有的作者
# author = jsonpath.jsonpath(obj,'$.store..author')
author = jsonpath.jsonpath(obj,'$..author')
print(author)# store下的所有元素
element= jsonpath.jsonpath(obj,'$.store.*')
print(element)# store里面所有的钱
price = jsonpath.jsonpath(obj, '$.store..price')
# price = jsonpath.jsonpath(obj, '$..price')
print(price)# 第三个书
book = jsonpath.jsonpath(obj, '$.store.book[2].title')
print(book)# 最后一本书
last_book = jsonpath.jsonpath(obj, '$.store.book[(@.length-1)].title')
print(last_book)# 前两本书
first_book = jsonpath.jsonpath(obj, '$.store.book[:2].title')
print(first_book)# 过滤出所有包含编号的书
# 条件过滤需要在()的前面添加一个“?”
id_book = jsonpath.jsonpath(obj, '$..book[?(@.isbn)]')
print(id_book)# 哪本书超过了十块钱
top_price = jsonpath.jsonpath(obj, '$..book[?(@.price>10)]')
print(top_price)

3.使用jsonpath抓取淘票票中的城市名称

获取我们所需要的JSON数据,并保存为JSON格式。

这里需要注意的就是header的问题,选择合适的请求头极为重要。

# 获取网页的源码
url = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1699438000391_108&jsoncallback=jsonp109&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/119.0.0.0 Safari/537.36 Edg/119.0.0.0","Cokkie":"cna=78fBGrbzhCMCAXjATRb+saw5; t=e7c798fa12372a57ee31f10dfd51cd4e; cookie2=1d03be736b566af7ea39001ed7fa3c8f; v=0; _tb_token_=e3b433bbbe03e; xlly_s=1; tfstk=dmCXbdYCzmmjr9JtgSaPVwh_85d_8iNUlVTO-NhqWIdv55sN4q7V7sWWWGSuSrAVWhs143b2Ql4mWTscJKS1SrY9XGI6btyzTZbDsCEFfWPFovp26kRTr2yhoCATY4lTLW_cYs2DvGBZP7NTiaZSwbGUKa3xooujl_T8jHQjTfTPNEgMAZK7jlXwdX-QYtDsPpc6PHz7PADGFn8r6; l=fBLfzOEPPRd-YECUBO5Bnurza77T5IRb41PzaNbMiIEGa6KCtFaihNCTsYuBSdtjgTCcBetrWDM-1dLHR3xg5c0c0KDtBa2K3xvtaQtJe; isg=BKamDko1_3qxi6vekFBO7lel9xwoh-pB-d4dQ5BPeUmkE0Yt-BaVUc7taw-fvOJZ","Referer":"https://dianying.taobao.com/index.htm?n_s=new"
}
# 请求对象定制
request = urllib.request.Request(url, headers=headers)
# 模拟客户端向服务器发送请求
response = urllib.request.urlopen(request)
# 获取网页源码
content = response.read().decode('utf-8')
with open('_074.json','w',encoding='utf-8') as file:file.write(content)

然后我们就开始解析JSON文件

保存之后我们可以看到,前面有个json109()的头,我们把这一部分删除就可以了。

或者对保存JSON文件前对content进行操作

content = content.split('(')[1].split(')')[0]

开始解析JSON文件。

import json
import jsonpath
obj = json.load(open('_074.json','r',encoding='utf-8'))
place_name = jsonpath.jsonpath(obj, '$..regionName')
print(place_name)

用好了JSON解析数据真的太方便了。

对比一下使用字典的方式提取name,需要嵌套两层循环。

import json
obj = json.load(open('_074.json','r',encoding='utf-8'))
name = []
for key, value in obj['returnValue'].items():temp = obj['returnValue'][key]for i in temp:name.append(i["regionName"])
print(name)

参考

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/214029.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openEuler JDK21 部署 Zookeeper 集群

zookeeper-jdk21 操作系统:openEuler JDK:21 主机名IP地址spark01192.168.171.101spark02192.168.171.102spark03192.168.171.103 安装 1. 升级内核和软件 yum -y update2. 安装常用软件 yum -y install gcc gcc-c autoconf automake cmake make \zl…

机器学习实验五:集成学习

系列文章目录 机器学习实验一:线性回归机器学习实验二:决策树模型机器学习实验三:支持向量机模型机器学习实验四:贝叶斯分类器机器学习实验五:集成学习机器学习实验六:聚类 文章目录 系列文章目录一、实验…

imazing正在查找最新的apple mobile device组件

​ Apple Mobile Device是macOS的一个组件,它允许您在Mac上与iOS设备进行无缝连接和通信。因此,无法直接在苹果设备上下载和安装Apple Mobile Device,需要借助管理工具进行下载安装后启动。 如果您需要与iOS设备进行通信和同步,…

流量异常-挂马造成百度收录异常关键词之解决方案(虚拟主机)

一.异常现象:流量突然暴涨,达到平时流量几倍乃至几十倍,大多数情况下因流量超标网站被停止。 二.排查原因: 1.首先分析web日志:访问量明显的成倍、几十倍的增加;访问页面不同;访问IP分散并不固…

Linux常见压缩指令小结

为什么需要压缩技术 我们都知道文件是以byte作为单位的,如果我们的文件仅仅在低位占一个1 0000 0001这种情况我们完全可以压缩一下,将高位的0全部抹掉即可。 如上所说是一种压缩技术,还有一种就是将1111(此处省略96个)一共100个1&#xff0…

logback的使用

1 logback概述 SLF4J与其它日志组件调用关系图如下所示。 SLF4J,即Java中的简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。 SLF4J最常用的日志实现框架是&am…

软件设计师——计算机组成原理(二)

📑前言 本文主要是【计算机组成原理】——软件设计师——计算机组成原理的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 …

007:vue实现与iframe实现页面数据通信

首页先搭建一个html页面和vue页面,在vue页面中,嵌入我们需要的iframe页面 文章目录 1. 搭建 html 页面和 vue 页面2. 实现 iframe 向 vue 页面通信3. 在实现 vue 向 iframe 页面通信 1. 搭建 html 页面和 vue 页面 暂定为 iframeDemo.html 和 vueDemo.v…

外观模式 rust和java的实现

文章目录 外观模式介绍实现javarustrust仓库 外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,它为子系统中的一组接口提供一个统一的高层接口,使得这些接口更加容易使用。外观模式通过封装子系统内部的复杂性,提…

选自《洛谷深入浅出进阶篇》——欧拉函数+欧拉定理+扩展欧拉定理

欧拉函数: 欧拉函数定义: 1~n中与n互质的数的个数。 比如 欧拉函数是积性函数:(也就是)当 n与m互质的时候: 由算术基本定理,我们可以设n,那么我们只要计算出的取值就能求出的取…

【机器视觉技术栈】03 - 镜头

镜头 定焦镜头变焦镜头远心镜头 FA镜头与远心镜头的区别? 焦距越小畸变程度越大,精度要求不高的场景可以使用焦距大的FA镜头做尺寸测量,但焦距越大带来的问题就是整个机械设备越大。精度高的场景使用远心镜头进行尺寸测量。 光学基础知识…

Gee教程6.模板(HTML Template)

这一章节的内容是介绍 Web 框架如何支持服务端渲染的场景 实现静态资源服务(Static Resource)。支持HTML模板渲染。 这一章节很多内容是基于net/http库的,该库已经实现了很多静态文件和HMML模板的相关功能的了。 静态文件 网页的三剑客,JavaScript、C…

APP备案,最新获取安卓签名文件中MD5等信息方法

1.通过签名文件获取SHA1和SHA256 直接通过cmd执行命令 keytool -list -v -keystore xxxxx/xxx/xx/xxx.keystore输入后回车会提示输入密码库口令,直接输入Keystore密码(输入过程中终端上不会显示,输完回车就行) 2.获取md5 由于…

vmware ubuntu22 安装vmtools并设置共享文件夹

我是你爹,再不会就紫砂。 权限不够或没读写权限自己改下就行。 1. 主机下新建文件夹,并如下图设置成共享 2. 把上面文件夹路径添加到共享文件夹里面 3. 开启ubuntu,在登陆界面显示之前我们会看到下图的重新安装vmware tools由灰变黑&#x…

Linux面试必备系列

文章目录 1、Linux的体系结构2、如何查找特定的文件(find)3、检索文件内容(grep)4、对文件内容做统计(awk)5、批量替换文本内容(sed) 1、Linux的体系结构 体系结构主要分为用户态(用户上层活动)和内核态内核…

OpenHarmony北向-让更广泛的应用开发者更容易参与

一、标准系统的体验 按照官方文档指导,这样操作,OH标准系统开发板就可以运行开发者开发的OpenHarmony应用了。 二、实际情况 按照开发文档上的说明,肯定是装不上的。因为OH不同的发行版,不同发行板不同的设备,IDE&…

Kubernetes架构及核心部件

文章目录 1、Kubernetes集群概述1.1、概述1.2、通过声明式API即可 2、Kubernetes 集群架构2.1、Master 组件2.1.1、API Server2.1.2、集群状态存储2.1.3、控制器管理器2.1.4、调度器 2.2、Worker Node 组件2.2.1、kubelet2.2.2、容器运行时环境2.2.3、kube-proxy 2.3、图解架构…

c-语言->数据在内存的存储

系列文章目录 文章目录 系列文章目录前言 前言 目的:学习整数在内存的储存,什么是大小端,浮点数的储存。 1. 整数在内存中的存储 在讲解操作符的时候,我们就讲过了下⾯的内容: 整数的2进制表⽰⽅法有三种&#xff0…

可视化监控云平台/智能监控平台EasyCVR国标设备开启音频没有声音是什么原因?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。GB28181视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存…

sqlite3.44.2的编译

文章目录 sqlite3.44.2的编译概述笔记解决shell.c编译报错的方法整理 - 正常可用的编译脚本过程剩下的事情验证编译出的输出是否可以给工程正常使用?END sqlite3.44.2的编译 概述 想从源码编译一份Sqlite3.44.2出来. 编译sqlite3.44.2前置需要的TCL环境已经编译出来到了, 做…