多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

影刀RPA实操指南:跨平台比价系统——同款商品全网价格对齐

影刀RPA实操指南:跨平台比价系统——同款商品全网价格对齐 影刀RPA实操指南跨平台比价系统——同款商品全网价格对齐做电商选品或做采购的人都有同一个痛点同一款商品在淘宝、拼多多、京东价格各不相同还天天变人工逐个搜逐个记根本跟不上。这篇讲怎么用影刀RPA搭一套跨平台比价系统把同款商品在几个平台的价格定时抓回来、清洗对齐、生成一张对比表。我在公司做过一个日更三百个SKU的比价流程从零到稳定运行踩的坑都在这篇文章里。整体架构分四步按关键词在各平台搜索、采集搜索结果里的价格数据、把不同平台的商品名对齐到同一款商品、输出对比表和价差提醒。影刀RPA在这套流程里负责前三步的自动化第四步可以顺带用飞书表格做展示。环境准备不复杂装影刀RPA社区版浏览器插件装好Excel用WPS或Office都行。开一个商品关键词清单表第一列放商品名后面列留给你想记录的平台价格后面整个流程都围绕这张表转。网页自动化三个平台的搜索与结果采集每个平台的采集逻辑都是打开网页→搜索→抓列表三段式但细节差异很大。用打开网页指令打开平台首页输入文本指令往搜索框填关键词这里要用模拟人工输入选项逐字输入某些平台的搜索框对程序化粘贴不响应。抓结果用获取相似元素列表先捕获元素捕获一条商品卡片的标题和价格右键相似元素校验确认能命中整页列表。各平台的坑不一样平台主要坑应对办法淘宝未登录跳扫码页先扫码登录再跑Cookie保持拼多多移动端页面为主优先抓PC端或走移动端模拟京东价格异步加载抓价格前加等待元素出现淘宝的登录态是最大的坑。我用获取已打开的网页对象复用已登录的浏览器标签页配合Cookie登录的方式保登录态遇到跳转登录页就用判断元素是否存在检测特征元素检测到了就停下来发飞书提醒人工扫码不要试图自动过验证得不偿失。翻页逻辑用点击元素点下一页按钮判断是否还有下一页的方法捕获下一页按钮检查它的class里是否含disabled。总页数不确定时用While循环条件是下一页按钮可用比写死页数稳。价格是异步加载的每次翻页后必须等价格元素出现再抓否则抓到的是上一页的残留我因为这个错配过一次价格比价表里出现了明显不合理的低价被同事一眼看穿。元素定位四合一价格抓取的稳定性写法比价系统对元素定位的要求比普通采集高因为价格节点经常嵌在促销标签里抓错位置就抓到了到手价券后价以外的原价。XPath三种常用写法直接给出来# 捕获元素商品卡片标题用语义化class做模糊匹配 //*[contains(class,title) and contains(class,item)] # 捕获元素价格数字部分价格整数与小数分离的页面 //*[contains(class,price)]//span[contains(class,int)] # 模糊匹配排除预售价只抓在售价 //*[contains(class,price) and not(contains(text(),预售))]CSS选择器在这些场景下更短类名组合用点号拼接.price.int层级用大于号.card .price按属性找用中括号div[data-price]。8种CSS语法里日常最常用的就是这三种加上通配符和伪类first-child处理列表首项。我的选型习惯结构规整用CSS按文本或排除条件筛用XPath两者在影刀的元素定位框里可以随时切换着试。正则表达式在比价里的用处是清洗价格文本经常是¥1,299.00到手这种混合体用正则把数字部分剥出来。影刀的文本处理指令支持正则替换和正则提取匹配模式写\d.?\d*就能拿到纯数字。变量与数据处理商品名对齐才是真正的难点采集下来的数据长这样同一款商品淘宝叫A4复印纸70g 500张*5包 蓝旗舰拼多多叫旗舰A4纸70克5包装京东又是一个叫法。比价的核心是把这些名字对齐成同一款商品。我的做法是建一个标准品名-关键词映射字典字典键是标准品名值是对齐用的关键词列表。流程里对每条采集结果做关键词匹配命中哪个键就归到哪款商品。影刀的字典变量可以直接在流程里维护条目多的时候放进Excel用读取区域读进来再转字典。数据清洗的常规链路在Python模块里一次做完# 输入raw_list 采集到的原始商品记录列表字典组成的列表# 输出clean_list 清洗后的记录字段统一为 name/price/platformimportredefmain(args):clean_list[]foriteminargs.get(raw_list,[]):nameitem.get(name,).strip()price_textitem.get(price,)# 提取价格数字去掉千分位和货币符号mre.search(r\d[\d,]*\.?\d*,price_text)ifnotmornotname:continuepricefloat(m.group().replace(,,))# 价格低于50的视为异常数据丢弃阈值按品类调整ifprice50:continueclean_list.append({name:name[:60],# 截断超长标题price:price,platform:item.get(platform,)})returnclean_list清洗完写Excel打开Excel→按平台分列写入→写入单元格填表头→ForEach循环逐行写价格。想要更进一步的对比分析把数据插进SQLite或MySQL影刀有现成的数据库扩展指令一条SQL就能算出各平台的当日最低价比在Excel里写公式清爽。流程控制与异常处理多平台串行还是并行三个平台的采集放在一个主流程里串行执行每个平台封装成子流程01_淘宝采集、02_拼多多采集、03_京东采集主流程按顺序调用。参数传递用流程参数关键词和输出数据表作为输入输出参数子流程之间不共享变量这样单平台出错不污染其他平台的数据。异常处理结构是整套系统的安全网每个子流程整体套Try块Catch块里输出日志记录平台名加报错信息再发一条飞书通知Finally块里关闭该平台的网页对象防止浏览器标签越积越多单平台失败不影响主流程继续跑下一个平台比价表里该平台留空并标注采集失败我最惨的一次经历拼多多子流程因为页面改版相似元素校验通过但实际抓出来全是空文本流程不报错比价表里价格列一片空白跑了三天没人发现。从那以后我在每个采集子流程末尾加了一个断言式检查——抓取条数小于阈值就在Catch逻辑里报警。没报错不等于抓到了数据这个认知值三天白跑的机器时间。While防死循环同样要做翻页循环加最大页数限制单页等待加最大重试次数两个上限任一触发就跳出并记日志。系统联动飞书表格、邮件与定时任务比价结果落到三个出口本地Excel存档、飞书多维表格做团队共享、价差超阈值时发邮件提醒。飞书多维表格用影刀的对应扩展指令读写先建好表结构商品名、各平台价格、更新时间、价差率流程里用新增记录逐条写入比贴Excel快照直观。价差提醒的判定逻辑同一商品最高价与最低价的差率超过设定值比如25%就触发发送邮件指令收件人、主题、正文都在指令面板配置正文里带上商品名和各平台价格明细。邮件我用的是企业邮箱SMTP配置端口和授权码按邮箱服务商文档填授权码不是登录密码这里很多人卡住。定时任务在客户端计划面板配置每天早8点和晚8点各跑一次避开平台大促整点流量高峰。多任务调度的原则采集任务之间错开10分钟Excel写入任务和采集任务不要同时操作同一个文件文件被占用会直接报错。工程化规范命名、版本与调试比价系统会长期迭代工程化规范越早建立越省事指令命名子流程用编号_平台_动作变量用类型_含义如list_淘宝结果注释规范每个子流程头部写清楚输入输出参数和最后修改日期版本管理每次平台改版修复后另存版本号页面改版是比价系统的常态调试关键词先用一个测试词单步跑通全链路再换全量清单调试定位失败原因用变量面板断点组合在价格提取指令前打断点运行暂停后看变量面板里原始价格文本长什么样十有八九是页面结构变了或价格被促销标签包了一层。XPath修改后先用XPath Helper在浏览器里验证命中数再回影刀里跑来回切换着排查最快。社区版30分钟限制对三平台全量采集不够用创业版起步比较合适如果SKU上千、要多台机器分工才需要考虑企业版的机器人管理能力。常见报错速查与延伸阅读报错现象原因解决办法抓到的价格是空文本价格异步加载未等待抓取前加等待元素出现相似元素只命中1条校验时选错了父层级重新捕获并做相似元素校验Excel写入报文件占用多流程同时写同一文件错峰调度或先写内存再落盘淘宝流程卡在扫码页登录态失效检测登录元素并通知人工字典取值报错键不存在直接取值用get默认值或先判断键存在日期写入Excel变数字单元格格式问题写入前转文本格式三条易错提醒一是价格一定保留采集时间列不同时点的价格没有可比性二是关键词清单里别放全角空格和不可见字符搜出来的结果会莫名变少三是平台大促期间价格波动剧烈比价结论要标注采集时段不然对齐出来的价差是假的。这套跨平台比价系统的完整流程源码包括三个平台的XPath模板、清洗Python模块和飞书多维表格对接配置我放在代码仓库 home.linyan.cloud可以直接参考改造。比价系统是练RPA综合能力最好的项目之一采集、清洗、对齐、联动全用上了做完这一套你做别的业务流程基本不会再卡。#影刀RPA #RPA自动化 #数据采集 #电商比价 #数据处理作者林焱
返回列表