文章目录
前言
在玩爬虫的时候,总会遇到一些无法通过xpath提取的数据,通常都会存放在JSON格式中,所我这学一下jsonpath。
JSON是什么
可以看看我这篇博客,不过有不全的地方请多多担待,提出来一起学习一起进步!
jsonpath
jsonpath是对JSON格式提取文件的东西,看看这熟悉的path,有没有联想到xpath?差不多,都是用来提取数据的东西
- xpath是用于提取HTML和XML的
- jsonpath是用于提取JSON格式的
Python中的jsonpath
先安装jsonpath第三方库
pip install jsonpath -i https://pypi.doubanio.com/simple
jsonpath语法
符号 | 描述 |
$ | 查询的根节点对象,用于表示一个json数据,可以是数组或对象 |
@ | 过滤器(filter predicate)处理的当前节点对象 |
* | 获取所有节点 |
. | 获取子节点 |
… | 递归搜索,筛选所有符合条件的节点 |
?() | 过滤器表达式,筛选操作 |
[start:end] | 数组片段,区间为[start,end),不包含end |
[A]或[A,B] | 迭代器下标,表示一个或多个数组下标 |
使用
我们的数据是从王者网站拿的——王者网站
大概就是张这个样子
然后我们开始联系jsonpath吧
import jsonpath # 导入jsonpath包 import json # 导入json包 import requests # 导入爬虫包 with open("王者英雄.json",'wb') as f: f.write(requests.get('https://pvp.qq.com/web201605/js/herolist.json').content) # 将json文件保存到本地 with open('王者英雄.json', 'r', encoding="utf-8") as f: js = f.read() # 读取 c = json.loads(js) # 转成python数据 print(jsonpath.jsonpath(c, '$.*.cname')) # 使用jsonpath将英雄名字取出来 ''' $.:根目录 *:根目录下所有节点 cname:所有cname元素的值 '''
运行结果:
结语
拜拜 学习如逆水行舟,不进则退,所以一定要在学习后多加练习~~~~~
那么今天就到这里了哦,( _ )/~~