单元 2 · 数据解析 — 预计 45 分钟

BeautifulSoup 解析

📍 本课路径45 分钟 · 4 个目标
  1. 用 BeautifulSoup 解析 HTML
  2. 用 find / find_all / select 定位元素
  3. 遍历父子与兄弟节点
  4. 正确提取文本与属性
🎯 学习节奏:① 看目标 → ② 先思考再动手 → ③ 在运行器写代码 → ④ 失败时按提示重试 → ⑤ 通过后看思路

拿到网页字符串只是开始,真正的功夫在解析——把杂乱的 HTML 变成你能按规则提取数据的结构。BeautifulSoup(BS4)是 Python 里最友好的解析库。

一、解析器怎么选

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")   # Python 内置,零依赖
soup = BeautifulSoup(html, "lxml")          # 更快,需装 lxml(推荐)

教程统一用 "lxml"(快),它也能解析不规范的 HTML。下面所有示例都基于它。

二、三种定位方式

  1. 按标签名:soup.find('title') 找第一个,soup.find_all('a') 找全部。
  2. 按属性:soup.find('div', class_='book')(class 要写成 class_,因为 class 是 Python 关键字)。
  3. CSS 选择器(最常用):soup.select('div.book > span.title') 返回列表,select_one 返回单个。

下面需要你补全提取逻辑——给定一段图书列表 HTML,用 CSS 选择器取出每本书的书名和价格:

三、遍历节点树

HTML 是树,BS4 让你上下左右走:

提取文字用 .get_text(),不要直接 str(tag)——后者会把标签也带进去。

四、属性与文本的正确姿势

再来一个练习,这次链接文字前后有多余空格和换行,你需要正确清洗:

五、BS4 vs lxml/XPath

六、小结

本页底部「代码实战」让你在靶站上完成一次真实提取。