
影刀RPA实操指南数据质量校验——空值、重复与异常值的自动把关报表做了一半运营突然来问为什么有三百条记录没有价格一查才发现采集环节页面加载慢价格字段全抓了空值——数据质量的问题从来不是在报表环节暴露的而是在采集环节埋下的。空值、重复值、异常值这三类脏数据靠人眼看几千行是不现实的得让流程自己把关。我做电商数据采集两年多非技术出身被脏数据坑过很多次之后现在的每个采集流程后面都挂着一段校验逻辑不干净的数据根本进不了主表。这篇把这套校验方案完整拆给你影刀RPA内置指令就能全搭出来。先建立框架数据质量校验就是三道关卡——完整性有没有空、唯一性有没有重、合理性正不正常。三道全过才写主表任何一道不过就进隔离表等人工复核。空值校验IF多条件与None值的坑空值是最高频的脏数据。页面没加载完、字段改版、懒加载失败都会让【获取元素文本(web)】抓回空字符串甚至None。校验操作步骤【循环数据表格内容】逐行遍历采集结果对关键字段用【IF 条件】判断对象1是否为空空值行写入隔离表格并打上空值标记正常行继续流转这里有个官方文档明确记载的坑我专门拎出来讲使用【IF 条件】或【IF 多条件】做包含判断时会报TypeError: argument of type ‘’ is not iterable原因之一就是对象1的值是None——None值无法做包含判断。解决办法是用【IF 多条件】在包含判断之前先加一个不为空值的判断条件两个条件同时成立才往下走。我第一次遇到这个报错排查了一下午后来养成习惯任何取回来的变量参与判断前先过一遍空值检查这条纪律让我的流程报错率降了一大半。重复校验三个去重指令的分工影刀RPA里有三个跟去重直接相关的指令场景不同用法不同新手最容易混。指令处理对象典型场景列表去重一维列表商品链接、关键词列表去重删除重复行Excel工作表已落盘表格的整行去重| 二维列表按列去重 | 二维列表 | 按订单号等指定列去重保留首行 |【删除重复行】是Excel自动化里的指令Excel对象参数选择之前通过【打开/新建Excel】创建的对象重复值的列名填A,C,F表示这三列值都相同的行视为重复数据包括标题勾选后第一行标题不参与计算——这个勾选项别漏否则标题行会被当数据比对。【二维列表按列去重】更灵活列索引从0开始指定按哪一列去重重复行保留第一行其余删除。采集结果先在内存里去重再落盘比落盘后再去重省一次读写这是我的执行顺序原则。去重前还有一步容易被忽略先把数据规范化。同一个商品链接有的带参数有的不带直接去重去不掉。用【文本替换】把问号后面的参数统一去掉或者统一小写化再去重就干净了。文本相似度分析指令还能处理同名不同写法的情况比如品牌名里多一个空格相似度设个阈值就能合并。异常值校验正则与阈值的组合拳空值和重复解决之后剩下的是看着有值但不对的数据价格是0、销量是10万、手机号位数不对。这类校验两把刀正则管格式阈值管范围。# 输入row 为当前行数据字典含 price(价格)、sales(销量)、phone(手机号)# 输出error_list收集所有校验不通过的描述importredefcheck_row(row):error_list[]# 格式校验手机号必须是11位纯数字1开头ifnotre.fullmatch(r1\d{10},str(row.get(phone)or)):error_list.append(手机号格式异常:str(row.get(phone)))# 范围校验价格必须在0.01到99999之间pricefloat(row.get(price)or0)ifprice0.01orprice99999:error_list.append(价格异常:str(price))# 销量清洗10万转成100000转不成数字的记为异常sales_textstr(row.get(sales)or)salesfloat(sales_text.replace(万,0000))if万insales_textelseNoneifsalesisNoneandnotsales_text.isdigit():error_list.append(销量格式异常:sales_text)returnerror_list不想写Python的等价指令方案数字范围用【IF 条件】的大于/小于判断格式校验用【从文本中提取内容】提取后比对提取结果和原文是否一致不一致就是格式有问题。两种方案我都用过数据量大或者规则多的时候Python明显省事规则简单的时候纯指令更直观。价格校验里最阴险的是0和空值的区别——页面价格没加载出来时有的模板会显示¥0.00它不是空值能骗过空值检查必须靠阈值规则兜住。元素定位四合一从采集源头减少脏数据校验是下游源头少产脏数据才是根本。影刀RPA的定位体系四件套元素捕获、XPath、CSS选择器、正则表达式每件的稳定性都直接影响数据质量。# 场景捕获商品价格——限定class和层级避免抓到划线原价 //div[contains(class,goods-item)]//span[contains(class,price-now)] # 场景CSS选择器等价写法结构扁平的页面优先用这个 div.goods-item span.price-now # 场景用正则约束提取内容——只提取数字部分天然过滤¥符号 \d(\.\d)?XPath和CSS的选型经验需要沿DOM层级向上或找兄弟元素时用XPath类名语义清晰时用CSS两者在元素编辑面板里随时切换验证。元素捕获时如果命中多个元素说明定位不唯一收窄条件到唯一为止模糊定位抓回来的数据错乱比空值更难排查。流程控制与异常处理让校验不中断主流程校验逻辑跑在主流程里最怕的是校验本身报错把整个采集搞崩。结构上这样安排Try块主采集逻辑崩了进CatchCatch块【打印日志】记录报错脏数据行写入隔离表流程继续下一行而不是整个退出Finally块统一写盘、备份、发送运行报告循环内的单行校验失败用标记继续的方式处理给该行加一个校验状态列异常的标记原因循环照常走完。宁可主表少一条脏数据也不能让一条异常行拖死整个批次这是批次任务的基本纪律。变量类型上提醒一点Excel读出来的所有内容都是字符串做大小比较前要转数字否则9会大于100——这是字符串比较的字典序特性我在价格排序上栽过跟头。网页自动化加载不稳是脏数据的最大来源回头补一句采集端的配合措施空值大多是加载问题造成的。等待策略用【等待元素出现(web)】等关键价格元素出现再提取超时没出现就记空值标记别用固定等待赌运气弹窗处理优惠券弹窗挡住元素是最常见的采集失败原因按判断存在→定位关闭按钮→点击→验证消失的标准流程处理翻页用下一页按钮的disabled样式判断结束防止最后一页重复采集产生天然重复值懒加载滚动后用index配合内容比对去重防止同一条商品被采两遍这几招用上采集端的空值和重复至少少一半校验环节压力小很多。数据处理与数据库校验的最后一道闸数据量大、规则复杂的场景把校验搬到数据库层做更高效。【执行 SQL 语句】指令连接MySQL后空值、重复、范围异常各一条SQL就解决WHERE字段IS NULL筛空值、GROUP BY HAVING COUNT(*)1找重复、WHERE price BETWEEN范围外挑异常。数据库路线的两个高频报错提前打预防针报No database selected是连接时没指定库名在连接参数里选上即可报Duplicate entry是唯一键冲突插入前先查重或者把插入语句改成INSERT IGNORE。官方文档对这两条都有专门条目照着改参数就行。校验通过的干净数据用【数据表格导出】或【写入内容至Excel工作表】落盘隔离表单独命名存档人工复核后再决定回收还是丢弃。系统联动与平台实战校验结果的自动汇报校验不能只默默执行结果要推到人眼前。我的标准链路校验完成后统计三条数——总数、通过数、隔离数用【飞书群通知】发一条汇总消息隔离率超10%时追加所有人。需要留证据的场景再加【发送邮件】把隔离表当附件发出去。平台实战上拼多多商品价格监控是我校验逻辑用得最狠的场景低价捡漏采集经常抓到秒杀价0元或tmp占位值没有阈值校验直接污染低价榜。小红书笔记采集则要在文本字段上多加格式校验点赞数1.2万这类混写格式必须先清洗成数字才能参与排序。工程化规范校验模块子流程化与速查表校验规则每个项目不一样但校验骨架一样封装成子流程Sub050_数据质量校验输入二维列表和校验规则字典输出隔离表和汇总消息。新项目接入只需改规则字典。版本与调试上调试校验逻辑多用断点指令上右键添加断点单步执行看变量面板里的实际值比猜快得多。易错速查数据校验高频翻车点症状原因解决IF包含判断报TypeError对象是None无法判断IF多条件先加不为空值条件去重后重复还在数据格式没统一先去参数、统一大小写再去重数字比较结果错乱Excel读出的是字符串参与比较前转成数字类型标题行被当数据去重删除重复行没勾数据包括标题勾选该选项再执行0元价格混进主表只有空值校验没有阈值校验加价格上下限范围判断插入数据库报Duplicate entry唯一键冲突插入前查重或改用INSERT IGNORE延伸阅读与学习资源官方文档里无法做包含判断“删除重复行”二维列表按列去重这几个条目建议逐字看一遍都是校验场景直接对应的内容影刀学院的Excel自动化进阶课程也值得刷。我的代码仓库 home.linyan.cloud 里有完整的三关校验流程源码含空值、重复、异常值的隔离表方案可以直接参考改造。数据质量这件事流程多写五十行校验指令下游就能少加五十小时班这笔账怎么算都划算。#影刀RPA #RPA自动化 #数据校验 #数据清洗 #Excel表格处理作者林焱