当前位置: 首页 > news >正文

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

目录

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 jsonurl = "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.lryc.cn/news/273435.html

相关文章:

  • 【React系列】高阶组件
  • 听GPT 讲Rust源代码--src/tools(38)
  • .NET C# 如何获取object对象的数据
  • 使用IDEA创建使用 JDK8 的 2.x.x 版本的 Spring Boot 项目以及 Spring Boot 项目如何修改JDK版本
  • 游戏服务器整体架构思考
  • labelme 标注的数据集转化为Mask-Rcnn适用的数据集
  • x-cmd pkg | tig - git 文本模式界面
  • 信息论与编码期末复习——概念论述简答题(一)
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目
  • 二叉排序树的创建、插入、查找和删除【数据结构】
  • 【管理篇 / 恢复】❀ 07. macOS下用命令刷新固件 ❀ FortiGate 防火墙
  • 工作纪实40-使用redis的几种姿势
  • 修改 docker /dev/shm 的大小
  • 【观察】Aginode安捷诺:坚守“长期主义”,服务中国数字经济
  • HttpClient库与代理IP在爬虫程序中的应用
  • C#最佳工具集合:IDE、分析、自动化工具等
  • promethues grafana 安装和使用
  • 华为DriveONE电机控制器拆解实拍
  • 【git使用】历史commit的分割(git rebase和 git reset的联合使用)
  • 栈和队列oj题——225. 用队列实现栈
  • 集合的三种遍历方式
  • Mysql 中的常用命令
  • 【Java】CompletableFuture使用方法
  • 摆烂式学习ssh
  • 用 Python 抓取 bilibili 弹幕并分析!
  • 目标检测YOLO实战应用案例100讲-基于红外图像处理的无人机光伏组件故障检测(续)
  • go mod 命令详解
  • 花了一小时,拿python手搓了一个考研背单词软件
  • 一篇文章学会Vim
  • 面试算法91:粉刷房子