☰
影刀RPA实操指南:携程酒店价格与评分批量采集
2026/10/1 14:21:03 网站建设 项目流程

影刀RPA实操指南:携程酒店价格与评分批量采集

做旅游比价、选酒店、盯房价的人都有一个痛点:携程上同一个城市几百上千家酒店,价格随日期、随楼层浮动,人工翻页抄价格既慢又容易错。这篇文章教你用影刀RPA把携程酒店列表的价格、评分、评论数批量抓进Excel,支持多城市多日期批量跑,再挂上定时任务做房价波动监控。我非技术出身,用影刀RPA做采集两年多,携程这种重动态加载的页面恰恰是练元素定位和等待策略最好的战场。

整体思路四步:打开携程酒店列表页并按城市日期构造URL、等待列表加载后捕获酒店卡片、循环卡片提取名称价格评分写入Excel、多城市循环加定时任务收尾。下面按模块逐个拆。

安装与环境:跑动态页面前的必修课

影刀RPA的安装流程:官网下载客户端、双击安装、注册登录。社区版免费每天30分钟时长,携程一个城市跑一轮大概十几分钟,新手练手够用;要监控多个城市就得上创业版,时长不限。

浏览器插件是硬前提。客户端"设置"里找到"浏览器插件",给Chrome装上并确认图标点亮。携程页面大量内容是滚动后异步加载的,没有插件连元素都捕获不了,这一步跳过等于白干。

携程对登录态的要求不高,酒店列表不登录也能看,但价格日历等详情偶尔会弹登录框,流程里留一个"判断元素是否存在"登录弹窗的判断,存在就点关闭,别让它挡住列表。

项位置说明
客户端官网下载安装社区版够练手
插件设置→浏览器插件不装无法捕获
登录弹窗判断元素是否存在存在就关闭

元素定位四合一:酒店列表的稳定捕获法

携程酒店列表页是典型的"滚动加载+卡片结构",先捕获一张酒店卡片,再用"获取相似元素列表"拿到整页卡片,这是标准的相似元素采集套路。

具体操作:拖入"点击元素"类指令,点元素选择框,点"捕获新元素",鼠标移到第一张酒店卡片上出现橙色边框后点击。捕获完立刻打开元素属性改XPath,因为默认路径里带动态索引,翻页或滚动后必然失效。

# 捕获元素:酒店列表页全部酒店卡片 //div[contains(@class,'hotel-card')] | //div[contains(@class,'list-card')] # 捕获元素:酒店名称 .//h2[contains(@class,'name')] | .//a[contains(@class,'name')] # 捕获元素:价格数字 .//span[contains(@class,'price')] # 捕获元素:评分与评论数所在块 .//*[contains(@class,'score') or contains(@class,'comment')]

携程页面不同时期改版过几轮,class命名不统一,所以XPath里我大量用"或"(|)和contains模糊匹配做兼容,多写两个候选路径,改版时不至于全挂。CSS选择器在这里同样可用,.hotel-card .price这种写法短平快,class稳定时优先用它;结构常变就用XPath的contains兜底,两套语法的选型就这一个原则。

评分和评论数经常拼在一个文本里,比如"4.8分/1234条点评",用正则表达式拆开:\d\.\d抠评分,\d+条抠评论数。正则的三种场景里,"从混合文本抠数字"是采集流程里用得最频繁的。

变量与数据类型:城市列表与价格清洗

携程采集里变量设计的核心是两层列表:外层城市列表(字符串列表),内层酒店数据(每家酒店一个字典,键是酒店名、价格、评分、评论数)。字典取键之前先判断键在不在,不在给默认值0,否则一家酒店缺评分就把整个流程打断。

价格清洗是最重要的变量处理环节。"获取元素文本"读到的价格是"¥389"或"¥389起"这样的字符串,直接比较会出错。流程里固定一个清洗节点:

# 输入:s_price 为原始价格文本,如 "¥389" 或 "¥389起"# 输出:f_price 为浮点数importre s=str(s_price).replace('¥','').replace('¥','')m=re.search(r'\d+\.?\d*',s)f_price=float(m.group())ifmelse0.0

字符串拼接用在构造列表页URL上。携程酒店列表页URL里带城市ID和日期参数,把城市ID、入住日期、离店日期三个参数拼进去,就能实现"换城市换日期不换流程"。日期字符串用日期时间指令生成,今天加一天算入住、加两天算离店,以后想采集下周的价格只改数字。

列表的去重指令在滚动加载场景必备,后面细说。

流程控制:多城市批量与异常隔离

携程批量采集的流程控制就是一个标准的"外层循环城市、内层循环酒店"结构,外加翻页循环,三层。

外层用"ForEach列表循环"遍历城市列表;城市内的酒店列表用"获取相似元素列表"拿卡片,接"ForEach列表循环"逐个提取;翻页用"While条件循环",条件是"下一页"按钮不是disabled状态,XPath写法//a[contains(@class,'next') and not(contains(@class,'disabled'))],翻到底自动停。

这里最大的坑是循环体内不做异常隔离。携程偶尔会插入广告卡片,结构完全不同,一提取就报错,整个城市的数据全丢。我在每个循环体里都包Try-Catch,Catch块用"打印日志"记录"第几页第几家酒店出错",然后continue下一家。加了之后流程从"半夜悄悄挂掉"变成"跳过脏数据继续跑",稳定性天壤之别。

If条件判断的三处应用:判断元素是否存在评分块(新酒店可能无评分);判断价格是否低于阈值(低价酒店单独记一张表);判断评论数是否过千(过滤掉开业不久的酒店)。

