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

python——requests

Python requests

一、什么是requests库?

Python的requests库是一个用于发送HTTP请求的第三方库。它简单易用,封装了许多底层操作,能够帮助开发者更轻松地与Web服务进行通信。requests库支持发送各种HTTP请求,比如GET、POST、PUT、DELETE等。

requests库的特点
  • 简单易用:与Python的标准库urllib相比,requests更易于使用。
  • 功能强大:支持HTTP方法、Cookies、会话、SSL验证等功能。
  • 自动处理编码:可以自动检测和处理编码问题。
  • 丰富的扩展性:支持自定义头信息、参数和认证方式。
安装requests

在使用requests之前,需要确保已安装该库。可以使用以下命令安装:

pip install requests

二、HTTP请求的基本概念

在了解requests库的API之前,首先需要了解一些基本的HTTP概念,这有助于理解如何与Web服务交互。

  • HTTP方法:常用的有GET、POST、PUT、DELETE等,分别对应不同的操作。比如GET用于获取资源,POST用于提交数据。
  • URL:统一资源定位符(Uniform Resource Locator),是访问资源的地址。
  • 请求头(Headers):发送请求时可以包含的元数据,如用户代理、内容类型等。
  • 请求体(Body):主要用于POST、PUT等请求,包含要发送的数据。
  • 响应(Response):服务器返回的内容,包括状态码、响应头、响应体等。

三、requests库的基本API

1. 发送GET请求

GET请求通常用于从服务器获取数据。它将参数附加在URL的查询字符串中。

语法

import requestsresponse = requests.get(url, params=None, headers=None)

参数说明

  • url: 请求的URL地址。
  • params: (可选)字典或元组,附加在URL后的查询参数。
  • headers: (可选)字典,包含发送的请求头信息。

示例

response = requests.get('https://jsonplaceholder.typicode.com/posts', params={'userId': 1})
print(response.status_code)  # 打印状态码
print(response.json())       # 以JSON格式输出响应内容

使用场景

  • 获取网页内容或API返回的数据。
  • 在数据采集和爬虫中,通过GET请求获取目标网页的HTML。
2. 发送POST请求

POST请求用于向服务器提交数据,比如提交表单或者上传文件。

语法

response = requests.post(url, data=None, json=None, headers=None)

参数说明

  • url: 请求的URL地址。
  • data: (可选)字典或元组,表单数据将作为请求体发送。
  • json: (可选)字典或列表,JSON数据将作为请求体发送。
  • headers: (可选)字典,包含发送的请求头信息。

示例

payload = {'username': 'test', 'password': '123456'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.json())  # 以JSON格式输出响应内容

使用场景

  • 提交数据给服务器,比如登录表单、评论、上传文件等。
  • 爬虫中模拟表单提交,获取特定用户的数据。
3. 发送其他请求 (PUT, DELETE, HEAD)

除了GET和POST请求,requests库还支持其他HTTP方法。

PUT请求

response = requests.put('https://jsonplaceholder.typicode.com/posts/1', data={'title': 'new title'})
print(response.status_code)

用于更新资源,通常与GET、POST结合使用。

DELETE请求

response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)

用于删除资源。

HEAD请求

