Python requests模块 快速入门 这篇就够了
目录
一、Requests概述
二、安装Requests
三、Get请求
3.1 Get请求示例
3.2 Get请求爬取二进制数据
四、Post请求
4.1 Post请求示例
4.2 发送JSON数据
五、验证Cookies
六、会话请求
一、Requests概述
Requests是一个流行的Python第三方库,它专为HTTP通信而设计,旨在使网络请求更加简单和人性化。以下是关于Requests的概述:
- 简单易用:Requests提供了简洁明了的API,使得发送HTTP请求变得非常直观。与Python标准库中的urllib相比,Requests的语法更加简洁,易于学习和使用。
- 功能全面:Requests支持HTTP的所有主要方法,如GET、POST、PUT、DELETE等。它还支持设置请求头、请求体、超时时间、代理等。此外,Requests还支持会话保持、文件上传、自动内容解码和JSON解析等功能。
- 自动化处理:Requests库内部处理了许多底层的细节,如连接池管理、Keep-alive连接、URL编码等,使得开发者可以专注于业务逻辑而无需关心底层的HTTP通信细节。
- 良好的文档和社区支持:Requests拥有详尽的官方文档和活跃的社区,这意味着开发者可以轻松地找到问题的答案或获得帮助。
- 兼容性:Requests库在Python 2和Python 3中都可以使用,并且与许多其他Python库和框架兼容。
- 安全:Requests在处理HTTPS请求时提供了SSL验证和证书管理功能,确保通信的安全性。
二、安装Requests
确保你已经安装了Requests库。如果还没有安装,可以使用pip进行安装
pip install requests
三、Get请求
3.1 Get请求示例
这个示例中,我们定义了请求的URL、查询参数和请求头。然后,我们使用requests.get()
方法发送GET请求,并获取响应对象。接着,我们检查响应的状态码以确保请求成功,并输出请求的URL、状态码和响应内容。如果服务器返回的是JS ON数据,我们还尝试解析它并打印出来。
请注意,你需要将url
、params
和headers
替换为你实际要发送请求的目标URL、查询参数和请求头信息。此外,处理响应时,你可能需要根据实际情况调整代码,以正确处理服务器返回的数据。
示例:
import requests
# 定义请求的URL
url = 'https://www.baidu.com'
# 定义查询参数
params = {
'key1': 'shenghao',
'key2': 'haozi'
}
# 定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 发送GET请求
response = requests.get(url, params=params, headers=headers)
# 检查请求是否成功
if response.status_code == 200:
# 输出请求URL
print('请求URL:', response.url)
# 输出响应状态码
print('状态码:', response.status_code)
# 输出响应内容(文本格式)
print('文本响应内容:', response.text)
# 如果你知道服务器返回的是JSON数据,可以解析它
try:
data = response.json()
print('JSON响应内容:', data)
except ValueError:
print('响应内容不是有效的JSON格式')
else:
# 如果请求失败,打印错误信息
print('请求失败,状态码:', response.status_code)
print('错误信息:', response.reason)
# 你还可以获取其他响应信息,如编码方式和内容长度
print('响应编码:', response.encoding)
print('内容长度:', len(response.content))
3.2 Get请求爬取二进制数据
使用 Requests 库从 URL 下载二进制数据(例如,一个图片文件)
示例:
import requests
# 图片文件的URL
url = 'https://www.baidu.com/img/bd_logo1.png'
# 发送GET请求,获取二进制响应内容
response = requests.get(url, stream=True)
# 检查请求是否成功
if response.status_code == 200:
# 以二进制格式打开本地文件用于写入
with open('image.jpg', 'wb') as file:
# 使用iter_content方法按块读取响应内容,减少内存使用
for chunk in response.iter_content(chunk_size=8192):
if chunk: # 过滤掉空块
file.write(chunk)
print('图片下载成功!')
else:
print('请求失败,状态码:', response.status_code)
四、Post请求
4.1 Post请求示例
示例:
import requests
# 定义请求的URL
url = 'https://httpbin.org/post'
# 定义要提交的表单数据
form_data = {
'username': 'shenghao',
'password': 'haozi'
}
# 设置请求头,通常不需要特别设置,但有时候可能需要
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
# 发送POST请求
response = requests.post(url, data=form_data, headers=headers)
# 检查请求是否成功
if response.status_code == 200:
# 输出响应内容
print('请求成功!')
print('响应内容:', response.text)
else:
# 如果请求失败,打印错误信息
print('请求失败,状态码:', response.status_code)
print('错误信息:', response.reason)
# 还可以打印出服务器返回的错误信息,如果有的话
if response.text:
print('服务器返回的错误信息:', response.text)
4.2 发送JSON数据
通过POST请求发送JSON数据,你需要设置Content-Type
头为application/json
,并将数据编码为JSON格式
示例:
import requests
import json
# 定义请求的URL
url = 'https://httpbin.org/post'
# 定义要提交的JSON数据
json_data = {
'username': 'shenghao',
'password': 'haozi'
}
# 将Python字典转换为JSON字符串
json_string = json.dumps(json_data)
# 设置请求头
headers = {
'Content-Type': 'application/json'
}
# 发送POST请求
response = requests.post(url, data=json_string, headers=headers)
# 检查请求是否成功
if response.status_code == 200:
# 输出响应内容
print('请求成功!')
print('响应内容:', response.json()) # 假设服务器返回的是JSON格式的数据
else:
# 如果请求失败,打印错误信息
print('请求失败,状态码:', response.status_code)
print('错误信息:', response.reason)
# 还可以打印出服务器返回的错误信息,如果有的话
if response.text:
print('服务器返回的错误信息:', response.text)
五、验证Cookies
使用cookies进行登录验证通常涉及以下步骤:
- 通过用户名和密码发送登录请求到服务器。
- 服务器验证用户名和密码,如果验证成功,会设置一个或多个cookies,并将其发送给客户端。
- 客户端在接下来的请求中携带这些cookies,以证明用户的登录状态。
示例:
import requests
# 登录URL
login_url = 'https://httpbin.org/post'
# 目标URL(需要登录后才能访问)
target_url = 'https://example.com/protected-resource'
# 登录时所需的数据
login_data = {
'username': 'shenghao',
'password': 'haozi'
}
# 第一步:发送登录请求
login_response = requests.post(login_url, data=login_data)
# 假设登录成功,服务器会设置cookies
# 我们从登录响应中获取这些cookies
if login_response.status_code == 200:
# 获取cookies
cookies = login_response.cookies.get_dict()
# 第二步:使用获取到的cookies发送请求到目标URL
target_response = requests.get(target_url, cookies=cookies)
# 打印目标URL的响应内容
print(target_response.text)
else:
print("登录失败,状态码:", login_response.status_code)
六、会话请求
Session
对象提供了一种方式来跨多个请求保持某些参数和cookies。当你需要向同一网站发送多个请求,并且这些请求之间需要共享某些状态(比如cookies或认证信息)时,使用Session
是非常有用的。
示例:
import requests
# 创建一个Session对象
s = requests.Session()
# 使用Session对象发送第一个请求(例如登录)
login_url = 'https://httpbin.org/post'
login_data = {'username': 'shenghao', 'password': 'haozi'}
login_response = s.post(login_url, data=login_data)
# 检查登录是否成功
if login_response.status_code == 200:
print('登录成功!')
else:
print('登录失败,状态码:', login_response.status_code)
# 发送第二个请求(需要身份验证的资源)
protected_url = 'https://httpbin.org/get'
protected_response = s.get(protected_url)
# 由于Session对象自动处理cookies,所以不需要手动设置cookies
# 检查受保护资源的请求是否成功
if protected_response.status_code == 200:
print('访问受保护资源成功!')
print('响应内容:', protected_response.text)
else:
print('访问受保护资源失败,状态码:', protected_response.status_code)
# 关闭Session(可选,因为Session对象会在Python对象被垃圾回收时自动关闭)
s.close()