python爬虫 - 初识requests模块

ops/2024/10/17 9:14:33/

  🌈个人主页:https://blog.csdn.net/2401_86688088?type=blog
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

前言

requests 是一个用于发送 HTTP 请求的 Python 库,设计简单且功能强大,能够轻松实现与 Web 服务器的交互。相比于 Python 内置的 urllib 模块,requests 更加简洁且易于使用,允许开发者快速构建 HTTP 请求,处理响应数据,并支持复杂的功能,如会话处理、文件上传、参数传递等。


一、主要功能和特点

requests 库的主要特点包括:

  1. 易于使用:通过简单的 API 来实现常见的 HTTP 操作,如 GETPOSTPUTDELETE 等。

  2. 自动处理编码和解码:自动检测和解码响应的字符编码。

  3. 支持会话:可以在多次请求中保持会话状态,如处理 cookies。

  4. 简单的 JSON 处理:轻松解析和生成 JSON 数据。

  5. 文件上传与下载:支持文件流的上传与下载操作。

  6. 支持 SSL、代理和超时:方便配置 SSL 证书、代理服务器,以及设置请求的超时时间。

二、安装requests库

安装 requests 库非常简单,可以通过 pip 来安装。

(一)使用 pip 安装

打开命令行或终端,输入以下命令即可安装 requests

pip install requests

(二)检查安装是否成功

安装完成后,可以在 Python 环境中导入 requests 模块,检查是否成功安装:

python">import requestsprint(requests.__version__)  # 输出 requests 的版本号

如果没有报错且成功输出版本号,说明 requests 库已成功安装并可以使用。

(三)版本管理

在安装时,如果想指定安装某个版本,可以通过以下命令:

pip install requests==2.25.1  # 安装特定版本

如果想更新到最新版本,可以使用以下命令:

pip install --upgrade requests

三、发起网络请求

在 Python 中使用 requests 模块可以轻松发送网络请求,并通过丰富的属性来处理请求和响应。

(一)发送 GET 请求

GET 请求用于从服务器获取数据,是最常见的 HTTP 请求方法。使用 requests.get() 发送请求非常简单:

python">import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # 输出响应内容

(二)发送 POST 请求

POST 请求用于向服务器提交数据,如表单或 JSON 数据。你可以通过 requests.post() 发送 POST 请求:

python">import requestsurl = 'https://jsonplaceholder.typicode.com/posts'
data = {'title': 'foo', 'body': 'bar', 'userId': 1}response = requests.post(url, json=data)
print(response.json())  # 输出 JSON 格式的响应内容

(三)发送带参数的 GET 请求

在 URL 中添加查询参数时,可以通过 params 参数传递:

python">params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.url)  # 输出构造好的请求URL

(四)发送带请求头的请求

如果需要定制请求头(如模拟浏览器请求),可以通过 headers 参数来设置:

python">headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://jsonplaceholder.typicode.com/posts/1', headers=headers)
print(response.text)

四、requests库常用属性

requests 的响应对象包含了许多有用的属性,帮助开发者处理和分析 HTTP 响应。

(一)response.status_code

该属性返回 HTTP 状态码,表示请求的结果。例如,200 表示请求成功,404 表示页面未找到。

python">print(response.status_code)  # 输出状态码,如200

(二)response.text

返回服务器响应的文本内容。通常用于处理 HTML、纯文本格式的响应。

python">print(response.text)  # 输出响应的文本内容

(三)response.json()

如果服务器响应的数据是 JSON 格式,response.json() 可以将其解析为 Python 字典或列表。

python">print(response.json())  # 解析并输出 JSON 数据

(四)response.content

返回响应的二进制数据。适合用于下载图片、视频等非文本数据。

python">response = requests.get('https://example.com/image.png')
with open('image.png', 'wb') as f:f.write(response.content)  # 下载并保存图片

(五)response.headers

返回响应的头部信息,类型为字典,可以用来获取服务器返回的元数据。

python">print(response.headers)  # 输出响应头

(六)response.url

返回发送请求时的完整 URL,适合用于调试请求路径是否正确。

python">print(response.url)  # 输出请求的 URL

(七)response.cookies

返回服务器在响应中设置的 cookies。通常用于会话管理或模拟浏览器行为。

python">print(response.cookies)  # 输出响应中的 cookies

(八)response.history

如果请求被重定向(如 301、302),response.history 会保存重定向前的响应信息,类型为列表。

python">print(response.history)  # 如果有重定向,会输出重定向的历史

(九)response.encoding

用于获取或设置响应的编码方式。如果响应的文本编码不正确,可以手动设置:

python">response.encoding = 'utf-8'
print(response.text)

五、text与content方法的区别

requests 库中的 textcontent 方法都是用于获取 HTTP 响应内容的属性,但它们之间存在一些关键区别。了解这些差异可以帮助你根据不同的需求选择合适的方式来处理响应内容。

