一、案例背景与采集目标
出门旅行或参加校招面试,选酒店总是最费神的一件事:同一晚、同一个商圈,价格能差好几倍,含不含早、离地铁多远、还剩几间房,都要一家一家点进去看。网站明明把所有信息都摆在那里,却没有人替你把它们排成一张能比较的表。这个案例要做的,就是这件事。和前面两个案例一样,它的落点也是帮学生做决定——把「今晚住哪家」变成一次简单的筛选。
示范站点有两个:携程酒店 · 广州酒店列表,网址 https://hotels.ctrip.com/hotels/list?city=32&checkin=2026-10-20&checkout=2026-10-22(city=32 是广州,checkin / checkout 是入住与离店日期,换成自己的日期即可),房型、价格、剩余房量、距离地标都写得很清楚;以及去哪儿酒店,网址 https://www.qunar.com/,用它来对照同一家酒店在不同平台的价格。要提醒的是:酒店搜索有风控,不带日期参数会被直接弹去登录页,连续请求还会弹验证码,本案例只示范公开挂牌价的整理,绝不做高频抓取。
1.1 为什么挑这两个站点
- 数据贴近真实需求。价格、房型、含早、剩余房量、距离地标,都是订房时必须知道的;
- 字段规整但价格会变。同一家酒店换一个入住日期价格就不同,正好讲清「什么条件下价格才可比」;
- 它代表了一大类站点。美团酒店、同程、飞猪、华住会的房源页结构都相似,学一套能迁移到一片;
- 风控很真实。连续请求会弹验证码,正好把「控制频率、不绕过」讲成操作规范而不是口号。
1.2 这个案例要拿到什么
- 某城市、某入住日期下的酒店清单,一家(或一个房型)一行;
- 酒店名称、城市、行政区或商圈、地址、星级、用户评分与点评数;
- 房型、是否含早、价格、剩余房量;
- 距离地标(地铁站 / 景点);
- 最后一句「天河商圈、含早、4 星以上、距地铁 500 米内、每晚 600 元以内」就能筛出几家备选。
1.3 三个必须先想清楚的口径
| 要点 | 页面上的样子 | 正确处理 |
|---|---|---|
| 入住日期 | 「10月20日(周二) - 10月22日(周四)」随查询变化 | 必须固定同一个入住日期与天数,价格才有可比性;日期填过去的日子,页面会直接把你弹去登录页 |
| 是否含早 | 房型名里带「含早」「不含早」 | 单独成列,不能只看价格高低就默认含早 |
| 价格与「起」 | 「¥388 起」「低价房已售完」 | 价格取挂牌价并注明「起」;售完的房型剩余房量记 0,不用别家价格顶替 |
1.4 这个案例的难点在哪
| 难点 | 具体表现 | 对策 |
|---|---|---|
| 价格随日期变 | 换个入住日期价格就不同 | 固定同一城市、同一入住日期、同一房型再比价 |
| 页面动态加载 | 列表与房型要滚动或点击才出来 | 驱动浏览器滚动加载后再取 |
| 有验证码 | 连续请求几次就弹验证码 | 降低频率、拉长间隔,遇验证码立即停止,绝不绕过 |
| 低价房会售完 | 「低价房已售完」但仍显示低价 | 剩余房量记 0 并标注,不要用其他房型价格顶替 |
| 含早信息不显眼 | 含早与否藏在房型名或标签里 | 单独成列,按房型文案判断并人工抽查 |
目标站点与交付产物
下表是本篇用到的真实站点。绿色是课堂可稳定复现的示范站点;橙色是延伸站点,多数有登录墙或风控,课堂上只讲结构、原理与合规边界,不教绕过。
| 项目 | 内容 |
|---|---|
| 示范站点 | 携程 · 广州酒店列表 https://hotels.ctrip.com/hotels/list?city=32&checkin=2026-10-20&checkout=2026-10-22 酒店列表动态加载,价格随入住日期变动;链接必须带 checkin/checkout 参数,且日期要用今天或之后,否则会被弹去登录页;连续请求会弹验证码,课堂只采少量页面 |
| 延伸站点 |
|
| 交付产物 |
|
| 难度 | ★★★ 高 |
| 合规提示 | 只采公开挂牌价;不采用户评价里的个人信息;连续请求会触发验证码,必须低频并随时可停;价格以酒店官方下单页为准,采集结果仅供参考。 |
二、数据源与字段设计
目标站点:携程酒店 https://hotels.ctrip.com/ 与 去哪儿酒店 https://www.qunar.com/。
| 项目 | 内容 |
|---|---|
站点名称 | 携程酒店(房型与价格)+ 去哪儿酒店(比价对照) |
入口网址 | https://hotels.ctrip.com/hotels/list?city=32&checkin=2026-10-20&checkout=2026-10-22 |
页面形态与接口 | 酒店列表与房型信息动态加载,需驱动浏览器滚动后再取;浏览挂牌价无需登录,但必须带上入住与离店日期参数,否则会被弹去登录页;连续请求还会弹验证码 |
实际规模 | 一个城市的某商圈一晚可有几十到上百家酒店在售,价格随日期与房量实时变化 |
延伸站点 | 同程旅行 https://www.ly.com/、飞猪 https://www.fliggy.com/、美团酒店 https://hotel.meituan.com/、华住会——均有风控(美团对自动访问直接返回 403),只作对照与合规讨论 |
2.1 完整字段表(16 个)
下表就是本案例的验收标准。重点看「入住日期」——它是所有价格的前提;离开固定的入住日期谈价格比较,是这类数据最容易犯的错。
| 字段名 | 字段含义 | 示例值 | 口径与备注 |
|---|---|---|---|
酒店名称 | 酒店全称 | 某某大酒店 | 保留原文,不擅自简写 |
城市 | 所在城市 | 广州 | 统一到城市名 |
行政区或商圈 | 行政区或商圈 | 天河商圈 | 便于按位置筛选 |
地址 | 详细地址 | 广州市天河区某某路 1 号 | 照录原文 |
星级 | 酒店星级 | 5 星 | 统一成 经济型 / 3 星 / 4 星 / 5 星 等档位 |
用户评分 | 用户打分 | 4.7 | 多为 5 分制;注明制式 |
点评数 | 点评总条数 | 3200 | 还原成整数 |
房型 | 房型名称 | 高级大床房 | 照录原文,去掉促销词 |
是否含早 | 该房型是否含早 | 含早 | 含早 / 不含早 / 未知 |
早餐份数 | 含早时的份数 | 2 | 不含早记 0;未知留空 |
入住日期 | 查询用的入住日期 | 2026-10-20 | 所有价格的前提,必须固定;填过去的日期页面会弹登录页 |
价格 | 该房型挂牌价(元/晚) | 688 | 纯数字,去掉「¥」与「起」,「起」另设备注 |
剩余房量 | 剩余可订房量 | 5 | 「低价房已售完」记 0;未知留空 |
距离地标 | 距最近地标的距离 | 距体育西路地铁站 500 米 | 分行记录距离对象与米数 |
详情链接 | 酒店详情页地址 | https://…/hotel/数字编号.html | 形如示例,末尾数字是该酒店的编号,用于溯源 |
采集时间 | 本次采集的时刻 | 2026-10-08 15:20 | 价格实时变,必须记录 |
2.2 三个口径写死,后面少踩坑
- 必须固定入住日期。酒店价格随入住日期、天数、房量实时变化,不固定同一个入住日期就比价,等于拿苹果比橘子——本案例要求所有价格都在同一个入住日期下采集。
- 含早要单独成列。含早与否直接影响性价比,不能只按价格排序;从房型名与标签判断,拿不准的标「未知」并抽查。
- 「低价房已售完」要如实记。该房型剩余房量记 0 并标注,不要用同酒店其他房型的价格顶替,否则会误导订房决策。
课程思政|数据安全与法治素养 · 房价可以比,住客隐私不能碰
酒店页面上的挂牌价、房型、位置都是公开信息,采集没有问题;但住客评价里的姓名、电话、房间号,以及谁住了哪间房,属于个人隐私,任何情况下都不该去碰。住宿信息与个人行踪高度相关,法律约束最严。数据工作者的分寸,在这种地方体现得最清楚。
AI 助手小贴士|价格可比性的前提是「同一个入住日期」。先让 AI 确认所有价格是不是都在同一日期下采集的,再开始比价。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请确认这份酒店清单里所有价格是不是都在同一个入住日期(2026-10-15、住 1 晚)下采集的;如果不是,请分组标出不同的日期。
三、零代码操作步骤
工具与技能|先看清三个角色,再动手
本篇全程零代码:你把要求说清楚,AI 去执行,你负责验收。三个角色分工如下——浏览器技能指的是腾讯开源的 BrowserSkill,它能让 AI 直接操作你电脑上真实的浏览器(可复用已经登录的状态),自己开一个独立窗口干活,不打扰你正在看的网页;遇到验证码、登录或确认弹窗,它会停下来交给你本人处理。
| 角色 | 负责什么 | 在本案例里具体做什么 |
|---|---|---|
| 你 | 确认字段清单、验收结果、清洗与合规把关 | 盯字段清单、核对结果、处理异常(如验证码) |
| WorkBuddy | 接中文指令:探字段 → 批量采 → 清洗 → 导出交付物 | 拆解本篇的采集任务并跑完全量、产出交付物 |
| 浏览器技能 BrowserSkill | 以真实浏览器打开页面:跑脚本渲染、滚动 / 翻页 / 点开详情、截图留证;可复用本机浏览器已登录状态,遇到验证码或登录弹窗会停下来交给你处理 | 打开酒店列表,把入住日期固定住再比价 |
五步操作主线(全课程统一,每一篇都按这个顺序推进):
- 定目标与字段:先看本篇第二节的字段表,把「要哪几列、每列什么口径、要多少条」说清楚——字段清单就是验收标准,说不清就会拿回一张字段乱七八糟的表。
- 现场踩点(浏览器技能 BrowserSkill):打开
https://hotels.ctrip.com/hotels/list?city=32&checkin=2026-10-20&checkout=2026-10-22,确认入住日期与住几晚是怎么传的(注意日期要用今天或之后,填过去会被弹去登录页)。 - 小样试采(WorkBuddy):先只查广州天河商圈、入住日期固定为 2026-10-20、住 2 晚。
- 核对与清洗:① 采到的酒店数与页面显示的在售家数一致吗;② 是否含早有没有单独成列;③ 「低价房已售完」有没有记 0 并标注(不许用别家价格顶替)。
- 导出与归档:导出交付物(数据明细表 / 可筛选明细页 / 数据看板 / 可复用的技能包),文件名带上采集日期,并写清数据来源、采集时间与已知局限。
用浏览器技能 BrowserSkill 打开 https://hotels.ctrip.com/hotels/list?city=32&checkin=2026-10-20&checkout=2026-10-22(携程 · 广州酒店列表),把这一页每条记录能采到的字段名和示例值列出来,先不要采集。下面是在 WorkBuddy 里完成本案例的完整流程。注意:遇到验证码就停下,降低频率或改用人工少量查询。
- 新建对话,粘贴下一节的采集提示词,先只查广州天河商圈、入住日期固定为 2026-10-15、住 1 晚。
- 先看条数。确认采到的酒店数与页面上显示的在售家数一致。
- 核对入住日期。让 AI 确认每一行的入住日期都相同,并说明查询用的日期与天数。
- 拆含早与价格。说「把是否含早单独成列,价格去掉货币符号和『起』字,『起』写进备注」。
- 处理售完房型。说「『低价房已售完』的房型,剩余房量记 0 并标注,不要用别家价格顶替」。
- 补距离地标。说「把每家酒店距离最近地铁站或景点的距离单独成一列」。
- 比价对照。说「去同一家酒店在去哪儿上的价格,与携程的收入同一张表对照」。
- 筛选备选。说「筛出天河商圈、含早、4 星以上、距地铁 500 米内、每晚 600 元以内的酒店」。
- 导出并归档。说「导出为 Excel,文件名
hotels_guangzhou_20261016.xlsx」。
四、提示词模板与追问技巧
下面这段可以直接复制。注意四个要点:网址写全、固定入住日期、字段按编号列清、把不绕验证码、不碰个人隐私交代死。
请帮我采集酒店住宿信息,整理成一张酒店比价清单。
【目标站点】
1. 携程酒店 https://hotels.ctrip.com/hotels/list?city=32&checkin=2026-10-20&checkout=2026-10-22
city=32 是广州,checkin / checkout 是入住与离店日期,换成自己的日期即可
(注意:日期要用今天或往后的日子,填过去的日期页面会弹登录页)。
房型、价格、剩余房量、距离地标都写得清楚。
2. 去哪儿酒店 https://www.qunar.com/
用来对照同一家酒店在两个平台的价格。
【查询条件】城市:广州;商圈:天河;入住日期:2026-10-20;住 2 晚(10-22 离店)。
注意:所有价格必须在同一个入住日期下采集,否则不可比。
【需要字段】按这个顺序:
1. 酒店名称
2. 城市
3. 行政区或商圈
4. 地址
5. 星级(经济型 / 3 星 / 4 星 / 5 星 等)
6. 用户评分(注明制式)
7. 点评数(还原成整数)
8. 房型
9. 是否含早(含早 / 不含早 / 未知)
10. 早餐份数(不含早记 0)
11. 入住日期(统一成 2026-10-20)
12. 价格(纯数字,元/晚;「起」另外备注)
13. 剩余房量(「低价房已售完」记 0)
14. 距离地标(距地铁站或景点多少米)
15. 详情链接
16. 采集时间(2026-10-16 10:30 这种格式)
【处理口径】
- 固定同一入住日期与天数,所有价格才可比
- 含早与否单独成列,不只按价格排序
- 「低价房已售完」的房型剩余房量记 0 并标注,不要用其他房型价格顶替
【合规要求】
- 只采公开展示的挂牌价与房型
- 绝不采用户评价里的姓名、电话、房间号等个人信息
- 控制频率,每次请求间隔至少 2 秒;遇到验证码立即停止并告诉我,绝不绕过
- 结果导出为 hotels_guangzhou_20261016.xlsx
4.1 三条常用追问指令
追问一(入住日期不一致):
这份清单里好像混进了不同入住日期的价格。请按入住日期分组,
把不是 2026-10-20 的记录单独列出来,并告诉我每一组的酒店数与均价。
追问二(含早没分开):
含早与不含早的房型被按价格混在一起排了。请把「是否含早」单独成列,
并按「含早」和「不含早」分别给出均价,方便我判断含早到底值不值。
追问三(售完房型):
有几家酒店标着「低价房已售完」,价格却还是低价。
请把这些房型的剩余房量改成 0 并标注「已售完」,不要用同酒店其他房型的价格顶替。
AI 助手小贴士|比价前先让 AI 做一次「同店校验」:同一家酒店在两个平台的价格差多少,差得离谱的先人工看一眼。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请找出在两个平台都出现的同一家酒店,把它们的价格并排列出来,把价差超过 30% 的单列出来给我核对。
五、结果核对、清洗与保存
整理后的结果样例(示例数据,字段形态与真实一致;均为 2026-10-20 入住、住 2 晚):
| 酒店名称 | 城市 | 商圈 | 星级 | 评分 | 点评数 | 房型 | 含早 | 入住日期 | 价格 | 剩余房量 | 距离地标 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 某某大酒店 | 广州 | 天河商圈 | 5 星 | 4.7 | 3200 | 高级大床房 | 含早 | 2026-10-20 | 688 | 5 | 距体育西路地铁站 500 米 |
| 某某商务酒店 | 广州 | 珠江新城 | 4 星 | 4.5 | 1800 | 标准双床房 | 不含早 | 2026-10-20 | 428 | 2 | 距珠江新城地铁站 800 米 |
| 某某快捷酒店 | 广州 | 北京路 | 3 星 | 4.2 | 960 | 单人房 | 不含早 | 2026-10-20 | 218 | 0 | 距北京路步行街 300 米 |
| 某某公寓酒店 | 广州 | 琶洲 | 4 星 | 4.6 | 1250 | 复式房 | 含早 | 2026-10-20 | 520 | 8 | 距琶洲地铁站 400 米 |
5.1 五步清洗,一句话一条
① 锁定入住日期:
确认所有记录的入住日期与天数为同一组(2026-10-20,住 2 晚),不一致的分组标注。
② 价格清洗:
去掉「¥」与「起」,只留数字;「起」写进备注列;币种注明人民币。
③ 含早标准化:
按房型文案判断含早 / 不含早 / 未知,含早单独成列并标早餐份数。
④ 售完房型处理:
「低价房已售完」的剩余房量记 0 并标注,不用其他房型价格顶替。
⑤ 去重与对照:
按「酒店名称 + 房型 + 入住日期」去重;两个平台同店的价格并排对照后再导出。
5.2 保存与归档
hotels_guangzhou_20261016.xlsx 酒店清单(原始字段)
hotels_guangzhou_20261016_clean.xlsx 清洗版(价格清洗 + 含早标准化 + 售完标注)
hotels_guangzhou_compare.xlsx 两平台同店比价对照表
hotels_guangzhou_log.txt 日志:城市、商圈、入住日期、家数、验证码次数、采集时间
课程思政|工匠精神与严谨求实 · 离开入住日期的房价,只是一个数字
同一家酒店,周五晚和周二晚可能差一倍;标着 388 元的房型,点进去可能已经售完。不锁定入住日期、不标注售完状态,比出来的「最便宜」就是假的。数据工作的严谨,体现在每一个前提都写清楚——因为别人会照着你的结论去订房。
AI 助手小贴士|核对房价时,让它先把每个商圈的酒店数与最低价列出来,哪个商圈数据明显偏少,就说明那一批漏采了。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请按商圈分组统计酒店数量、最低价与均价,把数量明显偏少的商圈列出来,我据此决定补采哪些。
六、常见问题与合规红线
6.1 这个站点上最容易踩的五个坑
| 现象 | 原因 | 怎么处理 |
|---|---|---|
| 比出来的最低价不可信 | 混了不同入住日期的价格 | 锁定同一入住日期与天数,按日期分组核对 |
| 把售完的房型当成在售 | 没标注「低价房已售完」 | 剩余房量记 0 并标注,不用其他房型价格顶替 |
| 含早没分开,均价算不准 | 含早与否混在一列 | 含早单独成列,按含早与不含早分别统计 |
| 列表抓下来是空的 | 页面动态加载,直接打开没渲染 | 驱动浏览器滚动加载后再取 |
| 查几次就弹验证码 | 请求频率过高触发风控 | 立即停止,降低频率、拉长间隔,绝不绕过验证码 |
6.2 三条合规红线(每个案例都要过一遍)
- 只采公开挂牌价。公开展示的价格、房型、位置可以采;需要登录或会员才能看的协议价不采。
- 不采个人信息。住客评价里的姓名、电话、房间号等信息一律不采、不存、不传。
- 控制频率。每次请求间隔 ≥2 秒,遇到验证码立即停止;采集结果只用于课堂分析。
课程思政|诚信与职业操守 · 价格可以比,数据不能编
把所有平台的价格都采一遍,不如把其中一个平台的价格采准。缺了就写缺了,售完了就写售完了,绝不用平均值或别家价格把空格填上——编出来的价格会让人做出错误的预订决定。诚实地留下空白,比伪造一个漂亮的数字重要得多。
七、随堂自测(10 题)
点击选项即可判分,答错的题会立刻显示解析。
1比较不同酒店的价格,最关键的约束是?
- A. 只看酒店名称
- B. 随便填一个日期
- C. 必须固定同一个入住日期与天数才有可比性
- D. 只看星级
2同一家酒店今天和明天的房价可能不同,原因是?
- A. 酒店挂牌价随入住日期、房量与促销动态变化
- B. 网站标错了
- C. 浏览器缓存问题
- D. 价格是随机数
3房型写「高级大床房 · 含早」,识别「是否含早」的正确做法是?
- A. 一律当成含早
- B. 按房型文案里的「含早 / 不含早」判断并单独成列
- C. 只看价格高低
- D. 忽略这一项
4页面提示「低价房已售完」,正确做法是?
- A. 把价格填 0
- B. 忽略这条酒店
- C. 标注该房型无房(剩余房量记 0),不要用其他房型的价格顶替
- D. 编一个价格填上
5「距离地标 500 米 / 距地铁站 800 米」,正确的记录方式是?
- A. 直接删掉
- B. 只记数字不记对象
- C. 改成经纬度坐标
- D. 分行记录距离对象与米数,便于按位置筛选
6连续多次请求酒店搜索页后弹出验证码,正确做法是?
- A. 立即停止,降低频率、拉长间隔,绝不绕过验证码
- B. 想办法绕过验证码
- C. 换 IP 继续高频请求
- D. 付费找人破解
7采集酒店信息时,下面哪种做法越界了?
- A. 采集公开挂牌价与房型
- B. 采集并保存住客评价里的姓名、电话、房间号等个人信息
- C. 记录距离地标的米数
- D. 统计某商圈的酒店数量
8「剩余房量」显示「5」、价格显示「¥388 起」,正确的记录方式是?
- A. 把「起」当成价格的一部分记进去
- B. 把 5 当成价格
- C. 把两个字段合成一列
- D. 价格取 388,另设备注列记「起」,剩余房量记 5
9想知道某酒店是不是「地铁口」,最该看哪一列?
- A. 星级
- B. 距离地标
- C. 点评数
- D. 剩余房量
10把两家平台的价格放到一起比,最基本的做法是?
- A. 固定城市、入住日期与房型口径,再比价
- B. 直接比首页第一个数字
- C. 比谁的图片好看
- D. 只比星级