【Python爬虫开发基础⑫】requests库概述(文件上传、cookies处理、状态码处理、异常处理等)

news/2025/3/19 11:02:53/

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~
💡往期推荐
⭐️前面比较重要的基础内容
【Python爬虫开发基础⑦】urllib库的基本使用
【Python爬虫开发基础⑧】XPath库及其基本用法
【Python爬虫开发基础⑨】jsonpath和BeautifulSoup库概述及其对比
【Python爬虫开发基础⑩】selenium概述
【Python爬虫开发基础⑪】requests库概述(GET和POST请求)
⭐️爬虫的实战文章
【Python爬虫开发实战①】使用urllib以及XPath爬取可爱小猫图片
【Python爬虫开发实战②】使用urllib以及jsonpath爬取即将上映电影信息
大家可以复制代码感受一下爬虫的魅力~
💡本期内容:上一篇文章我们简单的介绍了requests库,这一篇文章我们接着讲~


文章目录

  • 1 文件上传
  • 2 cookies处理
  • 3 状态码处理
  • 4 异常处理


1 文件上传

使用 requests 库进行文件上传非常方便。可以通过传递一个 files 参数来指定要上传的文件。

import requests# 设置上传的文件路径和目标 URL
file_path = 'path/to/file.jpg'
url = 'https://api.example.com/upload'# 创建文件对象,并设置文件名和文件内容类型
files = {'file': open(file_path, 'rb')}# 发送 POST 请求并上传文件
response = requests.post(url, files=files)# 检查响应状态码
if response.status_code == 200:# 获取响应内容(文本格式)content = response.textprint(f'Response content: {content}')
else:print('Failed to upload file. Status code:', response.status_code)

在上述示例代码中,我们首先指定了要上传的文件路径 file_path 和目标 URL url。然后,创建了一个 files 字典,其中键为 'file',值为使用 open() 函数打开文件对象。注意,这里需要将文件以二进制模式打开 ('rb')

接下来,我们使用 requests.post() 方法发送 POST 请求,并通过参数 files=files 来指定要上传的文件。

最后,我们检查响应状态码是否为 200,如果成功,则获取响应内容并打印出来。如果上传失败,则打印相应的错误信息和状态码。

注意:可以根据实际需求对文件上传进行更多的定制,例如设置文件名、文件类型等。requests 库提供了丰富的选项来满足不同的文件上传需求。可以根据具体情况进行相应的设置,并将文件对象以适当的方式传递给 requests.post() 方法。


2 cookies处理

在使用 requests 库发送网络请求时,可以方便地处理和管理 cookies。Cookies 是服务器存储在用户浏览器中的数据,用于跟踪用户会话和存储用户信息。requests 库提供了一些方法来处理和操作 cookies。

  • 获取 cookies: 可以使用 response.cookies 属性获取响应中的 cookies。它返回一个 RequestsCookieJar 对象,可以通过索引或属性名访问特定的 cookie 值。

  • 发送 cookies: 可以通过传递 cookies 参数将 cookies 添加到请求中。cookies 参数可以是一个字典,其中键为 cookie 名称,值为 cookie 值。

  • 保存 cookies: 通过设置 session 属性为 True,可以创建一个会话对象,该对象将自动保存和管理 cookies。在后续请求中,会话对象会自动发送之前收到的 cookies,并接收和更新新的 cookies。

示例代码

import requests# 发送 GET 请求并获取 cookies
response = requests.get('https://api.example.com')
cookies = response.cookies# 将 cookies 添加到后续请求中
url = 'https://api.example.com/data'
response = requests.get(url, cookies=cookies)# 创建会话对象,并保存 cookies
session = requests.Session()
response = session.get('https://api.example.com/login')# 做其他操作,会话对象会自动发送和接收 cookies
response = session.get('https://api.example.com/profile')

在上述示例代码中,我们首先发送一个 GET 请求并获取响应中的 cookies。通过 response.cookies 属性可以获得一个 RequestsCookieJar 对象,其中包含了响应中的 cookies。

接下来,我们将 cookies 添加到后续请求中,通过 cookies=cookies 参数传递给 requests.get() 方法。这样,在发送请求时会自动带上之前收到的 cookies。

另外,我们还创建了一个会话对象 session,通过 requests.Session() 创建。会话对象会自动保存和管理 cookies。在后续的请求中,直接使用会话对象发送请求,会话对象会自动发送和接收 cookies。

注意:需要注意的是,如果没有指定会话对象或手动处理 cookies,requests 库默认会将每个请求视为相互独立的,不会自动处理 cookies。

cookie从需要在开发者工具的抓包中找:
在这里插入图片描述


3 状态码处理

requests 库提供了一种简便的方式来处理 HTTP 请求的响应状态码。在发送请求后,可以通过访问 response.status_code 属性来获取响应的状态码,并根据状态码进行相应的处理。

以下是一些常见的 HTTP 状态码和其含义:

状态码意义
200 OK请求成功,信息在返回的响应报文中
201 Created请求成功,并在服务器上创建了新资源
204 No Content请求成功,但响应中没有返回任何内容
301 Moved Permanently请求的对象已经被永远的转移了,新的URL定义在响应报文的Location,首部行中,客户软件将自动获取新的URL
400 Bad Request一个通用的差错代码,指示该请求不能被服务器理解
401 Unauthorized请求未被授权,需要提供有效的身份验证信息
403 Forbidden请求被服务器拒绝,通常是因为权限不足
404 Not Found被请求的文档不在服务器上
500 Internal Server Error服务器内部发生错误,无法完成请求
505 HTTP Version Not Supported服务器不支持请求报文使用的HTTP协议版本

