你从 W2 就在调大模型 API——今天揭开它底层的面纱:HTTP 请求-响应模型。 然后用 requests 调真实 API、爬真实网页,并回答一个 AI 回答不了的问题:该不该爬?
| 时间 | 环节 | 要点 |
|---|---|---|
| 0–10 | HTTP 模型 | 请求四要素 / 响应三要素 / 状态码口诀(2xx 你对 4xx 你错 5xx 服务器错) |
| 10–22 | F12 实测 | 打开网站 Network 面板:找请求、看响应——原来 chat.completions 就是 POST |
| 22–36 | requests 五分钟 | get/params/headers/timeout;json() 解析;错误三连处理 |
| 36–48 | 动手练习 | 运行场:探索无文档 API 响应结构 + .get() 安全取值 |
| 48–60 | 三个真实 API | 天气 / 名言 / 假数据——不同结构逐层提取 |
| 60–72 | 爬虫三步 | requests 拿 HTML → BeautifulSoup 解析 → select 提取;CSS 选择器速记 |
| 72–84 | 靶场演示 | quotes.toscrape.com 爬名言+作者+标签 |
| 84–94 | 伦理三问 | 能不能爬(robots)/ 该不该爬(频率)/ 用来干什么——只有人能回答 |
| 94–100 | 小测 | 随堂小测 3 题 |
伦理三问没有标准答案——讨论比结论重要。
打开任意网站 → F12 → Network → 刷新:
GET /v1/now?city=beijing HTTP/1.1 # ← 请求行
Host: api.weather.cn
User-Agent: Mozilla/5.0 ... # ← 你是谁(爬虫要伪装的就是它)
HTTP/1.1 200 OK # ← 响应:成功
Content-Type: application/json
{"city": "北京", "temp": "26℃", "aqi": 42} # ← JSON:字典的模样
client.chat.completions.create() 底层就是一个 HTTP POST——
openai SDK 只是帮你把 HTTP 细节包装好了。
import requests
resp = requests.get(
"https://api.example.com/now",
params={"city": "beijing"}, # 查询参数自动拼接
headers={"Authorization": "Bearer sk-..."}, # 认证放请求头
timeout=10, # 一定要设超时!
)
resp.status_code # 200
data = resp.json() # JSON 响应 → Python 字典
data["temp"] # 逐层取值
真实场景:拿到了响应,但没文档——先探索结构,再取值:
三步流程,核心代码只有五行:
from bs4 import BeautifulSoup
import requests
html = requests.get("https://quotes.toscrape.com", timeout=10).text
soup = BeautifulSoup(html, "html.parser")
for q in soup.select("span.text"): # CSS 选择器:class="text" 的 span
print(q.get_text()[:30])
.class / #id / tag——F12 右键检查定位元素域名/robots.txt 看是否允许;尊重网站条款与个人信息保护法。time.sleep()、避开高峰——你的每次请求都是别人的服务器成本。课堂演示过请求过快被封 IP 的真实案例。深入阅读:M3 模块页 · 经典笔记 12.1 Web 概念 · 13.5 数据接口爬取