介绍
对于爬虫数据采集而言,除了直接解析html,还经常解析json格式数据,而JsonPath 是一种信息抽取类库,可以从json文档中抽取指定信息,JsonPath对于json来说就相当于xpath 对于xml。
1、安装插件
执行命令pip3 install jsonpath
即可
D:\3.dev\pyworkspace\scraw\test01>pip3 install jsonpath
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting jsonpath
...
2、JsonPath使用
先找一个可以返回json格式数据的异步接口
提取书籍id和书籍名称,$
表示根节点,..
表示匹配所有符合条件的条件,这里通过$..bookId
匹配所有的书籍id,$..bookName
匹配所有的书籍名称
from fake_useragent import UserAgent
import requests
from jsonpath import jsonpath
url = 'http://book.zongheng.com/api/rank/getZongHengMonthTicketRankList.htm?rankType=1&pageNum=1&pageSize=10'
headers = {"User-Agent": UserAgent().chrome}
resp = requests.get(url, headers=headers)
# 提取书籍id
bookIds = jsonpath(resp.json(), '$..bookId')
# 提取书籍名称
bookNames = jsonpath(resp.json(), '$..bookName')
# 输出key-value
for bookId, bookName in zip(bookIds, bookNames):
print(bookId, ":", bookName)
执行结果
1013348 : 渡劫之王
907701 : 剑仙在此
966275 : 不让江山
985268 : 我只有两千五百岁
672340 : 剑来
1005752 : 陆地键仙
899865 : 天泉圣子
932153 : 边月满西山
1002390 : 超级雷修
926696 : 赘婿出山
3、常见表达式
表达式 | 说明 |
---|---|
$ | 根节点 |
@ | 现行节点 |
.or[] | 取子节点 |
… | 就是不管位置,选择所有符合条件的条件 |
* | 匹配所有元素节点 |
[] | 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等 |
?() | 支持过滤操作 |
() | 支持表达式计算 |