示例代码

import requests# 发送 GET 请求
response = requests.get('https://api.example.com')# 获取响应状态码
status_code = response.status_code# 根据状态码进行处理
if status_code == 200:print('Request successful')
elif status_code == 404:print('Page not found')
elif status_code == 500:print('Internal Server Error')
else:print('Unexpected status code:', status_code)

在上述示例代码中,我们发送了一个 GET 请求到 'https://api.example.com'。然后,通过访问 response.status_code 来获取响应的状态码,并将其赋值给变量 status_code

接下来,我们使用条件语句对不同的状态码进行处理。以常见的状态码为例,如果状态码为 200,则表示请求成功,我们打印出相应的成功信息。如果状态码为 404,则表示页面未找到,我们打印出相应的错误信息。如果状态码为 500,则表示服务器内部错误,同样打印出相应的错误信息。对于其他未预料到的状态码,我们打印出无法识别的状态码信息。

注意:状态码的具体含义可能根据不同的 HTTP 协议版本和服务器实现有所差异。因此,在实际应用中,可能需要参考相应的文档或规范来了解每个状态码的含义,并根据具体情况进行适当处理。


4 异常处理

requests 库提供了一套完善的异常处理机制,用于捕获和处理与网络请求相关的异常。当发生异常时,可以通过捕获 requests.exceptions.RequestException 异常来处理,并根据不同的异常类型进行相应的操作。

import requests
from requests.exceptions import RequestExceptiontry:# 发送 GET 请求response = requests.get('https://api.example.com')# 检查响应状态码response.raise_for_status()# 处理响应数据data = response.json()print('Response data:', data)except requests.exceptions.HTTPError as err:print('HTTP Error:', err)except requests.exceptions.ConnectionError as err:print('Connection Error:', err)except requests.exceptions.Timeout as err:print('Timeout Error:', err)except requests.exceptions.RequestException as err:print('Error occurred:', err)

在上述示例代码中,我们首先尝试发送一个 GET 请求到 'https://api.example.com'。然后,使用 response.raise_for_status() 方法检查响应的状态码,如果状态码表明请求失败,将会抛出 requests.exceptions.HTTPError 异常。

try 语句块中,我们通过多个 except 子句来捕获和处理不同类型的异常。例如,如果发生连接错误(如网络连接问题、DNS 错误等),将抛出 requests.exceptions.ConnectionError 异常;如果发生超时错误,将抛出 requests.exceptions.Timeout 异常。

最后,我们使用 requests.exceptions.RequestException 来捕获其他的请求异常,这包括 HTTPErrorConnectionErrorTimeout 以及其他未明确定义的异常类型。在这个异常处理块中,可以打印出发生的异常信息,或者根据实际需求进行相应的错误处理。

注意:捕获 RequestException 异常将会捕获所有与请求相关的异常,因此它应该作为捕获异常的基类。如果你只想捕获特定类型的异常,可以将其放在更具体的子类异常之前。

通过合理的异常处理,可以增加代码的健壮性和可靠性,并提供有用的错误信息和反馈给用户。在实际使用中,可以根据具体的场景和需求,进一步处理异常、记录日志、重试请求或采取其他适当的措施。


http://www.ppmy.cn/news/805098.html

相关文章

dlsym

dlopen()函数和dlsym()函数 1 dlopen()函数 用于打开一个.so库,原型如下: void *dlopen(const char *filename, int flag) { soinfo *ret; pthread_mutex_lock(&dl_lock); ret find_library(filename); if (unlikely(ret NU…

关于dl dt dd

HTML <dl> 元素 &#xff08;或 HTML 描述列表元素&#xff09;是一个包含术语定义以及描述的列表&#xff0c;通常用于展示词汇表或者元数据 (键-值对列表)。在 HTML5 之前&#xff0c; <dl> 被大家以定义列表所熟知。用法&#xff1a; 单条术语和描述&#xff…

DDMMSS.SS转为DD

有时候甲方会给我们一些坐标&#xff0c;但是在arcgis中是无法直接显示的 这是因为该格式是DDMMSS.SS的格式&#xff0c;而arcgis支持的是DD格式的&#xff0c;其中dd单位是度&#xff0c;mm单位是分&#xff0c;ss.ss单位是秒 所以要在arcgis中显示我们需要将其转换为DD的格式…

dd/mm/yy转化yymmdd

输入&#xff1a;2/7/2019 输出&#xff1a;20190702 方法很笨&#xff0c;欢迎吐槽 #include<cstdio> #include<cstring> int main() {char str[100];char dd[10] {};char mm[10] {};char yy[10] {};gets(str);int i;int j 0;int k 0;int n strlen(str);f…

MvDGNMF

题目&#xff1a;Deep graph regularized non-negative matrix factorization for multi-view clustering 一. 创新点 这篇文章主要是基于一个叫做Deep Semi-NMF的方法。传统的NMF是用X算出H&#xff0c;而该方法把H算出来以后&#xff0c;会把H当作新的原始变量&#xff0c;…

dl dt dd 用法

释义&#xff1a; dl: Definition List (定义列表) dt: Definition Term &#xff08;定义项&#xff09; dd: Definition Description &#xff08;定义描述&#xff09; 作用&#xff1a; dl表示一个定义列表 dt表示一个定义的名称&#xff0c;可以理解为词典…

关于css 中的dl dt dd

< dl>< /dl>用来创建一个普通的列表, < dt>< /dt>用来创建列表中的上层项目&#xff0c; <dd>< /dd>用来创建列表中最下层项目&#xff0c; < dt>< /dt>和< dd>< /dd>都必须放在< dl>< /dl>标志对…