数据——Jsonpath
目录
一、JsonPath安装
二、JsonPath使用
注意:JsonPath只能解析本地文件,不能解析服务器响应的文件
2.1、JsonPath和xpath语法对比
2.2、jsonpath具体使用方法
2.2.1、jsonpath 获取参数
2.2.2、对应的 json 字符串:
-
{
-
"store": {
-
"book":[
-
{
-
"category": "修真",
-
"author": "六道",
-
"title": "坏蛋是怎样炼成的",
-
"price": 8.95
-
},
-
{
-
"category": "修真",
-
"author": "天蚕土豆",
-
"title": "斗破苍穹",
-
"price": 12.99
-
},
-
{
-
"category": "修真",
-
"author": "唐家三少",
-
"title": "斗罗大陆",
-
"isbn": "0-553-21311-3",
-
"price": 8.99
-
},
-
{
-
"category": "修真",
-
"author": "南派三叔",
-
"title": "皇辰变",
-
"isbn": "0-395-19395-8",
-
"price": 22.99
-
}
-
],
-
"bicycle": {
-
"color": "黑色",
-
"price": 19.95
-
}
-
}
-
}
2.2.3、对应的python代码
-
import jsonpath
-
import json
-
-
obj = json.load(open('20_爬虫_解析_jsonpath.json', 'r', encoding='utf8'))
-
-
# 书店所有书的作者(xpath:/store/book/author)
-
author_list = jsonpath.jsonpath(obj, '$.store.book[*].author')
-
-
# 书店第一本书
-
book_first = jsonpath.jsonpath(obj, '$..book[0]')
-
-
# 书店最后一本书
-
book_last = jsonpath.jsonpath(obj, '$..book[(@.length-1)]')
-
-
# 书店前两本书
-
book_list_second1 = jsonpath.jsonpath(obj, '$..book[0,1]')
-
book_list_second2 = jsonpath.jsonpath(obj, '$..book[:2]')
-
-
# 所有的作者(xpath://author)
-
author_allList = jsonpath.jsonpath(obj, '$..author')
-
-
# store下面的所有元素
-
tag_list = jsonpath.jsonpath(obj, '$.store.*')
-
-
# store里面的所有钱
-
price_list = jsonpath.jsonpath(obj, '$.store..price')
-
-
# 条件过滤,需要在()前加"?"
-
# 过滤出所有包含isbn的书
-
book_list_isbn = jsonpath.jsonpath(obj, '$..book[?(@.isbn)]')
-
-
# 条件过滤,需要在()前加"?"
-
# 哪本书超过10块钱
-
book_list_overTen = jsonpath.jsonpath(obj, '$..book[?(@.price>10)]')
-
-
print(book_list_overTen)
三、Jsonpath解析淘票票
3.1、python代码
3.1.1、获取 json 数据并保存至本地
-
import urllib.request
-
import json
-
import jsonpath
-
-
url = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1662563919541_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'
-
-
headers = {
-
# 带:的属性会报错,不能使用
-
# ':authority': 'dianying.taobao.com',
-
# ':method': 'GET',
-
# ':path': '/cityAction.json?city=110100&_ksTS=1662562312158_19&jsoncallback=jsonp20&action=cityAction&n_s=new&event_submit_doLocate=true',
-
# ':scheme': 'https',
-
# 编码格式与爬虫不符
-
# 'accept-encoding': 'gzip, deflate, br',
-
}
-
-
request = urllib.request.Request(url=url, headers=headers)
-
-
response = urllib.request.urlopen(request)
-
-
content = response.read().decode('utf8')
-
-
# 结果:jsonp20({"returnCode":"0","returnValue":{"city":110100,"name":"北京"}}); 需要去掉”jsonp20();“
-
# 切割,获取json字符串
-
content = content.split('(')[1].split(')')[0]
-
-
with open('21_爬虫_解析_jsonpath淘票票.json', 'w', encoding='utf8') as fp:
-
fp.write(content)
3.1.2、根据本地 json 文件获取相应信息
-
import json
-
import jsonpath
-
-
obj = json.load(open('21_爬虫_解析_jsonpath淘票票.json', 'r', encoding='utf8'))
-
-
city_list = jsonpath.jsonpath(obj, '$..regionName')
-
-
print(city_list)
3.2、结果
注意:红框内为有效json,其他字符串为非json字符串,在进行json识别时,需要去掉。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgibaee
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13