从0开始python学习-40.通过正则表达式/json进行接口关联

news2024/11/27 2:22:16

目录

1. 正则表达式:使用re库(需安装-pip install re),只能提取字符串的数据。

1.1 re.seach:提取一个值,得到的是一个对象,通过下标group(1)取值,如果没有匹配到值则返回None

1.2 re.findall:提取多个值,得到的是一个列表,通过下标【0】取值,如果没有匹配到值则返回一个空列表

2. Jsonpath表达式:jsonpath

2.1 jsonpath.jsonpath() 提取多个值,得到的是一个列表,通过下标【0】取值,如果没有匹配到值则返回None

2.2 语法规则


响应数据示例

{
    "code": 200,
    "messages": "ok",
    "data": [
        {
            "name": "宋瑶",
            "time": "2020-09-30 18:58:33",
            "relation": {
                "mobile": "15811111111",
                "CardType": "身份证"
            }
        }
    ]
}

1. 正则表达式:使用re库(需安装-pip install re),只能提取字符串的数据。

1.1 re.seach:提取一个值,得到的是一个对象,通过下标group(1)取值,如果没有匹配到值则返回None

url = 'http://192.168.1.1:8088/list'
data = {"name":"张三","age":18}
res = requests.get(url=url,  data=data)

print(res.text)  
search_value = re.search('name="csrf_token" value="(.*?)"', res.text)
print("\n"+search_value.group(1))

正常提取到的情况

.*? 表示匹配任意字符到下一个符合条件的字符

.group(1) 列出第一个括号匹配的部分,适用于有多个括号的情况

 .group(2) 则可以将第二个匹配的部分提取出来

无法提取到的情况,若使用search_value.group(1)则会报错AttributeError,因为并没有提取到任何数据

 

1.2 re.findall:提取多个值,得到的是一个列表,通过下标【0】取值,如果没有匹配到值则返回一个空列表

url = 'http://192.168.1.1:8088/list'
data = {"name":"张三","age":18}
res = requests.get(url=url,  data=data)

print(res.text)findall_value = re.findall('name="csrf_token" value="(.*?)"', res.text)
print(findall_value[0])

正常提取到情况,提取出角标为0的值

 使用角标的形式提取,若角标值大于了可匹配到的数据总数,则会出现角标越界的情况IndexError

 获取不到时返回空列表

2. Jsonpath表达式:jsonpath

2.1 jsonpath.jsonpath() 提取多个值,得到的是一个列表,通过下标【0】取值,如果没有匹配到值则返回None

import requests
import json

url = "http://test/project/list"

payload = json.dumps({
    "pageNo": 0,
    "pageSize": 5,
    "queryDto": {
        "projectName": "测试"
    }
})
headers = {
    'authInfo': '%7B%22user%22',
    'Content-Type': 'application/json'
}


response = requests.post(url, headers=headers, data=payload)
print(response.text)

打印结果为:

{
	"code": "0",
	"action": "/project/list",
	"msg": "succeeded",
	"data": {
		"pageNo": 0,
		"pageSize": 5,
		"totalRecords": 1,
		"data": [{
			"id": "1310935793613242370",
			"projectName": "测试"

		}]
	},
	"timestamp": "2024-01-03 21:33:38",
	"ok": true
}

2.2 语法规则

(1) $ 根节点

(2) $.取子节点

j = jsonpath.jsonpath(response.json(),'$.code')
print(j) 

 

 (3) 取列表中的值:$.上级[角标] .key

j = jsonpath.jsonpath(response.json(),'$.data.data[0].id')
print(j)

表示提取第一层级为data,下一级也是data的列表中的第一组数据中的id的value值。这里可以通过id反写层级

 (4) $..递归取值:会把所有data的value都取出来,以列表形式显示

j = jsonpath.jsonpath(response.json(),'$..data')
print(j)

结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1357345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化企业运营,深入探索SAP库存管理解决方案

SAP库存管理是SAP提供的一款领先的企业库存管理解决方案。它致力于帮助企业实现对库存的全面掌控,优化供应链管理,降低库存成本,提高客户满意度。这个功能强大的系统为企业提供了丰富的仓储管理功能,如库存盘点、物料追踪、供应商…

WPF DatePicker与Calendar的使用和样式修改

什么是DatePicker,Calendar Calendar:日历(显示年月日视图控件)DatePicker:日期选择器(是一个更小的控件,点击控件时才会弹出一个日历) Calendar使用 常用属性 DisplayMode&#…

MacOS - 苹果电脑程序还能正常启动,但图标消失不见了~

问题描述 网上有一些解决方案说是 killall Finder 命令,重置 Docker 等等,但是发现还是不行,于是必杀技…… 解决方案 方案一、删除该 App,重装即可方案二、如果懒得重装,可以在 Finder 中找到对应的应用程序&#xf…

FPGA高端项目:纯verilog的 10G-UDP 高速协议栈,提供7套工程源码和技术支持

