python爬虫 - 初识requests模块

  🌈个人主页: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 模块,检查是否成功安装:

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

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

(三)版本管理

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

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

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

pip install --upgrade requests

三、发起网络请求

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

(一)发送 GET 请求

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

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

(二)发送 POST 请求

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

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 参数传递:

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

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

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

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 表示页面未找到。

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

(二)response.text

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

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

(三)response.json()

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

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

(四)response.content

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

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

(五)response.headers

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

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

(六)response.url

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

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

(七)response.cookies

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

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

(八)response.history

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

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

(九)response.encoding

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

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 或纯文本。

示例:

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

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

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

(二)response.content

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

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

示例:

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 页面:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440362.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强制删除了windows自带的edge浏览器,重装不了怎么办【已解决】

#最近我的edge浏览器出了点问题,点击打不开但是能在下面的任务栏看到他开启了,就是不能够显示在桌面,小窗口叫我配置设置。 我不懂,感觉很烦,就把他强制卸载了。但是windows是不允许将他卸载的,使用window…

Java | Leetcode Java题解之第461题汉明距离

题目: 题解: class Solution {public int hammingDistance(int x, int y) {int s x ^ y, ret 0;while (s ! 0) {s & s - 1;ret;}return ret;} }

二叉树进阶学习——从中序和后续遍历序列构建二叉树

1.题目解析 题目来源:106.从中序和后序遍历序列构造二叉树 测试用例 2.算法原理 后序遍历:按照左子树->右子树->根节点的顺序遍历二叉树,也就是说最末尾的节点是最上面的根节点 中序遍历:按照左子树->根节点->右子树…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

探索Python文本处理的新境界:textwrap库揭秘

文章目录 **探索Python文本处理的新境界&#xff1a;textwrap库揭秘**一、背景介绍二、textwrap库是什么&#xff1f;三、如何安装textwrap库&#xff1f;四、简单函数使用方法4.1 wrap()4.2 fill()4.3 shorten()4.4 dedent()4.5 indent() 五、实际应用场景5.1 格式化日志输出5…

Study-Oracle-11-ORALCE19C-ADG集群搭建

一、ORACLE--ADG VS ORACLE--DG的区别 1、DG是Oracle数据库的一种灾难恢复和数据保护解决方案&#xff0c;它通过在主数据库和一个或多个备用数据库之间实时复制数据&#xff0c;提供了数据的冗余备份和故障切换功能。它的主要作用是灾难恢复&#xff0c;可以在主数据库发生故…

Html批量转word工具2.1

2024年10月7日记录&#xff1a; 有客户反馈&#xff0c;2.0刚运行就提示转换完成 有问题就解决。正好国庆假期这几天有空&#xff0c;2.1版就出炉了。 2.1 更新记录&#xff1a; 修复了1个bug&#xff1a;刚运行就提示转换完成 下载地址&#xff1a;Html 转 word 批量处理工具…

基于SpringBoot vue3 的山西文旅网java网页设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

curses函数库简介及使用

curses函数库简介及使用 导语curses简介屏幕输出读取清除移动字符 键盘键盘模式输入 窗口WINDOW常用函数屏幕刷新优化 子窗口keypad彩色显示pad总结参考文献 导语 curses函数库主要用来实现对屏幕和光标的操作&#xff0c;它的功能定位处于简单文本行程序和完全图形化界面之间…

Prompt 模版解析:诗人角色的创意引导与实践

Prompt 模版解析&#xff1a;诗人角色的创意引导与实践 Prompt 模版作为一种结构化工具&#xff0c;旨在为特定角色——本例中的“诗人”——提供明确的指导和框架。这一模版详尽地描绘了诗人的职责、擅长的诗歌形式以及创作规则&#xff0c;使其能在自动化系统中更加精确地执…

[C#]C# winform部署yolov11-pose姿态估计onnx模型

【算法介绍】 在C# WinForms应用中部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务。YOLOv11-Pose结合了YOLO&#xff08;You Only Look Once&#xff09;的高效物体检测算法和Pose Estimation&#xff08;姿态估计&#xff09;专注于识别人体关键点的能力&#xff0…

【Nacos架构 原理】内核设计之Nacos寻址机制

文章目录 前提设计内部实现单机寻址文件寻址地址服务器寻址 前提 对于集群模式&#xff0c;集群内的每个Nacos成员都需要相互通信。因此这就带来一个问题&#xff0c;该以何种方式去管理集群内部的Nacos成员节点信息&#xff0c;即Nacos内部的寻址机制。 设计 要能够感知到节…

LeetCode讲解篇之695. 岛屿的最大面积

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历二维矩阵&#xff0c;如果当前格子的元素为1进行深度优先搜索&#xff0c;将搜索过的格子置为0&#xff0c;防止重复访问&#xff0c;然后对继续深度优先搜索上下左右中为1的格子 题解代码 func maxAr…

Redis实现每日签到(大数据量)

PHP语言使用Redis NoSQL服务器二进制数据类型实现大数据情况下签到功能 目录 问题 解决方式 封装签到类 功能调用 总结 问题 实现用户每日签到功能不难&#xff0c;但随着用户量上升之后&#xff0c;不论是存储还是判断对数据量来说都很麻烦&#xff1b;假如每天有100万用…

探索Spring Boot:实现“衣依”服装电商平台

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

通过 LLMs 自动探索量化投资策略

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a; 本文提出了一个利用大型语言模型&#xff08;LLMs&#xff09;和多代理架构的新框架&#xff0c;用于量化股票投资和投资组合管理。该框架通过整合LLMs生成多样化的al…

【Unity】unity安卓打包参数(个人复习向/有不足之处欢迎指出/侵删)

1.Texture Compression 纹理压缩 设置发布后的纹理压缩格式 Use Player Settings:使用在播放器设置中设置的纹理压缩格式 ETC&#xff1a;使用ETC格式&#xff08;兼容&#xff09; ETC2&#xff1a;使用ETC2格式&#xff08;很多设备不支持&#xff09; ASTC&#xff1a;使用…

TypeScript:装饰器

一、简介 随着TypeScript和ES6里引入了类&#xff0c;在一些场景下我们需要额外的特性来支持标注或修改类及其成员。 装饰器&#xff08;Decorators&#xff09;为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。 Javascript里的装饰器目前处在 建议征集的第二阶…

Hadoop大数据入门——Hive-SQL语法大全

Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法&#xff0c;在语法描述中出现&#xff1a; []&#xff0c;表示可选&#xff0c;如上[LOCATI…

大模型项目如何判断用RAG还是微调

大模型项目如何判断用RAG还是微调 在大模型项目中&#xff0c;选择使用检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;还是微调&#xff08;Fine-Tuning&#xff09;取决于多个因素&#xff0c;包括项目的具体需求、数据的可用性、性能要求、成本和…