单元 3 · 进阶爬取 — 预计 45 分钟

分页与翻页

📍 本课路径45 分钟 · 3 个目标
  1. 识别分页 URL 规律
  2. 循环遍历所有页面
  3. 控制请求频率防止误伤
🎯 学习节奏:① 看目标 → ② 先思考再动手 → ③ 在运行器写代码 → ④ 失败时按提示重试 → ⑤ 通过后看思路

单个列表页往往装不下全部数据,网站会用「分页」把它们拆成多页。爬虫要做的,就是找到翻页规律,把每一页都抓回来。

一、找分页 URL 规律

最常见的分页是 ?page=1?page=2……把页数换成变量即可:

base = "https://books.example.com/list"
for page in range(1, 6):          # 1 到 5 页
    url = f"{base}?page={page}"
    resp = requests.get(url, headers=headers, timeout=5)
    # ...解析这一页

有些站点用路径分页(/list/1/list/2),规律一样,只是拼法不同。先翻两三页,确认「变的是哪一段」。

二、可运行:循环解析多页并汇总

下面模拟 3 页 HTML 数据,你需要补全「逐页解析 + 汇总到一个列表」的逻辑:

三、控制请求频率

翻页意味着短时间内发很多请求,太快会被当成攻击。每页之间 sleep 一下:

import time

for page in range(1, 6):
    resp = requests.get(f"{base}?page={page}", timeout=5)
    # ...解析
    time.sleep(1)   # 每秒最多 1 个请求,对服务器友好

四、何时停手

两种常见终止条件:

while True:
    resp = requests.get(url, timeout=5)
    items = parse(resp.text)
    if not items:        # 空页,到底了
        break
    # ...收集
    if not has_next_page(resp.text):
        break
    url = next_page_url(resp.text)

五、小结

靶站实战:前往 /practice/level2-pagination/ 动手练习本课内容。