模块 1:Requests 库核心认知
什么是 Requests?(简单说:Python 第三方 HTTP 库,比内置 urllib 更简洁易用,一行代码就能发请求,是爬虫、调用 API 接口的「标配工具」)
Requests 能做什么?
- 发送 GET/POST/PUT/DELETE 等所有 HTTP 请求类型
- 处理请求头、Cookie、参数、文件上传
- 解析 JSON/HTML 响应数据
- 处理会话保持、代理、超时等实战场景
- 无需手动编码,新手也能 5 分钟上手
模块 2:Requests 库核心用法
(每个用法配「代码 + 注释 + 输入输出」,复制即可运行,先执行 pip install requests 安装库)
1. 基础 GET 请求(爬取数据 / 调用公开接口)
GET 是最常用的请求方式,适合获取数据(如天气、新闻、商品信息)
import requests
# 目标接口:获取北京天气(公开免费接口)
url = "https://api.vvhan.com/api/weather"
# 请求参数(字典形式,自动拼接成 URL 参数)
params = {
"city": "北京"
}
# 发送 GET 请求
response = requests.get(url, params=params)
# 核心响应信息解析
print("响应状态码:", response.status_code) # 200 表示成功
print("响应编码:", response.encoding) # 自动识别编码
print("响应头:", response.headers["Content-Type"]) # 查看返回数据类型
# 解析 JSON 响应(接口返回的核心数据)
if response.status_code == 200:
result = response.json() # 直接转成 Python 字典,比 json.loads 更方便
print("北京今日天气:", result["data"]["weather"])
print("今日温度:", result["data"]["temp"])
else:
print("请求失败,状态码:", response.status_code)
# 输出示例:
# 响应状态码: 200
# 响应编码: utf-8
# 响应头: application/json;charset=UTF-8
# 北京今日天气: 晴
# 今日温度: -5~8℃
2. 基础 POST 请求(提交数据 / 登录 / 表单)
POST 适合提交数据(如登录、提交表单、上传数据),参数放在请求体中更安全
import requests
# 测试接口(模拟表单提交,仅演示用法)
url = "https://httpbin.org/post"
# 提交的数据(表单格式)
data = {
"username": "python_user",
"password": "123456",
"age": 25
}
# 发送 POST 请求
response = requests.post(url, data=data)
# 解析响应(httpbin 会返回提交的所有数据,便于测试)
if response.status_code == 200:
result = response.json()
print("提交的表单数据:", result["form"])
else:
print("请求失败")
# 输出示例:
# 提交的表单数据: {'age': '25', 'password': '123456', 'username': 'python_user'}
3. 读写 JSON 接口(前后端交互高频)
直接发送 JSON 格式数据,替代传统表单提交,是接口开发的主流方式
import requests
url = "https://httpbin.org/post"
# JSON 格式的请求体
json_data = {
"name": "张三",
"hobbies": ["编程", "爬山"],
"is_vip": True
}
# 用 json 参数自动序列化并设置 Content-Type 为 application/json
response = requests.post(url, json=json_data)
if response.status_code == 200:
result = response.json()
print("JSON 请求体:", result["json"])
# 输出示例:
# JSON 请求体: {'hobbies': ['编程', '爬山'], 'is_vip': True, 'name': '张三'}
4. 下载文件(图片 / 视频 / 文档)
import requests
# 目标文件:一张 Python 图标
url = "https://www.wsisp.com/helps/wp-content/uploads/2026/01/20260126140928-69777598c0953.png"
# 流式下载(避免大文件占满内存)
response = requests.get(url, stream=True)
if response.status_code == 200:
# 写入本地文件
with open("python_logo.png", "wb") as f:
for chunk in response.iter_content(chunk_size=1024): # 分块读取
f.write(chunk)
print("文件下载完成!")
else:
print("下载失败")
模块 3:实战踩坑指南(新手必看)
(解决 90% 的 Requests 实战问题)
❌ 坑 1:请求被拒绝 / 403 错误 → ✅ 解决方案:添加请求头模拟浏览器
很多网站会拦截程序请求,需伪装成浏览器
import requests
url = "https://www.baidu.com"
# 请求头(核心是 User-Agent,模拟 Chrome 浏览器)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
print("请求状态码:", response.status_code) # 200 成功
❌ 坑 2:中文乱码 → ✅ 解决方案:手动指定编码
response = requests.get(url)
response.encoding = "utf-8" # 强制设置编码,优先于自动识别
print(response.text) # 正常显示中文
❌ 坑 3:请求超时 / 卡死 → ✅ 解决方案:设置超时时间
# 设置 5 秒超时,超过则抛出异常
try:
response = requests.get(url, timeout=5)
except requests.exceptions.Timeout:
print("请求超时!")
❌ 坑 4:HTTPS 证书错误 → ✅ 解决方案:忽略证书验证
# 适合内网/测试环境,生产环境不建议
response = requests.get(url, verify=False)
❌ 坑 5:嵌套接口数据解析报错 → ✅ 解决方案:逐层判断 + 异常捕获
result = response.json()
# 避免键不存在报错
city = result.get("data", {}).get("city", "未知城市")
print("城市:", city)
模块 4:进阶用法(提升实战能力)
1. 会话保持(模拟登录后持续操作)
import requests
# 创建会话对象,自动保持 Cookie
session = requests.Session()
# 第一步:登录(模拟)
login_url = "https://httpbin.org/post"
login_data = {"username": "admin", "password": "123456"}
session.post(login_url, data=login_data)
# 第二步:访问需要登录的页面(会话自动携带 Cookie)
profile_url = "https://httpbin.org/get"
response = session.get(profile_url)
print("会话 Cookie:", session.cookies)
2. 使用代理(隐藏 IP / 突破地域限制)
import requests
url = "https://httpbin.org/ip"
# 代理配置(替换为自己的代理地址)
proxies = {
"http": "http://127.0.0.1:7890",
"https": "https://127.0.0.1:7890"
}
response = requests.get(url, proxies=proxies)
print("当前 IP:", response.json()["origin"])
网硕互联帮助中心





评论前必须登录!
注册