python爬虫 - 初识requests模块

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

目录

前言

一、主要功能和特点

二、安装requests库

(一)使用 pip 安装

(二)检查安装是否成功

(三)版本管理

三、发起网络请求

(一)发送 GET 请求

(二)发送 POST 请求

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

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

四、requests库常用属性

(一)response.status_code

(二)response.text

(三)response.json()

(四)response.content

(五)response.headers

(六)response.url

(七)response.cookies

(八)response.history

(九)response.encoding

五、text与content方法的区别

(一)response.text

(二)response.content

(三)区别总结


前言

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

评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值