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

多级页面爬取

📍 本课路径50 分钟 · 3 个目标
  1. 设计列表到详情的两级抓取
  2. 维护已抓取集合去重
  3. 合理并发提速
🎯 学习节奏:① 看目标 → ② 先思考再动手 → ③ 在运行器写代码 → ④ 失败时按提示重试 → ⑤ 通过后看思路

很多数据「列表页看概要、点进去才看全」。比如图书列表只显示书名,详情页才有作者、简介、评分。这就是两级爬取:先抓列表拿链接,再逐个进详情页抓细数据。

一、两级结构长这样

列表页  →  提取每条的详情链接  →  逐条请求详情页  →  解析细数据  →  合并

二、可运行:列表取链接 + 详情二次解析

下面模拟一个两级场景——先从列表抽链接和书名,再从「详情页」取作者,合并成完整记录:

三、用 set 去重

列表页之间常有重复条目(尤其翻页重叠)。用 set 存已抓过的链接,遇到重复就跳过:

四、并发提速(进阶)

详情页一多,串行请求会很慢。可用线程池并发(本地运行):

from concurrent.futures import ThreadPoolExecutor
import requests

def fetch_detail(url):
    return requests.get(url, timeout=5).text

with ThreadPoolExecutor(max_workers=5) as pool:
    details = pool.map(fetch_detail, detail_urls)

并发不是越快越好——max_workers 别太大,配合 time.sleep 才礼貌。

五、小结

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