Python requests 模块详解
                           
天天向上
发布: 2025-03-18 00:27:36

原创
982 人浏览过

requests 是 Python 中用于发送 HTTP 请求的强大库,常用于 爬取网页、访问 API、提交数据 等任务。它比 urllib 更加简单易用,并支持 自动处理 Cookies、Session、超时、SSL 证书验证等 功能。

在本指南中,我们将详细解析 requests 模块的 安装、基本用法、进阶功能、异常处理,并结合实际案例帮助你更好地掌握它。


1. 安装 requests

在使用 requests 之前,需要先安装它:

pip install requests

或者使用国内镜像:

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功后,可以在 Python 中导入:

import requests

2. 发送 HTTP 请求

requests 模块支持 GET、POST、PUT、DELETE 等 HTTP 方法。

2.1 发送 GET 请求

GET 方法用于从服务器获取数据:

import requests

url = "https://jsonplaceholder.typicode.com/posts/1"
response = requests.get(url)

print(response.status_code)  # 输出 HTTP 状态码
print(response.text)         # 输出响应内容

GET 请求的参数

params = {"userId": 1}
response = requests.get("https://jsonplaceholder.typicode.com/posts", params=params)
print(response.url)  # 输出最终 URL

请求 URL:

https://jsonplaceholder.typicode.com/posts?userId=1

2.2 发送 POST 请求

POST 方法用于提交数据,例如 表单提交、API 交互

data = {"title": "foo", "body": "bar", "userId": 1}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)

print(response.status_code)  # 201 表示成功创建
print(response.json())       # 解析 JSON 响应

提交表单数据

data = {"username": "admin", "password": "123456"}
response = requests.post("https://httpbin.org/post", data=data)

print(response.json())  # 服务器返回的 JSON 数据

2.3 发送 PUT 请求

更新服务器上的资源:

update_data = {"title": "updated title"}
response = requests.put("https://jsonplaceholder.typicode.com/posts/1", json=update_data)
print(response.json())

2.4 发送 DELETE 请求

删除服务器上的资源:

response = requests.delete("https://jsonplaceholder.typicode.com/posts/1")
print(response.status_code)  # 200 或 204 表示删除成功

3. 处理 HTTP 响应

3.1 获取 HTTP 响应信息

response = requests.get("https://jsonplaceholder.typicode.com/posts/1")

print(response.status_code)  # HTTP 状态码
print(response.headers)      # 服务器响应头信息
print(response.text)         # 原始 HTML/JSON 响应
print(response.json())       # 解析 JSON 数据

3.2 常见 HTTP 状态码

状态码含义
200请求成功
201资源创建成功(POST 请求)
301永久重定向
302临时重定向
400客户端请求错误
401未授权访问
403禁止访问
404资源未找到
500服务器内部错误

检查请求是否成功

if response.status_code == 200:
    print("请求成功")
elif response.status_code == 404:
    print("资源不存在")

4. 处理 Cookies

4.1 获取 Cookies

response = requests.get("https://httpbin.org/cookies")
print(response.cookies)  # 输出服务器返回的 Cookies

4.2 发送带 Cookies 的请求

cookies = {"session_id": "123456"}
response = requests.get("https://httpbin.org/cookies", cookies=cookies)
print(response.text)

5. 自定义请求头(Headers)

许多网站会检测 User-Agent,防止爬虫:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
response = requests.get("https://www.example.com", headers=headers)
print(response.text)

6. 处理重定向

默认情况下,requests 会自动跟随 301/302 重定向:

response = requests.get("http://github.com", allow_redirects=True)
print(response.url)  # 显示最终跳转后的 URL

禁止重定向

response = requests.get("http://github.com", allow_redirects=False)
print(response.status_code)  # 301 或 302
print(response.headers["Location"])  # 获取重定向目标地址

7. 代理(防止 IP 封禁)

使用代理可以绕过网站封禁:

proxies = {
    "http": "http://your-proxy.com:8080",
    "https": "https://your-proxy.com:8080",
}
response = requests.get("https://www.example.com", proxies=proxies)
print(response.text)

获取免费代理:免费代理 IP


8. 超时与异常处理

避免请求长时间挂起:

try:
    response = requests.get("https://www.example.com", timeout=5)
    print(response.status_code)
except requests.Timeout:
    print("请求超时")
except requests.ConnectionError:
    print("连接失败")
except requests.RequestException as e:
    print(f"请求异常: {e}")

9. Session(模拟登录)

使用 requests.Session() 维持会话:

session = requests.Session()

# 先登录
login_data = {"username": "admin", "password": "123456"}
session.post("https://www.example.com/login", data=login_data)

# 访问需要登录的页面
response = session.get("https://www.example.com/dashboard")
print(response.text)

10. requests 在爬虫中的应用

10.1 获取网页 HTML

response = requests.get("https://www.example.com")
html = response.text

10.2 爬取 robots.txt

检查网站的爬取规则:

response = requests.get("https://www.example.com/robots.txt")
print(response.text)

10.3 避免被封

  • 使用 User-Agent 伪装浏览器
  • 使用 Session 维持会话
  • 使用 proxies 代理 IP
  • 限制请求频率(time.sleep()

总结

功能代码示例
发送 GET 请求requests.get(url)
发送 POST 请求requests.post(url, data={})
自定义 Headersrequests.get(url, headers={})
处理 Cookiesrequests.get(url, cookies={})
代理requests.get(url, proxies={})
超时requests.get(url, timeout=5)

requests 是 Python 网络编程中最常用的库,适用于爬虫、API 调用、数据抓取等场景!

发表回复 0

Your email address will not be published. Required fields are marked *