目录 1、前言免责声明更新说明 2、相关方案推荐我这里已有的以太网方案本协议栈的千兆网UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设计架构框图网络调试助手GT资源使用GT…

1.3 金融数据可视化

跳转到根目录:知行合一:投资篇 已完成: 1.1 编程基础   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas 1.2 金融数据处理 1.3 金融数据可视化 文章目录 1. 金融数据可视化1.1. matplotlib1.1.1. 沪深300走势图1.1.2. 日线均线…

06-微服务-SpringAMQP

SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。 SpringAmqp的官方地址:https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能: 自动声明队列、交…

力扣刷题-二叉树-验证二叉搜索树

98.验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 思路 中序遍历下&…

【中小型企业网络实战案例 八】配置映射内网服务器和公网多出口、业务测试和保存配置

相关学习文章: 【中小型企业网络实战案例 一】规划、需求和基本配置 【中小型企业网络实战案例 二】配置网络互连互通【中小型企业网络实战案例 三】配置DHCP动态分配地址 【中小型企业网络实战案例 四】配置OSPF动态路由协议【中小型企业网络实战案例 五】配置可…

Python重温笔记番外篇

1. 写在前面 今天这篇文章是python重温笔记的番外,整理一些面试中的问题以及遇到过的一些坑, 正好借着这个机会把前面的知识进行一个串联, 要不然这些知识很容易就会遗忘, 毕竟知识多而又不太容易常用到。 涉及到的知识包括列表推…

单片机快速入门

参考连接: 安装MinGW-64(在win10上搭建C/C开发环境)https://zhuanlan.zhihu.com/p/85429160MinGW-64; 链接:https://pan.baidu.com/s/1oE1FmjyK7aJPnDC8vASmCg?pwdy1mz 提取码:y1mz --来自百度网盘超级会员V7的分享C…

Python打印Python环境、PyTorch和CUDA版本、GPU数量名称等信息

代码: import torch import platformgpu_num torch.cuda.device_count() torch_version torch.__version__ python_version platform.python_version()print("Python Version: Python %s" % python_version) print("PyTorch Version: %s" %…

[Javaweb/LayUI/上机考试作业/开源]学生/图书/课程/仓库等管理系统六合一基础功能通用模板

展示 考试要求 给定用户表和六张图书/教师/顾客/仓库....的表(随机给每人抽选),要求实现用户登录注册,异步更新,对物品增删改查,精确/模糊查询等。 环境 tomcat 9 mysql 8 java 17 项目结构 项目类图 写前…

分布式【zookeeper面试题23连问】

1. ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终&#x…

Prometheus二进制安装包部署

Prometheus安装部署 一,下载安装包并解压 **下载地址:**https://github.com/prometheus/prometheus/releases 因为服务器上下载速度太慢,所以可以提前在物理机上下载上传到服务器,本次安装使用的版本为:prometheus-…

深度神经网络中的混合精度训练

Mixed-Precision Training of Deep Neural Networks | NVIDIA Technical Blog 目录 混合精度成功训练的技术 FP32 累加 损失缩放 loss scaling FP32 Master Copy of Weights 混合精度训练迭代过程 AMP混合精度训练介绍 FP16和FP32的区别 FP16的优势 FP16的问题 解决P…

shell sshpass 主机交互 在另外一台主机上执行某个命令 批量管理主机 以及一些案例

目录 作用安装 sshpasssshpass 用法在远程主机执行某个命令 案例批量传输密匙批量拷贝文件批量修改密码 作用 就是用一台主机 控制另外一台主机免交互任务管理工具方便批量管理主机使用方法就是在ssh 前边加一个 sshpass 安装 sshpass # 安装 sshpass yum -y install sshpas…

MongoDB快速实战与基本原理

MongoDB 介绍 什么是 MongoDB MongoDB 是一个文档数据库(以 JSON 为数据模型),由 C 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。文档来自于“JSON Document”,并非我们一般理解的 PDF、WORD 文档…

【K8S 云原生】Pod资源限制、Pod容器健康检查(探针)

目录 一、docker的重启方式和K8S重启方式 1、Pod的重启方式: 2、docker的重启策略: 二、yaml文件快速生成: 三、pod的状态: 四、Pod的资源限制 1、限制的方式和种类 2、CPU的限制的格式: 五、K8S拉取镜像的策…

电源板设计方案怎么写 (评审文件)

1. 首先是大致的图形模块化说明。 1. 大致的框图 2. 统计项目需要的功率和需求 此表格数据是假的,只是为了展示 电源种类是: 板子需要供电需要的电压和对应电压最大的电流。 电源时序是: 板子…

智能穿戴时代 | 米客方德SD NAND的崭新优势

SD NAND在智能穿戴上的优势 SD NAND是一种可以直接焊接在智能穿戴设备主板上的存储芯片,其小型化设计有助于紧凑设备尺寸,同时提供可靠的嵌入式存储解决方案。 这种集成设计减少了空间占用,同时确保设备在高度活动的环境中更为稳定。SD NAND…