04Bread Browser · 第 5 章
总进度 26 / 33

采集引言并整理成 JSON

上一章通过登录练习了多步操作。这一章继续加入读取正文和整理结果,完成一项数据采集任务:

2026-09-28约 50 分钟430 行代码难度 ★★★

如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。

1. 从操作页面到收集完整数据

上一章通过登录练习了多步操作。这一章继续加入读取正文和整理结果,完成一项数据采集任务:

"去 quotes.toscrape.com 把 humor 标签下所有引言抓下来,存成 JSON。"

要做的事:

  1. 找到 humor 标签的链接
  2. 点进去
  3. 读出页面里所有引言(不止 1 条)
  4. 读出每条引言的作者
  5. 把数据组装成 JSON 返回

挑战:

  • 引言不是 button 不是 a ——它们是普通 <span>。ch03 的 click/type 工具读不到
  • 需要 agent 自己拼装结构化数据

ch04 加 3 个工具来解决:

工具用途
extract_text(selector)读非交互区域的文字(如 quote 内容)
goto(url)直接跳 URL(省点击成本)
scroll(direction)翻屏(处理无限滚动列表)

同时减少旧快照在历史中的占用,避免每一步都把完整页面反复带入后续请求。

<!-- bread-visual:start -->

从网页到 JSON,中间发生了什么?

图解: 以 humor 标签引言采集为例。 截图只证明当前页面可见内容;是否抓全还要检查翻页与最终记录。

<!-- bread-visual:end -->

2. 跑起来

cd ch04_full_task
python main.py

预期输出

=== 任务 ===
Go to quotes.toscrape.com and find the tag 'humor'. ...

=== Agent 开始 ===
  [step 0] click(index=46)                           ← 点 humor 标签
  [step 1] extract_text(selector='.quote .text')     ← 读所有引言文本
  [step 1] extract_text(selector='.quote .author')   ← 读所有作者
  [step 2] click(index=39)                           ← 翻到另一个 humor 入口
  [step 3] extract_text(selector='.quote .text')
  [step 3] extract_text(selector='.quote .author')
  [step 4] done(answer='[ ... 12 quotes ... ]')

=== Agent 最终回答 ===
[
  {"text": "The person...", "author": "Jane Austen"},
  {"text": "A day without sunshine...", "author": "Steve Martin"},
  ...
]

已存到 result.json (12 条记录)

打开 result.json,对照各页检查引言、作者和条数。文件生成只说明写出了结果,还需要确认有没有漏页、重复或字段配错。

<!-- bread-visual:start -->

humor 标签页的采集对象

**网页实拍:**Viewing tag: humor 下方是一条条引言及作者;截图为当前视口,完整采集还需要处理翻页。 采集日期:2026-09-27。

<!-- bread-visual:end -->
<!-- bread-practice:start -->

实操画面对照

滚到 humor 第一页末尾,找到 Next

试读到这里 · 后续内容已封存

关注公众号,继续把这章学完

在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。