影刀自带的指令能处理大部分场景,但遇到复杂的数据清洗——比如从“【限时抢购】连衣裙¥99.9”里提取价格、去掉括号、拆出规格——用Python代码指令更顺手。
Python代码指令就是让你在影刀里直接写Python,处理完把结果返回给影刀变量。
我也是非技术出身,Python只用几个固定的清洗套路,够用了。
一、Python代码指令的基本用法
操作步骤:
- 右侧指令面板搜索“Python代码”,拖入流程
- 点亮右上角的Python图标(社区版需要手动激活,否则报错)
3. 在代码区写Python脚本
- 在底部“输入参数”区域,把影刀变量传进去(勾选“启用”)
- 在底部“输出参数”区域,设置要把哪个Python变量返回给影刀
- 运行后,影刀变量就能拿到处理后的数据
示例:最简单的清洗——去掉价格里的“¥”符号
# 输入参数:price_raw = “¥99.9” (从影刀传入)
# 输出参数:price_clean

price_clean = price_raw.replace(“¥”, “”)
# price_clean 变成 “99.9”
二、场景1:用正则表达式提取数字
场景:抓到的文本是“月销量1.2w件”,你要提取“12000”。
方法:用Python的re模块提取数字,再转换单位。
操作步骤:
- 拖入Python代码指令
- 输入以下代码
3. 把销量文本作为输入参数传入
- 输出清洗后的数字
import re
# 输入:sales_text = “月销量1.2w件”
# 输出:sales_number (整数)
def clean_sales(text):
# 提取数字和小数点
match = re.search(r‘(\d+\.?\d*)’, text)
if not match:
return 0
num = float(match.group(1))
# 判断单位
if ‘w’ in text.lower() or ‘万’ in text:
num = int(num * 10000)
elif ‘k’ in text.lower():
num = int(num * 1000)
else:
num = int(num)
return num
sales_number = clean_sales(sales_text)

# “1.2w” → 12000
常用正则规则(直接复制用):
| 提取目标 | 正则表达式 | 示例 |
|---|---|---|
| 整数 | \d+ | “123件” → 123 |
| 小数 | \d+\.\d+ | “99.9元” → 99.9 |
| 整数或小数 | \d+\.?\d* | “99”或“99.9”都行 |
| 手机号 | 1[3-9]\d{9} | 13812345678 |
| 中文 | [\u4e00-\u9fa5]+ | “连衣裙” |
三、场景2:用split()拆分字符串
场景:SKU是“颜色:红色||尺寸:M”,要拆出“红色”和“M”。
方法:用两次split()。
# 输入:sku_raw = “颜色:红色||尺寸:M”
# 输出:color, size
# 第一步:按“||”分成两段
parts = sku_raw.split(“||“)
# parts = [”颜色:红色“, ”尺寸:M“]

# 第二步:取第一段,按”:”分割
color_part = parts[0].split(”:”)
color = color_part[1] # “红色”
# 第三段:取第二段
size_part = parts[1].split(”:”)
size = size_part[1] # “M”
一行写法(如果你懂列表推导):
color = sku_raw.split(“||“)[0].split(”:”)[1]
四、场景3:用strip()和replace()清理脏数据
场景:抓到的文本前后有空格、换行符,或者有多余符号。
常用方法:
# 输入:title_raw = ” 【爆款】连衣裙 \n“
# 输出:title_clean
# 去掉首尾空格和换行
title_clean = title_raw.strip()
# 结果:”【爆款】连衣裙“
# 去掉中文括号
title_clean = title_clean.replace(“【”, ”“).replace(”】”, “”)
# 结果:“爆款连衣裙”
# 合并多个空格为一个空格
import re
title_clean = re.sub(r‘\s+’, ‘ ‘, title_clean)
五、场景4:从URL中提取参数
场景:商品链接是https://detail.tmall.com/item.htm?id=123456&sku=789,要提取id的值。
方法:用正则或字符串截取。
import re
# 输入:url = “https://detail.tmall.com/item.htm?id=123456&sku=789”
# 输出:item_id
# 方法一:正则匹配id=后面的数字
match = re.search(r‘id=(\d+)’, url)
if match:
item_id = match.group(1) # “123456”
# 方法二:用split和find(更稳定)
if ‘id=’ in url:
start = url.find(‘id=’) + 3
end = url.find(‘&’, start)
if end == -1:
end = len(url)
item_id = url[start:end]
六、Python代码指令的输入输出配置
配置输入参数(把影刀变量传进Python):
在指令底部“输入参数”区域:
- 参数名:
sales_text(Python代码里用的变量名) - 参数类型:字符串
- 参数值:选影道变量
{采集到的销量文本}
配置输出参数(把Python变量传回影刀):
在指令底部“输出参数”区域:
- 参数名:
sales_number(Python代码里的变量名) - 输出到:选或新建影道变量
{清洗后销量}
注意:Python变量名和影道变量名可以不一样,系统会自动映射。
七、实战:一条复杂的清洗流程
假设你从拼多多抓到一条商品数据:
“【限时5折】韩版修身连衣裙 ¥129.9 月销3.5w”
你要拆出:去掉括号的标题、价格数字129.9、销量数字35000。
完整Python代码:
import re
# 输入:raw_text
# 输出:title_clean, price_num, sales_num
# 1. 提取标题(去掉【】内的内容)
title_clean = re.sub(r‘【.*?】’, ‘’, raw_text).strip()
# 2. 提取价格(¥后面的数字)
price_match = re.search(r‘¥(\d+\.?\d*)’, raw_text)
price_num = float(price_match.group(1)) if price_match else 0
# 3. 提取销量(月销xxx)
sales_match = re.search(r‘月销(\d+\.?\d*)(\w?)’, raw_text)
if sales_match:
sales_val = float(sales_match.group(1))
unit = sales_match.group(2)
if unit == ‘w’:
sales_num = int(sales_val * 10000)
else:
sales_num = int(sales_val)
else:
sales_num = 0
常见问题/易错速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| Python代码报“模块不存在” | 忘了点亮Python图标 | 指令右上角的Python图标要点亮 |
| 输入参数传不进去 | 输入参数的变量名拼写错误 | 检查大小写,Python是区分大小写的 |
| 输出参数返回None | 代码里定义的变量名和输出参数名不一致 | 保持完全一致 |
| re模块报错 | 正则表达式写错了 | 在线正则测试网站先验证 |
| 中文乱码 | 编码问题 | 在代码头部加 # -*- coding: utf-8 -*- |
推荐资源
Python正则练习网站:regex101.com,选Python风格,贴文本写正则实时看匹配结果。
影刀官方文档:搜索“Python代码指令”,有视频讲解输入输出配置。
我常用的Python清洗模板(保存为子流程,反复用):
C_清洗价格:输入“¥99.9” → 输出 99.9C_清洗销量:输入“1.2w” → 输出 12000C_去除括号:输入“【爆款】连衣裙” → 输出“连衣裙”
最后说一句:
Python代码指令是影刀里性价比最高的功能——学习成本低(会5个函数就够),但能解决80%的清洗问题。我自己的流程里,采集完数据后一定会跟一个Python代码指令做清洗,再写入Excel。这样表格里的数据直接能用,不用手工调。
记住三个核心函数:re.search()提取、split()拆分、replace()替换。够用了。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
