Python Requests模块简介
Requests 是 Python 中一个优雅而简单的 HTTP 库,专门为人类设计。它允许你发送 HTTP/1.1 请求,无需手动添加查询字符串到 URL,或表单编码 POST 数据。
注意: 在开始使用 Requests 之前,需要先安装它。可以使用 pip 命令:pip install requests
基本用法
发送 GET 请求
GET 请求是最常见的 HTTP 请求类型,用于从服务器获取数据。
import requests
# 发送 GET 请求
response = requests.get('https://api.github.com')
# 检查请求是否成功
if response.status_code == 200:
print('请求成功!')
print('响应内容:', response.text)
else:
print('请求失败,状态码:', response.status_code)
发送 POST 请求
POST 请求通常用于向服务器提交数据,如表单数据。
import requests
# 准备要发送的数据
data = {
'username': 'testuser',
'password': 'testpass'
}
# 发送 POST 请求
response = requests.post('https://httpbin.org/post', data=data)
# 查看响应
print('状态码:', response.status_code)
print('响应内容:', response.json())
请求参数
在发送请求时,可以传递各种参数来定制请求。
URL 参数
可以使用 params 参数传递 URL 查询参数。
import requests
# 定义 URL 参数
params = {
'key1': 'value1',
'key2': 'value2'
}
# 发送带参数的 GET 请求
response = requests.get('https://httpbin.org/get', params=params)
print('请求的 URL:', response.url)
print('响应内容:', response.json())
请求头
可以使用 headers 参数设置请求头。
import requests
# 定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json'
}
# 发送带自定义请求头的请求
response = requests.get('https://httpbin.org/headers', headers=headers)
print('响应内容:', response.json())
处理响应
Requests 提供了多种方式来处理服务器响应。
响应内容
可以使用不同的属性获取响应内容:
import requests
response = requests.get('https://api.github.com')
# 获取响应文本内容
print('文本内容:', response.text)
# 获取二进制内容
print('二进制内容:', response.content)
# 获取 JSON 内容(如果响应是 JSON 格式)
print('JSON 内容:', response.json())
# 获取原始响应
print('原始响应:', response.raw)
响应状态码和头信息
import requests
response = requests.get('https://api.github.com')
# 获取状态码
print('状态码:', response.status_code)
# 获取响应头
print('响应头:', response.headers)
# 获取特定响应头
print('Content-Type:', response.headers.get('Content-Type'))
注意: 在实际应用中,应该总是检查状态码,确保请求成功后再处理响应内容。
高级功能
会话对象
使用会话对象可以在多个请求之间保持某些参数,如 cookies。
import requests
# 创建会话对象
session = requests.Session()
# 设置会话级别的参数
session.headers.update({'User-Agent': 'MyApp/1.0'})
# 使用会话发送请求
response1 = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
response2 = session.get('https://httpbin.org/cookies')
print('第二个请求的 cookies:', response2.json())
超时设置
可以为请求设置超时时间,避免长时间等待。
import requests
try:
# 设置超时时间为 3 秒
response = requests.get('https://httpbin.org/delay/5', timeout=3)
print('请求成功')
except requests.exceptions.Timeout:
print('请求超时')
错误处理
Requests 提供了多种异常类来处理不同类型的错误。
import requests
from requests.exceptions import Timeout, ConnectionError, HTTPError
try:
response = requests.get('https://httpbin.org/status/404', timeout=5)
response.raise_for_status() # 如果状态码不是 200,将抛出 HTTPError 异常
except Timeout:
print('请求超时')
except ConnectionError:
print('连接错误')
except HTTPError as e:
print(f'HTTP 错误: {e}')
else:
print('请求成功')
实际应用示例
获取网页内容并提取信息
import requests
from bs4 import BeautifulSoup
# 获取网页内容
response = requests.get('https://httpbin.org/html')
# 检查请求是否成功
if response.status_code == 200:
# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 提取标题
title = soup.find('h1')
if title:
print('页面标题:', title.get_text())
else:
print('请求失败,状态码:', response.status_code)
下载文件
import requests
# 下载文件
url = 'https://httpbin.org/image/jpeg'
response = requests.get(url, stream=True)
# 检查请求是否成功
if response.status_code == 200:
# 以二进制模式打开文件
with open('image.jpg', 'wb') as f:
# 分块写入文件
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print('文件下载完成')
else:
print('下载失败,状态码:', response.status_code)