Python使用jsonpath返回False问题

做爬虫经常会遇见代理ip的API接口请求返回ip进行处理,然后解决封IP问题。一直以来我都是直接使用Python中的json模块转字典进行处理。

那天突然心血来潮,想起jsonpath语法好久没用过了,已经忘的差不多了,想着处理代理ip的时候顺手复习一下jsonpath模块的基础使用,然后就遇见了这个问题。

出现False的情况有两种:
建议可以用www.json.cn校验一下你的json字符串格式是否正确
1.传入的不是dict对象(我犯的就是这个错误,我直接把返回的字符串没转dict对象就传入)
2.没有jsonpath表达式中对应的key值(检查你的jsonpath表达式)

上代码,这里就不展示代理ip的接口了,我直接用d来代替返回结果。

import jsonpath
import json

# 返回的ip
d = '{ 
"code": 100, 
"left_ip": 7, 
"left_time": 56223, 
"number": 1, 
"domain": "183.129.244.16", 
"port": [ 55405 ] }'

# 将json格式的字符串转换成Python的dict类型
u_str = json.loads(d)

# 打印转换结果,和转换类型
print(u_str, type(u_str))

#将转换后的dict对象传入,然后是你要提取的数据的jsonpath语法
ip_address = jsonpath.jsonpath(u_str, '$..domain')[0]
port = jsonpath.jsonpath(u_str, "$..port")[0][0]
print(ip_address, port)

输出结果

{'code': 100, 'left_ip': 7, 'left_time': 56223, 'number': 1,
'domain': '183.129.244.16', 'port': [55405]}
<class 'dict'>
183.129.244.16  55405

现在再来说一下我的错误
我对于json的认识就是前后端交换数据的一种格式规范,一个类似于Python中字典形式的字符串。

我在使用jsonpath的时候,认为直接将json字符串传入,再传入jsonpath的语法就是对的,然后一直出现返回False。

在jsonpath模块中
这个函数校验了传入的是否是dict对象和校验你的jsonpath语法是否正确,能否匹配到结果,匹配过程中进行了异常捕获,如果出现异常就返回False

在这里插入图片描述在这里插入图片描述

以后学了的东西还是要多用,要多用实践来检验你的所学。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值