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

使用Python的requests库调用API并处理JSON响应的详细步骤

1. 安装request库

pip install requests

2. 发送GET请求

import requests# 定义API地址
url = "https://api.example.com/data"# 发送GET请求
response = requests.get(url)# 检查HTTP状态码
if response.status_code == 200:# 解析JSON响应data = response.json()print("请求成功,数据内容:", data)
else:print(f"请求失败,状态码:{response.status_code}")

 3. 处理URL参数

params = {"param1": "value1","param2": 123
}response = requests.get(url, params=params)

4. 发送POST请求

payload = {"key1": "value1","key2": "value2"
}# 发送JSON格式数据
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)# 或者使用data参数(表单格式)
# response = requests.post(url, data=payload)

5. 处理认证

headers = {"Authorization": "Bearer YOUR_ACCESS_TOKEN",# 或使用API密钥:# "X-API-Key": "YOUR_API_KEY"
}response = requests.get(url, headers=headers)

6. 提取JSON数据中的字段

假设返回的JSON结构如下:

{"status": "success","data": {"id": 123,"name": "Example"}
}

提前数据的python代码:

resp_json = response.json()# 获取嵌套字段
status = resp_json.get("status")
user_id = resp_json["data"]["id"]
user_name = resp_json["data"].get("name", "默认名称")print(f"用户ID: {user_id}, 姓名: {user_name}")

7.错误处理

try:response = requests.get(url, timeout=5)  # 设置超时时间response.raise_for_status()  # 自动抛出HTTP错误data = response.json()print("解析到的数据:", data)except requests.exceptions.RequestException as e:print(f"请求异常:{e}")
except ValueError as e:print(f"JSON解析失败:{e}")
except KeyError as e:print(f"JSON字段缺失:{e}")

8. 高级用法:处理分页API

page = 1
all_data = []while True:response = requests.get(f"{url}?page={page}")page_data = response.json()if not page_data["results"]:breakall_data.extend(page_data["results"])page += 1print(f"总收集到{len(all_data)}条数据")

关键点:

1. HTTP方法选择:根据API要求使用get()post()put()delete()

2. 参数传递

  • GET参数用 params

  • POST数据用 data(表单)或 json(JSON格式)

3. 请求头设置:通过 headers 参数添加认证信息

4. 响应处理

  • 检查 status_code

  • 使用 .json()解析响应内容

  • 使用 .get()方法避免 KeyError

5. 异常处理:捕获网络错误和解析错误

http://www.lryc.cn/news/547723.html

相关文章:

  • Mybatis如何通过databaseId属性支持不同数据库的不同语法
  • android edittext 防止输入多个小数点或负号
  • windows部署spleeter 版本2.4.0:分离音频的人声和背景音乐
  • 深度学习、宽度学习、持续学习与终身学习:全面解析与其在大模型方面的应用
  • 【量化科普】Arbitrage,套利
  • 删除已加入 .gitignore却仍被git追踪的文件
  • pytest框架 核心知识的系统复习
  • Spring Cloud Alibaba学习 5- Seata入门使用
  • WebAssembly技术及应用了解
  • Deepseek中的MoE架构的改造:动态可变参数激活的MoE混合专家架构(DVPA-MoE)的考虑
  • NodeJS学习笔记
  • 【交通网络拓扑图实现原理深度解析】
  • 【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
  • NO2.C++语言基础|C++和Java|常量|重载重写重定义|构造函数|强制转换|指针和引用|野指针和悬空指针|const修饰指针|函数指针(C++)
  • 【CSS】---- 纯 CSS 实现无限滚动轮播
  • 软考架构师笔记-计算机网络
  • Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理
  • 道可云人工智能每日资讯|亚马逊云业务部门成立智能体人工智能团队
  • 算力100问☞第72问:算力与算法、数据的关系是什么?
  • AI-Ollama本地大语言模型运行框架与Ollama javascript接入
  • Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex
  • 【算法day2】无重复字符的最长子串 两数之和
  • HarmonyOS:基于hmrouter实现Page的生命周期监听
  • DeepSeek + 飞书多维表格搭建你的高效工作流
  • uniapp+<script setup lang=“ts“>使用 uni.$emit和uni.$on全局传递数据
  • 综合使用pandas、numpy、matplotlib、seaborn库做数据分析、挖掘、可视化项目
  • docker中kibana启动后,通过浏览器访问,出现server is not ready yet
  • 十、Redis 主从复制:原理解析、配置实践与优化策略
  • 使用JMeter(组件详细介绍+使用方式及步骤)
  • lamp平台的应用