云计算百科
云计算领域专业知识百科平台

实战必备!Python Requests 库一键搞定网络请求

模块 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"])

总结

  • Requests 是 Python 处理网络请求的「首选库」,覆盖 GET/POST 等所有常用请求类型,语法简洁远超内置 urllib;
  • 核心避坑点:伪装请求头、设置超时、处理编码、逐层解析嵌套数据,能解决新手 90% 的实战问题;
  • 进阶用法(会话保持、代理)是爬虫 / 接口开发的必备技能,可根据实际场景灵活扩展。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 实战必备!Python Requests 库一键搞定网络请求
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!