广告卡片和脏卡片是携程列表里最大的不稳定源,异常隔离不是可选项。

网页自动化:等待、滚动加载与翻页全解

网页自动化是携程采集的重头,这个页面对"等待策略"的要求比一般电商页更高。

第一步"打开网页":URL参数填拼接好的列表页地址,打开方式选"新建标签页"。打开后第一件事不是采集,是"等待元素出现"酒店卡片,超时给足20秒——携程首页跳转和风控检查比一般页面慢,等元素等不到就打日志换下一个城市,别硬取。

第二步是滚动加载。携程列表滚动到底才加载下一批酒店,标准做法:滚动页面→"获取相似元素列表"→列表去重→数量不变就停,变了继续滚。用"While条件循环"包住整个滚动块,循环条件是"列表数量比上次多"。只滚一次就采集,后面几十家酒店全漏,这是我第一次跑携程时的真实战果——只抓到8家,实际页面有60多家。

第三步弹窗处理。携程的登录引导、优惠券弹窗按五步标准流程处理:判断元素存在→点关闭→二次确认→点右上角叉→放行。遇到盲点弹窗(元素定位点不动的),用"点击图像"按截图匹配点击,锚点选中心位置,实测稳定。

第四步翻页与滚动并存。有的列表翻页是页码按钮,有的是继续滚动,判断标准看页面上有没有翻页条:有就走disabled判断的While翻页,没有就走滚动去重。两种逻辑我都封装成子流程,哪套能用切哪套。

环节方案坑
页面打开等待元素出现20秒超时别太短
滚动加载滚动+去重+数量判断只滚一次会漏一半
翻页条While+disabled判断别写固定页数
登录弹窗五步标准流程盲点弹窗用点击图像

数据处理:Excel落表与跨天比价

数据落表用"打开Excel"绑定工作簿,循环体内"写入单元格"按列写入:城市、酒店名、价格、评分、评论数、采集时间。行号变量逐行自增,一个城市写完自动续到下一个城市,不覆盖。

跨天比价是这套流程的价值所在。每天采集的文件按日期命名存档,第二天跑的时候用"获取表格"把昨天的表读成数据表格,转成"酒店名→昨价"的字典,本轮价格和昨价一对比,涨幅超过10%的酒店单独写进"涨价预警"Sheet。字典键不存在就跳过(新酒店没有昨价),这个判断前面变量模块讲过,用在这里刚好。

清洗环节除了价格,还要处理酒店名里的引号和括号,用"替换文本"统一清掉,不然做字典匹配时同名酒店对不上号。

进阶技能:HTTP请求、OCR与Python协同

进阶一:HTTP请求。携程部分列表数据走接口,"HTTP请求"指令GET接口地址,返回的JSON用JSON指令解析,循环取酒店字段,速度比页面采集快几倍。缺点是接口带鉴权且会变,所以我的流程一直是HTTP优先、页面采集兜底,接口失效自动切回。

进阶二:OCR。价格日历里的部分价格是图片渲染,用"OCR文字识别"把识别结果接正则清洗,能补上页面采集拿不到的数据。

进阶三:Python协同。把采集结果传进Python节点跑Pandas:按评分分桶算均价、按价格段统计酒店数量,输出一张城市酒店画像表。十行代码的事,报告档次立涨。

图像和鼠标键盘在这套流程里的角色是兜底:"点击图像"处理盲点弹窗和图片型按钮,"键盘输入"配合快捷键关闭意外弹出的窗口。

系统联动:定时房价监控与通知

房价监控要自动跑,定时任务在客户端右下角"计划任务"里配置,每天上午10点执行一轮全部城市。夜间任务的前提是电脑不睡眠,电源计划设成"从不",这是定时任务翻车率最高的原因。

跑完的联动动作:涨价清单非空时,用Webhook发一条摘要进群;没有群的用"发送邮件"指令,把当天的完整Excel当附件发到自己邮箱。想让家人帮忙选酒店,把邮件转发过去就行,比截图快得多。

工程化规范:子流程、调试与版本选择

流程定型后拆四个子流程:构造URL与打开页面、采集单城市列表(参数:城市ID)、数据清洗比价、通知发送。子流程用输入输出参数传递,命名"01_构造URL"这种编号格式,主流程四步一目了然。

调试技巧:可疑指令右键添加断点单步执行,变量面板盯价格和列表数量两个关键变量;每个城市跑完"打印日志"输出酒店总数,数量异常(比如只有8家)立刻能发现滚动逻辑失效。我就是靠这条日志发现的漏抓问题。

版本选择:一个城市一轮十几分钟,社区版30分钟只够跑两个城市,城市多了升级创业版,运行时长无限制,这笔账要提前算。

易错速查表

现象原因解决
只采集到第一屏酒店滚动加载没循环滚动+去重+数量判断循环
价格全是0清洗正则没匹配上检查¥/¥两种符号
翻页无限循环disabled判断失效XPath加not(contains)
某城市整个失败广告卡片报错中断循环体包Try-Catch
字典匹配不上酒店名含引号括号替换文本统一清洗

学习资源与延伸阅读

这套携程房价监控的完整流程源码我放在代码仓库 home.linyan.cloud,可以直接参考改造,把城市列表换成你关注的目的地即可。官方文档里"等待元素出现"和"获取相似元素列表"两篇配合本文看,动态加载页面的问题基本都能对号入座。


#影刀RPA #RPA自动化 #数据采集 #携程 #网页自动化

作者:林焱

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询