下载工作台
Python 编程实战

第三方库:requests 与数据处理

试读上半部分 · 解锁后可读全文

第 11 章 · requests 与 CSV 数据处理

本章目标:使用 requests 调用 REST API(如 https://api.example.com 教学端点);处理超时、状态码与 JSON 响应;用标准库 csv 读写表格数据;完成 shop-demo 商品导入导出与简易报表;了解 pandas 为选修扩展。

学时建议:4~5 小时(含 1.5 小时跟练)

前置ch10 虚拟环境与 pip;ch09 json。


11.1 安装与第一个请求

# 在 py-learn 或项目 .venv 中
pip install requests
import requests

resp = requests.get("https://api.example.com/health", timeout=5)
print(resp.status_code)
print(resp.text)
参数说明
timeout秒,避免无限等待
headers自定义请求头
params查询字符串
json=POST JSON 体

11.2 GET 与查询参数

url = "https://api.example.com/books"
params = {"page": 1, "limit": 10, "q": "python"}

resp = requests.get(url, params=params, timeout=10)
resp.raise_for_status()          # 4xx/5xx 抛 HTTPError

data = resp.json()
for item in data.get("items", []):
    print(item["title"], item.get("price"))
状态码含义
200成功
201已创建
400客户端错误
401/403未授权/禁止
404未找到
500服务器错误
try:
    resp = requests.get(url, timeout=5)
    resp.raise_for_status()
except requests.Timeout:
    print("请求超时")
except requests.HTTPError as e:
    print("HTTP 错误", e.response.status_code)
except requests.RequestException as e:
    print("网络异常", e)

11.3 POST 与请求头

payload = {
    "user": "user-demo",
    "sku": "BK-001",
    "qty": 2,
}

headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    # "Authorization": "Bearer <token>",  # 真实项目从环境变量读取
}

resp = requests.post(
    "https://api.example.com/cart/items",
    json=payload,
    headers=headers,
    timeout=10,
)

切勿在教程代码中硬编码真实密钥;练习可用虚构 token 或本地 mock 服务。


11.4 Session 与连接复用

session = requests.Session()
session.headers.update({"User-Agent": "shop-demo/1.0"})

r1 = session.get("https://api.example.com/books")
r2 = session.get("https://api.example.com/categories")

多次请求同一主机时 Session 更高效,并可保持 Cookie。


11.5 本地 Mock(无公网时)

若无法访问外网,可用本地 JSON 文件模拟:

from pathlib import Path
import json

def mock_get_books():
    path = Path("fixtures/books.json")
    return json.loads(path.read_text(encoding="utf-8"))

fixtures/books.json

{
  "items": [
    {"sku": "BK-001", "title": "Python 基础", "price": 59.9},
    {"sku": "BK-002", "title": "Web 开发", "price": 79.0}
  ]
}

11.6 csv 模块读写

写入

import csv
from pathlib import Path

rows = [
    ["sku", "title", "price", "stock"],
    ["BK-001", "Python 基础", "59.9", "10"],
    ["BK-002", "Web 开发", "79.0", "5"],
]

path = Path("products.csv")
with open(path, "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(rows)

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。