(一)response.text

  • 返回值text 属性返回的是一个 字符串(str) 类型,它会根据响应内容的编码自动解码为文本。

  • 编码处理requests 库会根据 Content-Type 头中的字符集(如 utf-8ISO-8859-1 等)自动进行编码解析。如果服务器未明确指定编码,requests 会尝试根据响应内容进行推断,但这可能不总是准确。

  • 适用场景text 属性适用于处理已经是文本数据的内容,例如 HTML、JSON、XML 或纯文本。

示例:

python">import requestsresponse = requests.get('https://example.com')
print(response.text)  # 返回的内容是经过解码的字符串

如果编码推断不正确,你可以手动设置编码:

python">response.encoding = 'utf-8'
print(response.text)

(二)response.content

  • 返回值content 属性返回的是 原始的二进制数据(bytes),它不会对数据进行解码。无论响应的编码是什么,content 都会以字节流的方式原样返回。

  • 适用场景content 适合用于处理 非文本数据,如图片、视频、音频、PDF 文件等,或需要以二进制方式处理的内容。它确保你能获取到响应的原始数据而不被编码影响。

示例:

python">import requestsresponse = requests.get('https://example.com/image.jpg')
with open('image.jpg', 'wb') as f:f.write(response.content)  # 将二进制数据写入文件

(三)区别总结

  • text 返回的是经过解码的字符串,它依赖于响应的编码,因此适用于需要处理文本内容的场景(如 HTML、JSON、XML)。

  • content 返回的是原始的二进制数据,不会自动进行编码转换,适合处理二进制文件或需要保存原始响应内容的场景。

举例:

假设我们有一个请求,它返回的是一个带有 utf-8 编码的 HTML 页面:

python">import requestsresponse = requests.get('https://example.com')# 通过 .text 获取解码后的文本
print(response.text)  # 这是一个已解码的字符串# 通过 .content 获取原始的字节数据
print(response.content)  # 这是一个字节流

使用 text 时,返回的内容是解码后的文本字符串,而 content 返回的则是页面的原始字节数据。如果你打算处理图像、音频或其他二进制数据,应使用 content;而如果你处理的是网页文本或 JSON 数据,应使用 text


http://www.ppmy.cn/ops/122199.html

相关文章

Python知识点:如何使用AWS Greengrass与Python进行边缘计算

开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 如何使用AWS Greengrass与Python进行边缘计算 边缘计算是云计算的有力补充&…

《重生到现代之从零开始的C语言生活》—— 内存函数

memcpy函数 和strncpy的用法基本一致 而不一样的是,size_t num是从源内存向后复制num个字节的数据到目标内存 但是如果有重叠的部分,就不能用memcpy了我们得用memmove memmove函数 **memcpy和memmove基本一致,**但是区别是如果源内存和目标…

js拼接html代码在线工具

具体请前往:在线Html转Js--将Html代码转成javascript动态拼接代码并保持原有格式

C# (.net6)实现Redis发布和订阅简单案例

概念: 在 .NET 6 中使用 Redis 的/订发布阅模式。发布/订阅(Pub/Sub)是 Redis 支持的一种消息传递模式,其中一个或多个发布者向一个或多个订阅者发送消息,Redis 客户端可以订阅任意数量的频道。 多个客户端可以订阅一个相同的频道…

Pikachu-Sql Inject-insert/update/delete注入

insert 注入 插入语句 insert into tables values(value1,value2,value3); 如:插入用户表 insert into users (id,name,password) values (id,username,password); 当点击注册 先判断是否有SQL注入漏洞,经过判断之后发现存在SQL漏洞。构造insert的pa…

结合大语言模型的机械臂抓取操作简单介绍

一、大语言模型与机械臂抓取的基本操作 1. 大语言模型简介 大语言模型是基于深度学习技术构建的自然语言处理模型,能够生成、理解和处理文本信息。这些模型通过训练大量的文本数据,学习语法、上下文和常识,能够执行多种任务,如文…

【2024最新】华为HCIE认证考试流程

HCIE是华为认证体系中最高级别的ICT技术认证,表示通过认证的人具有ICT领域专业知识和丰富实践经验。 HCIE认证方向:最高认证级别HCIE的技术方向有13个 下面以HCIE-Datacom为例给大家介绍一下: HCIE-Datacom认证考试流程: 1.笔试…

面试官:如何设计一个订单号生成器?

设计一个订单号生成系统,主要考虑到生成的订单号需要满足的几个要求:唯一性、可扩展性、以及可能的业务相关性。以下是几种常见的解决方案及相应的示例代码: 目录 单号的生成器的几种实现方式: UUID 时间+随机数/序列 Snowflake ID结构 特点 下面是对这段代码的解释…