分享python接口自动化中,对响应结果的内容进行提取的几种方法

目录

1.使用get函数提取(提取的数据必须是字典格式,不然不能用)

2.使用jsonpath提取,适用于json的结果(前提是下载这个库,并且导包, 下载使用pip install jsonpath下载就可以了):返回的是一个列表

3.使用正则表达式提取,适用于文本类型的结果(需要导包)


本文示例的响应结果:

{'reason': '查询成功', 'result': [{'id': '1', 'province': '安徽'}, {'id': '2', 'province': '澳门'}, {'id': '3', 'province': '北京'}, {'id': '4', 'province': '福建'}, {'id': '5', 'province': '甘肃'}, {'id': '6', 'province': '广东'}, {'id': '7', 'province': '广西'}, {'id': '8', 'province': '贵州'}, {'id': '9', 'province': '海南'}, {'id': '10', 'province': '河北'}, {'id': '11', 'province': '河南'}, {'id': '12', 'province': '黑龙江'}, {'id': '13', 'province': '湖北'}, {'id': '14', 'province': '湖南'}, {'id': '15', 'province': '吉林'}, {'id': '16', 'province': '江苏'}, {'id': '17', 'province': '江西'}, {'id': '18', 'province': '辽宁'}, {'id': '19', 'province': '内蒙古'}, {'id': '20', 'province': '宁夏'}, {'id': '21', 'province': '青海'}, {'id': '22', 'province': '山东'}, {'id': '23', 'province': '山西'}, {'id': '24', 'province': '陕西'}, {'id': '25', 'province': '上海'}, {'id': '26', 'province': '四川'}, {'id': '27', 'province': '台湾'}, {'id': '28', 'province': '天津'}, {'id': '29', 'province': '西藏'}, {'id': '30', 'province': '香港'}, {'id': '31', 'province': '新疆'}, {'id': '32', 'province': '云南'}, {'id': '33', 'province': '浙江'}, {'id': '34', 'province': '重庆'}], 'error_code': 0}

1.使用get函数提取(提取的数据必须是字典格式,不然不能用)

当我们获取到json格式的响应结果时,我们可以使用get函数直接进行提取(前提必须是字典格式可以使用type函数进行查看),如果像下面这种里面包含列表的情况,我们需要使用[]下标进行定位,下面的代码就表示取列表中第一个字典中id的值。

res_data1 = response1.json()
id_1 = res_data1.get("result")[0].get("id")
#或者
id_1 = res_data1["result"][0]["id"]

结果

如果是下面这种情况,则可以直接一直使用get函数

day_wind_comp = response3.json().get("result").get("day_wind_comp")

结果

2.使用jsonpath提取,适用于json的结果(前提是下载这个库,并且导包, 下载使用pip install jsonpath下载就可以了):返回的是一个列表

jsonpath表达式的规则:

        1) $   根节点(必须以$开头)

        2) .    子节点  

        3) ..   递归取子节点

id_1_1 = jsonpath.jsonpath(res_data1,"$.result")
id_1_1_1 = jsonpath.jsonpath(res_data1,"$..id")

我们通过结果来进行分析

第一行表示从根节点开始,获取到result这个子节点的值,因为result本身是一个列表,所以这个结果是列表嵌套列表,所以需要在末尾加上[index][index][key]才能提取到对应的值。

第二行表示从根节点开始,递归取到子节点下所有的键为id的值,然后是以列表的格式输出,需要第几个id就用[]取值就可以了。

3.使用正则表达式提取,适用于文本类型的结果(需要导包)

res = requests.get("https://www.baidu.com")
print(res.text)
c = re.search('name="tj_login" class="(.*?)"',res.text).group(1)
d = re.findall('name="tj_login" class="(.*?)"',res.text)

search表示只匹配一个,findall表示匹配多个

re.search(pattern, string) 函数在给定的字符串中搜索第一个匹配指定模式的位置。如果找到匹配,它返回一个匹配对象。当在匹配对象上调用 group() 方法时,它返回实际匹配的子字符串,如果没有匹配到则返回None。group() 方法还可以接受一个参数 group(index),以提取具体的捕获组,如果模式中使用了多个括号定义了多个组。索引 0 表示整个匹配,而索引 1 及以后表示相应的捕获组。

这里也可以使用[]进行索引提取

re.search('name="tj_login" class="(.*?)"',res.text)[1]

findall()方法返回的则是一个列表

如有错误欢迎大佬们指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值