response = requests.head('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)

类似GET,但只请求响应头而不下载响应体,通常用于检查链接是否可用。


四、处理响应

使用requests库发送请求后,会得到一个响应对象,可以从中提取有用的信息。

1. 获取响应状态码

状态码用于指示请求的结果,常见的有200(成功)、404(未找到)、500(服务器错误)等。

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # 输出状态码
2. 获取响应内容

响应的内容可以是HTML、JSON等格式,可以根据需要进行处理。

print(response.text)  # 以文本形式输出内容
print(response.json())  # 以JSON格式输出内容
3. 获取响应头
print(response.headers)  # 输出响应头

五、高级功能

1. 会话处理 (Session)

requests库提供了会话(Session)对象,可以跨请求保存某些参数,如Cookies。适用于需要连续多次请求并保持状态的场景。

示例

session = requests.Session()
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
response = session.get('https://httpbin.org/cookies')
print(response.json())  # 会返回已设置的cookie
2. SSL证书验证

默认情况下,requests会验证SSL证书,可以通过参数verify关闭此功能。

response = requests.get('https://expired.badssl.com/', verify=False)
print(response.status_code)
3. 超时设置

可以使用timeout参数设置请求的超时时间,避免长时间等待。

response = requests.get('https://httpbin.org/delay/3', timeout=2)  # 设置2秒超时

六、数据采集与爬虫应用中的使用

在数据采集和简单爬虫开发中,requests库是获取网页内容的利器。

1. 获取网页HTML

可以通过GET请求获取网页的HTML内容,然后使用解析库如BeautifulSoup提取信息。

response = requests.get('https://example.com')
html_content = response.text
2. 模拟表单提交

很多网站的数据交互是通过POST请求进行的,requests库可以帮助我们模拟表单提交。

payload = {'username': 'user', 'password': 'pass'}
response = requests.post('https://example.com/login', data=payload)
3. 处理Cookies

有些网站使用Cookies保存会话信息,requests库可以方便地管理和发送Cookies。

session = requests.Session()
session.get('https://example.com/login')
response = session.get('https://example.com/profile')
4. 处理分页数据

在抓取多个页面的数据时,常需要处理分页,可以通过循环发送GET请求来实现。

for i in range(1, 6):  # 假设有5页数据response = requests.get(f'https://example.com/data?page={i}')print(response.json())

七、总结

  • requests库简化了HTTP请求的发送和处理。
  • 支持多种HTTP方法及高级功能,如会话、SSL验证、超时等。
  • 在数据采集和爬虫中非常实用,尤其适合初学者快速上手。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解决Element-plus中Carousel(走马灯)图片无法正常加载的bug
  • react 路由创建与使用
  • WiFi的IP和电脑IP一样吗?怎么更改wifi的ip地址
  • 线段树+二分,CF 431E - Chemistry Experiment
  • Verilog刷题笔记60
  • 计算机网络-PIM-SM组播实验
  • C++:病毒系列回归记3/3 (Doge智能系统已上线)
  • 如何使用查询路由构建更先进的 RAG
  • 宠物掉毛、有异味怎么办?怎么选择宠物空气净化器?
  • OpManager Plus简单说明以及在Linux下的安装
  • 四、控制结构
  • 网络协议的基础知识
  • 链表(静态/动态创建,遍历,计数,查找,在节点的前/后方插入新节点,头插法,尾插法)
  • 基于x86 平台opencv的图像采集和seetaface6的人脸检测功能
  • :class的用法及应用
  • Android系统模拟器绘制实现概述
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • HomeBrew常规使用教程
  • js学习笔记
  • Redis 懒删除(lazy free)简史
  • 成为一名优秀的Developer的书单
  • 高性能JavaScript阅读简记(三)
  • 观察者模式实现非直接耦合
  • 来,膜拜下android roadmap,强大的执行力
  • 前端攻城师
  • 前端自动化解决方案
  • 思维导图—你不知道的JavaScript中卷
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (4) PIVOT 和 UPIVOT 的使用
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (定时器/计数器)中断系统(详解与使用)
  • (面试必看!)锁策略
  • (区间dp) (经典例题) 石子合并
  • (十一)c52学习之旅-动态数码管
  • (十一)图像的罗伯特梯度锐化
  • (一)RocketMQ初步认识
  • (已解决)什么是vue导航守卫
  • (译) 函数式 JS #1:简介
  • (转)负载均衡,回话保持,cookie
  • (转)详解PHP处理密码的几种方式
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • . NET自动找可写目录
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net Web窗口页属性
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 中viewstate的原理和使用
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .NET中分布式服务
  • .skip() 和 .only() 的使用