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

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 requests

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

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

(三)版本管理

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

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

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

pip install --upgrade requests

三、发起网络请求

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

(一)发送 GET 请求

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

import requests

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

(二)发送 POST 请求

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

import requests

url = '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 requests

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

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

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

(二)response.content

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

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

示例:

import requests

response = 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 requests

response = requests.get('https://example.com')

# 通过 .text 获取解码后的文本
print(response.text)  # 这是一个已解码的字符串

# 通过 .content 获取原始的字节数据
print(response.content)  # 这是一个字节流

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


http://www.kler.cn/news/336090.html

相关文章:

  • 民锋金融:稳健发展的战略与未来展望
  • 代码随想录Day 62|Floyd 算法精讲、A \* 算法精讲 (A star算法),题目:97. 小明逛公园、127. 骑士的攻击
  • 关于BSV区块链覆盖网络的常见问题解答(下篇)
  • CRM如何和ERP融合,才能打破信息孤岛效应。
  • vite学习教程05、vite+vue2构建本地 SVG 图标
  • 基于SSM的出租车租赁管理系统的设计与实现
  • OpenGL ES 着色器(5)
  • 一款完全开源并免费的监测与分析系统,支持监测,预警,分析,报告,支持本地化部署(附源码)
  • Golang | Leetcode Golang题解之第458题可怜的小猪
  • P1387 最大正方形
  • Leetcode——数组:二分搜索法704.二分查找相似题目
  • 自动驾驶-问题笔记-待解决
  • Final Glory推出“荣耀勋章-神龙”,推动游戏叙事范式发展
  • 微信小程序处理交易投诉管理,支持多小程序
  • 【并发】ThreadLocalMap 解决 Hash 冲突的实现方式
  • 使用百度文心智能体创建多风格表情包设计助手
  • mmdetection实战,训练自己的数据集
  • ROS中显示标记教程
  • [C语言]指针和数组
  • 分层解耦-01.三层架构