一、案例背景与采集目标
打开当当网(dangdang.com,国内老牌图书电商),在搜索框里输入「Python编程」,页面立刻返回一屏图书:书名、作者、出版社、出版时间、定价、当当价、折扣、评论数,一行一个商品。这一屏,就是一张现成的图书市场调查表——哪本书更便宜、哪家出版社出得多、哪本书评论最多,全都写在里面。
本案例要做的,就是把这屏信息整整齐齐地搬进表格。示范站点选的是当当网图书搜索结果页,网址 http://search.dangdang.com/?key=Python编程。它属于「搜索列表页采集」,和案例01 的新闻列表页是同一个路子,但难点完全不同:新闻的字段都是干净文本,而图书电商的字段几乎全是「文案」——价格有「定价」和「当当价」两套、折扣写作「7.0折」、评论数写作「48312条评论」。能不能把这些文案变成能计算的数字,就是本案例的成败所在。
1.1 这个案例要拿到什么
- 关键词「Python编程」的搜索结果第 1 页,约 60 条图书商品;
- 每条商品:书名、作者、出版社、出版时间、定价、当当价、折扣、评论数、商品链接、封面图;
- 价格类字段同时给出「数值」和「页面原文」两列,方便回溯验收;
- 用「当当价 ÷ 定价」反推折扣,和页面上的折扣文案交叉核对,确认自己没算错。
1.2 三个绕不开的难点
| 难点 | 页面上的样子 | 解决思路 |
|---|---|---|
| 价格是「双轨」的 | 一行里既有「定价 ¥88.00」,又有「当当价 ¥66.00」 | 两列分别记录,并注明哪一列才是实际售价 |
| 折扣是一句文案 | 「7.5折」「满 100 减 50」「限时抢」 | 折扣统一换算成折扣率(0.75),促销标签单独留一列 |
| 评论数是长文案 | 「48312条评论」「1.2万条评论」 | 去掉「条评论」,有「万」的乘换算,保留原文列对照 |
| 标签混在书名里 | 书名前带「自营」「电子书」「预售」 | 书名保持原文,标签另立一列,不要混进书名 |
88.00、把「7.5折」变成 0.75、把「1.2万条评论」变成 12000,才是真本事。目标站点与交付产物
下表是本篇用到的真实站点。绿色是课堂可稳定复现的示范站点;橙色是延伸站点,多数有登录墙或风控,课堂上只讲结构、原理与合规边界,不教绕过。
| 项目 | 内容 |
|---|---|
| 示范站点 | 当当图书搜索列表(关键词:Python编程) http://search.dangdang.com/?key=Python编程 结构稳定、字段规整(书名/价格/出版社/评论数),是做电商类采集最合适的示范站点 |
| 延伸站点 |
|
| 交付产物 |
|
| 难度 | ★★☆ 中 |
| 合规提示 | 主流电商有明确的反爬与 robots 约束,教学示范走结构规整的站点;提示词中不提供任何绕过验证码、伪造登录态的做法,只讲识别风控与停止采集。 |
二、数据源与字段设计
数据源就一个页面:当当网图书搜索结果页,地址 http://search.dangdang.com/?key=Python编程。它把关键词直接写在网址参数里(key= 后面就是关键词),换一个词就换一批结果,非常适合课堂反复演练。
2.1 站点信息
| 项目 | 内容 |
|---|---|
| 站点全称 | 当当网(dangdang.com),国内老牌自营 + 平台混合的图书电商 |
| 示范网址 | http://search.dangdang.com/?key=Python编程 |
| 页面形态 | 静态 HTML 列表页(服务端渲染),无需登录、无需 Cookie,右键查看源码即可看到全部商品 |
| 关键词入口 | 网址参数 key= 后跟关键词;另有 page_index= 控制页码 |
| 规模说明 | 一个关键词通常返回数百至数千条结果,分页展示,每页数十条 |
| 访问约束 | 公开页面、未见明显反爬;但仍应控制频率(请求间隔 1 秒以上),不做并发轰炸 |
2.2 延伸站点(只讲原理与合规边界)
| 站点 | 网址 | 教学用途 |
|---|---|---|
| 京东商品搜索 | https://search.jd.com/Search?keyword=Python编程 | 强风控 + 需要登录态,只讲字段结构,不做演示 |
| 苏宁易购搜索 | https://search.suning.com/Python编程/ | 结构较规整,可作中等难度对照 |
2.3 完整字段表(15 个字段)
凡「页面写法五花八门」的字段,都按原文列 + 清洗列成对出现。下表是当当图书列表页能稳定取到的字段。
| 字段名 | 字段含义 | 示例值 | 口径与备注 |
|---|---|---|---|
序号 | 列表中的顺序 | 1 | 采集时按页面顺序自动生成 |
关键词 | 本次搜索用的词 | 数据采集 | 写入文件时用来区分批次 |
书名 | 图书标题原文 | 统计学习方法 | 保持原文,促销前缀不要混进来 |
作者 | 图书作者 | 李航 | 多作者用「、」连接,译著另起 |
出版社 | 出版机构 | 清华大学出版社 | 做出版社发文量统计用 |
出版时间 | 出版年月 | 2019-05-01 | 统一成 YYYY-MM-DD |
定价 | 图书标价 | 88.00 | 纯数字,单位元;页面原文「定价 ¥88.00」 |
当当价 | 当当实际售价 | 66.00 | 纯数字,单位元;这是真正比价用的价格 |
折扣 | 售价折扣率 | 0.75 | 由「7.5折」换算,保留两位小数 |
促销标签 | 页面上的活动标记 | 满100减50 | 没有就留空;多个标签用「;」连接 |
评论数 | 买家评论条数 | 120753 | 去掉「条评论」;有「万」要乘 10000 |
评论数原文 | 评论数页面写法 | 120753条评论 | 留档,便于回溯核对 |
商品链接 | 图书详情页地址 | http://product.dangdang.com/29156843.html | 完整网址,能直接点开 |
封面图 | 图书封面地址 | http://img3m2.ddimg.cn/…/29156843-1_b_1.jpg | 取真实图片地址,不要占位图 |
采集日期 | 本次采集的日期 | 2026-10-08 | 固定填当天,方便合并多次采集 |
2.4 价格与折扣的清洗口径
价格是重灾区。同一行里可能出现四种写法,处理规则要先说死:
| 页面写法 | 含义 | 清洗结果 | 口径说明 |
|---|---|---|---|
| 定价 ¥88.00 | 图书标价 | 88.00 | 去掉货币符号,保留两位小数 |
| 当当价 ¥66.00 | 实际售价 | 66.00 | 比价一律用这一列,不用定价 |
| 7.5折 | 折扣文案 | 0.75 | 去掉「折」再除以 10;「7.5折」即 0.75 |
| 88.20-126.00 | 套装区间价 | 88.20 | 只取最低价,并在备注注明「区间价」 |
常见评论数写法与目标结果(示例):
「120753条评论」 → 120753
「1.2万条评论」 → 12000
「暂无评论」 → 空值(不要填 0,0 与「没有」含义不同)
核对公式(示例):
当当价 66.00 ÷ 定价 88.00 = 0.75,与页面折扣 7.5折 完全吻合 → 说明两列都对上。
对不上就说明某一列取错了,要回原文复核。
0.75 这样的两位小数,做统计时直接相乘即可。AI 助手小贴士|价格和折扣最容易漏掉「区间价」「满减」这两种写法。让 AI 先把页面上出现过的所有价格、折扣、促销写法穷举一遍,你确认口径后再批量执行。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请先把这一页里所有价格、折扣和促销标签的原始写法各列成一个清单,标出有几种不同格式,先不要清洗。
课程思政|数据安全与法治素养 · 页面上的价格只是快照
电商页面写着「当当价」「限时折扣」,一个价格背后往往有一串活动规则。做数据的人要清醒:采来的价格只是某一时刻的页面快照,不等于真实成交价,更不等于长期价格。把采集时间、口径、来源如实标注,才对得起这份数据,也不误导看数据的人。
三、零代码操作步骤
工具与技能|先看清三个角色,再动手
本篇全程零代码:你把要求说清楚,AI 去执行,你负责验收。三个角色分工如下——浏览器技能指的是腾讯开源的 BrowserSkill,它能让 AI 直接操作你电脑上真实的浏览器(可复用已经登录的状态),自己开一个独立窗口干活,不打扰你正在看的网页;遇到验证码、登录或确认弹窗,它会停下来交给你本人处理。
| 角色 | 负责什么 | 在本案例里具体做什么 |
|---|---|---|
| 你 | 确认字段清单、验收结果、清洗与合规把关 | 盯字段清单、核对结果、处理异常(如验证码) |
| WorkBuddy | 接中文指令:探字段 → 批量采 → 清洗 → 导出交付物 | 拆解本篇的采集任务并跑完全量、产出交付物 |
| 浏览器技能 BrowserSkill | 以真实浏览器打开页面:跑脚本渲染、滚动 / 翻页 / 点开详情、截图留证;可复用本机浏览器已登录状态,遇到验证码或登录弹窗会停下来交给你处理 | 打开商品搜索列表,确认卡片字段与翻页方式 |
五步操作主线(全课程统一,每一篇都按这个顺序推进):
- 定目标与字段:先看本篇第二节的字段表,把「要哪几列、每列什么口径、要多少条」说清楚——字段清单就是验收标准,说不清就会拿回一张字段乱七八糟的表。
- 现场踩点(浏览器技能 BrowserSkill):打开
http://search.dangdang.com/?key=数据采集,让它先把每个商品能采到的字段名和示例值列出来,先不要采集。 - 小样试采(WorkBuddy):只采前 5 条,重点看定价、售价、折扣、评论数四列清洗得对不对。
- 核对与清洗:① 折扣率与「售价 ÷ 定价」算出来一致吗;② 价格是不是纯数字(有没有「¥」残留);③ 翻页有没有漏页。
- 导出与归档:导出交付物(数据明细表 / 可筛选明细页 / 数据看板 / 可复用的技能包),文件名带上采集日期,并写清数据来源、采集时间与已知局限。
用浏览器技能 BrowserSkill 打开 http://search.dangdang.com/?key=Python编程(当当图书搜索列表(关键词:Python编程)),把这一页每条记录能采到的字段名和示例值列出来,先不要采集。本案例全程在 WorkBuddy 里用中文对话完成,不写一行代码。
- 新建对话,粘贴「采集任务提示词」(见下一节)。关键词先用「数据采集」,把网址原样复制进去。
- 让它先「看一眼」。说「先打开
http://search.dangdang.com/?key=Python编程,把每个商品能采到的字段名和示例值列出来,先不要采集」。这一步能避免字段猜错。 - 先采 5 条试水。只采前 5 条,重点检查定价、当当价、折扣、评论数四列的清洗结果对不对。
- 用公式核对。拿「当当价 ÷ 定价」算折扣率,和「折扣」列对照,看是否一致;不一致就说明口径有问题。
- 放开到整页。确认无误后说「请按同样规则采集本页全部商品」。
- 要求翻页。如果列表有「下一页」或走页码参数,说「继续采第 2 页并合并,按商品链接去重」。
- 导出并命名。说「导出为 Excel,文件名
ecom_dangdang_数据采集_20261009.xlsx」。
四、提示词模板与追问技巧
下面这段可以直接复制。注意三个要点:真实网址写全、字段编号列清、清洗口径写死。
请帮我完成一个电商图书列表采集任务。
【目标页面】当当网图书搜索结果页,网址:http://search.dangdang.com/?key=Python编程
【搜索关键词】数据采集
【采集范围】搜索结果第 1 页,先只采前 5 条给我验证
【需要字段】按这个顺序,价格与折扣都要「数值 + 原文」:
1. 序号(从 1 开始)
2. 关键词
3. 书名(保持原文,不要带「自营」「电子书」这类前缀)
4. 作者(多作者用「、」连接)
5. 出版社
6. 出版时间(格式 YYYY-MM-DD)
7. 定价(纯数字,单位元,两位小数)
8. 当当价(纯数字,单位元,两位小数,这是实际售价)
9. 折扣(由「7.5折」换算成 0.75 这样的折扣率,保留两位小数)
10. 促销标签(如「满100减50」,没有就留空)
11. 评论数(整数,去掉「条评论」,有「万」乘 10000)
12. 评论数原文(页面上的写法,如「1.2万条评论」)
13. 商品链接(完整网址,http://product.dangdang.com/… 这种)
14. 封面图(真实图片地址,不要占位图)
15. 采集日期(今天的日期)
【清洗口径】
- 价格:优先记录「当当价」为实际售价;区间价只取最低价并在备注注明;
「¥39.9」按 39.90 记录。
- 折扣:去掉「折」再除以 10;无法识别的写法折扣留空,不要猜。
- 评论数:出现「万」就乘以 10000;无法识别时留空,不要填 0。
【输出要求】
1. 先在对话里给出 5 条预览,字段顺序按上面来
2. 用「当当价 ÷ 定价」算出折扣率,与「折扣」列对照,把对不上的行标出来
3. 我确认后,再采集本页全部商品
4. 导出为 Excel,文件名 ecom_dangdang_数据采集_20261009.xlsx
4.1 三条常用追问指令
追问一(补全链接):
第 3 条的商品链接不是完整网址,请补上域名改成绝对地址,
并确认每条链接都能用浏览器直接打开。
追问二(核对清洗):
请把「定价」「当当价」「折扣」三列并排给我看,
逐条说明每一条的折扣是怎么算出来的,与页面文案是否一致。
追问三(继续翻页):
这一页还有下一页,请继续采集第 2 页并与现有结果合并,
按「商品链接」去重后重新给我完整表格。
AI 助手小贴士|如果某条商品的评论数值空着,不要直接让它「补一个」。先问它是页面没有、还是识别失败,两种情况处理方式完全不同。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请列出所有评论数为空的商品,并告诉我每一条的原因:是页面未显示,还是写法不在识别规则里。
五、结果核对、清洗与保存
下面是 WorkBuddy 返回的结果样例(节选,书目为真实出版物,价格与评论数为教学示意,以实时页面为准):
| 序号 | 书名 | 作者 | 出版社 | 定价 | 当当价 | 折扣 | 评论数 |
|---|---|---|---|---|---|---|---|
| 1 | 机器学习 | 周志华 | 清华大学出版社 | 88.00 | 66.00 | 0.75 | 48312 |
| 2 | 统计学习方法 | 李航 | 清华大学出版社 | 88.00 | 66.00 | 0.75 | 120753 |
| 3 | 算法图解 | [美] Aditya Bhargava | 人民邮电出版社 | 49.00 | 34.30 | 0.70 | 20118 |
| 4 | 数据库系统概论 | 王珊 | 高等教育出版社 | 45.00 | 36.00 | 0.80 | 15608 |
5.1 四项必查
| 核对项 | 正常表现 | 发现问题怎么问 |
|---|---|---|
| 条数 | 与页面商品数一致 | 「本页应该有 60 条,现在只有 48 条,请补采漏掉的」 |
| 价格 | 定价、当当价两列全是数字,当当价 ≤ 定价 | 「第 2 条当当价高于定价,请复核是不是取错了」 |
| 折扣 | 与「当当价 ÷ 定价」算出的结果一致 | 「第 4 条折扣与两列价格对不上,请说明规则」 |
| 评论数 | 能识别的都换算成整数,不能识别的留空 | 「第 5 条评论数空着是对的,请不要填 0」 |
5.2 清洗与保存
① 去空格:
所有文本列去掉首尾空格与换行符。
② 统一价格与折扣:
定价、当当价保留两位小数;折扣统一成两位小数的折扣率。
③ 按链接去重:
按「商品链接」去重,重复的保留第一条。
④ 补两列:
新增「采集日期」(今天)与「关键词」(数据采集),方便以后合并多次采集。
ecom_dangdang_数据采集_20261009.xlsx ← 原始结果(原样保留)
ecom_dangdang_数据采集_20261009_clean.xlsx ← 清洗后结果
ecom_dangdang_数据采集_20261009_log.txt ← 日志:页数、条数、异常
AI 助手小贴士|清洗前先另存副本。让 AI 直接改原始表,一旦口径改过头,原始写法就找不回来了。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请保留原始文件不动,另存一份副本再清洗,最后告诉我清洗前后各有多少条、改了哪些列。
课程思政|工匠精神与严谨求实 · 一个逗号之差,结论就变了
「¥1,299.00」少去掉一个千分位逗号,就成了 1.299;「7.5折」当成 75%,就等于把折扣看反了。价格与折扣直接决定比价结论,容不得半点马虎。数据工作者的严谨,就体现在这种「逐条对照、用公式复核」的笨功夫里。
六、常见问题与合规红线
6.1 五个高频问题
| 现象 | 原因 | 怎么处理 |
|---|---|---|
| 价格列里混着「¥」「起」等符号 | 没有区分原文列和数值列 | 要求把价格拆成「数值 + 原文」两列,数值列只放数字 |
| 折扣出现 7.5 和 0.75 两种写法 | 换算规则没统一 | 把换算规则写进提示词,统一存成 0.75 这样的折扣率 |
| 书名被截断或改写过 | AI 为了整齐自作主张 | 明确要求「书名保持原文,不截断、不改写」 |
| 翻页后出现重复商品 | 列表分页有重叠或推荐位重复 | 按商品链接去重,并说明重复条数 |
| 出现验证码或要求登录 | 触发了平台风控 | 立即停止,不要在演示站点之外反复尝试 |
6.2 合规红线
- 只在公开、无需登录的当当搜索页做示范。京东、天猫等站点有风控且内容受保护,不研究、不尝试绕过。
- 控制频率。请求之间留足间隔(1 秒以上),不并发轰炸;出现验证码立即停手。
- 只用公开信息。书名、价格、评论数属于公开展示信息;不采买家个人信息、不做账号爬取。
- 用途正当。结果用于课堂比价分析;对外展示时注明来源与采集时间,不冒用平台名义。
课程思政|诚信与职业操守 · 比价可以有,弄虚作假不行
电商采集最常见的用途是比价与选品,这本身无可厚非。但把「定价」当成实际售价、把区间价的最低值写成全部规格的价格,就是在误导结论。做数据要有操守:口径写清楚,来源标明白,不为了好看而修饰数字。
七、随堂自测(10 题)
点击选项即可判分,答错的题会立刻显示解析。
1采集当当图书搜索列表的价格时,最推荐的做法是?
- A. 同时保留「定价」「当当价」两列,并注明哪列是实际售价
- B. 只保留一个「价格」列
- C. 把「定价」当成实际售价
- D. 只留数值,删掉原文
2页面写成「88.20-126.00」,合理的清洗口径是?
- A. 取平均值 107.10
- B. 取最高价 126.00
- C. 只取最低价 88.20,并注明这是区间价
- D. 整条删除
3某商品评论数原文是「暂无评论」,评论数(数值)列应该填什么?
- A. 0
- B. 写「无」
- C. 空值(留空),并说明原因
- D. 填一个相近的数
4在 WorkBuddy 里做零代码采集,动手前最有价值的一步是?
- A. 先列出页面能采到的全部字段与示例值
- B. 先采 100 条测试稳定性
- C. 先导出成 Excel
- D. 先让它写好脚本
5关于京东、天猫等主流电商的反爬,本课的态度是?
- A. 研究如何绕过验证码
- B. 只讲字段结构与合规边界,不在其上做演示、不绕过风控
- C. 用代理 IP 批量突破限制
- D. 伪造登录身份继续采
6页面上的「7.0折」换算成折扣率,正确的是?
- A. 7.0
- B. 0.070
- C. 0.70
- D. 70
7清洗时发现某条书名与页面原文不一致,应该?
- A. 以清洗后的为准
- B. 要求 AI 保持书名原文,不截断不改写
- C. 把书名列删掉
- D. 自己手动补一段
8同时保留「定价」「当当价」两列,最主要的用途是?
- A. 凑字段数
- B. 方便生成报告
- C. 提高采集速度
- D. 交叉核对:当当价 ÷ 定价 应等于折扣率
9把关键词写进采集文件名,主要好处是?
- A. 文件名更好看
- B. 避免同一批次的多个关键词互相覆盖
- C. 可以少导出一列
- D. 能让文件更小
10采集电商数据用于课程分析,下面哪一项越界了?
- A. 统计某关键词下图书的价格分布
- B. 采集书名与价格做比价
- C. 统计各出版社的图书数量
- D. 抓取买家昵称与手机号