如果你正在学习如何与网络交互,例如抓取网页、调用 API,或者向服务器发送数据,那么 Python 的 requests 模块就是你的不二之选。它功能强大、使用简单,是初学者和老手都非常喜爱的网络请求库。在这篇文章中,我将带你一步步了解 requests 的常用功能,并通过详细的代码示例,帮助你轻松上手。
requests 是一个用于发送 HTTP 请求的 Python 库。它提供了简洁的 API,让你可以轻松地与网页和服务器进行交互。例如,当你要从一个网站获取数据、提交表单或上传文件时,requests 都能帮你搞定。
• 简单易用:不需要像 urllib 那样处理复杂的参数和编码问题,直接使用简单的函数调用。
• 功能丰富:支持发送 GET、POST 等多种 HTTP 请求,还能处理会话保持、文件上传、SSL 认证等操作。
• 智能处理:requests 会自动处理 HTTP 请求的重定向、编码、Cookie 等,让你专注于核心逻辑。
在使用 requests 之前,你需要通过 pip 来安装它:
pip install requests
场景:你想从网页获取数据,例如抓取网页内容或者调用 API。
import requests
# 发起 GET 请求,获取网页或 API 数据
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# 打印返回的内容(页面的文本)
print(response.text)
场景:你需要向服务器发送数据,例如提交表单或者上传信息。
import requests
# 构造需要发送的数据
data = {'username': 'test', 'password': '123456'}
# 发起 POST 请求并提交数据
response = requests.post('https://jsonplaceholder.typicode.com/posts', data=data)
# 打印响应的状态码,200 表示请求成功
print(response.status_code)
解释:requests.post() 用于向服务器发送数据,常用于提交表单、上传文件等操作。data 参数是需要传递的数据,服务器会处理这些数据并返回相应的响应。
场景:API 返回的通常是 JSON 格式的数据,你需要将其转为字典方便处理。
import requests
# 向 API 发送 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# 将 JSON 响应解析为字典
json_data = response.json()
# 打印 JSON 数据
print(json_data)
场景:你想通过 URL 向服务器传递查询参数,比如根据条件获取特定内容。
import requests
# 构造查询参数
params = {'userId': 1}
# 发起带参数的 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
# 打印返回的内容
print(response.text)
场景:你需要将文件上传到服务器,比如上传图片或文档。
import requests
# 打开需要上传的文件
file = {'file': open('example.txt', 'rb')}
# 发起文件上传请求
response = requests.post('https://httpbin.org/post', files=file)
# 打印服务器响应内容
print(response.text)
场景:有时候,服务器需要你在请求中添加一些自定义信息(比如用户代理、认证信息等)。
import requests
# 自定义请求头
headers = {'User-Agent': 'Mozilla/5.0'}
# 发送带自定义头的 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers)
# 打印响应的文本内容
print(response.text)
解释:通过 headers 参数,你可以为请求添加自定义的头部信息。比如通过修改 User-Agent,可以伪装成浏览器访问网站。
场景:为了避免程序因请求卡住,你可以设置请求的超时时间。
import requests
try:
# 设置超时时间为 3 秒
response = requests.get('https://jsonplaceholder.typicode.com/posts', timeout=3)
print(response.text)
except requests.Timeout:
print("请求超时!")
解释:timeout 参数可以指定请求等待的时间,防止因网络问题导致请求卡住。当超过设定的时间后,会抛出 requests.Timeout 异常
场景:你需要在多个请求中保持登录状态,比如向同一个网站发起多次请求。
import requests
# 创建会话对象
session = requests.Session()
# 登录网站,保持会话
login_data = {'username': 'test', 'password': '123456'}
session.post('https://example.com/login', data=login_data)
# 使用会话对象发起其他请求
response = session.get('https://example.com/dashboard')
# 打印响应内容
print(response.text)
解释:使用 requests.Session(),可以在多个请求之间保持同一个会话(比如保存登录状态的 Cookie)。这非常适合需要模拟登录后的操作。
requests 模块为 Python 程序员提供了一个简洁、高效的工具,用于发起 HTTP 请求。不论是简单的 GET 请求、POST 提交数据,还是更复杂的文件上传、会话保持,requests 都能让你轻松应对。在现代 Web 开发和数据采集中,掌握 requests 模块是非常有用的技能。