当前位置:首页>python>用 Python 实现了外卖平台的自动化比价,真香!

用 Python 实现了外卖平台的自动化比价,真香!

  • 2026-10-11 06:50:25
用 Python 实现了外卖平台的自动化比价,真香!

周末逛商场,计蒙只用 9 块钱,自提了一份工作日花 30 元外卖点的同款套餐。

盯着手机页面上 21 元的差价,沉默了很久。

同款门店、完全一样的餐品,仅仅是配送、平台券、到店自提规则不同,小伙伴们不花个十几分钟反复切换 APP 对比,根本看不到真实底价。

计蒙租住的小区周边有三座大型商场,地下通道步行 5 分钟直达。

一个念头瞬间冒出来:2公里内就自提!

信息差收割懒人,既然人工比价低效又费时间,不如亲手写一套全自动比价程序。

初衷很朴素:把所有重复、繁琐、枯燥的比价工作,全部交给程序,自己省时、省钱,还能吃到性价比更高的饭。

整套工具核心依靠图像定位 + OCR 视觉识别,无需抓包接口、不侵入平台底层,自动遍历三大主流外卖平台,筛选周边近距离门店的真实到手价,彻底告别手动来回切 APP、凭感觉比价的低效模式。

一、图像 + OCR 视觉自动化:完整闭环,稳定运行

走纯视觉模拟真人操作路线,搭建了一套工程化全自动数据闭环,稳定性大幅提升。

一句话讲透整套运行逻辑:数据库作为大脑,模拟器充当肢体,图像模板匹配完成精准触控,OCR 识别充当眼睛,全程无需人工介入。

完整自动化数据流:

数据存储 → 任务调度 → 图像定位自动触控 → 多平台遍历采集→ OCR价格识别清洗 → 智能比价决策 → 订单预执行 → 数据回写

传统比价逻辑是「人主动找低价」,这套系统直接反转逻辑:自动遍历全平台、主动筛选最低价,最优下单方案直接输出,省去全部人工筛选成本。

小提示:数据存储第一步时一定要配置好录入的距离范围!!!!

二、系统底层:三张数据表,支撑全流程数据驱动

能长期稳定迭代的自动化项目,核心不靠硬编码写死逻辑,而是数据驱动 + 配置化管理。

设计三张核心数据表,覆盖菜品自定义、UI 图像坐标配置、价格数据全量溯源三大场景。

1. 菜品库:个性化点餐配置中心

用来存储所有常吃套餐的自定义参数,支持模糊搜索匹配、预算限制、平台优先级自定义。

CREATE TABLE 菜品库 (    菜品ID INT PRIMARY KEY,    菜品名称 VARCHAR(100),     -- "香辣鸡腿堡套餐"    别名列表 TEXT,             -- 模糊搜索适配多关键词    目标预算 DECIMAL(5,2),     -- 个人预算上限    历史最低价 DECIMAL(5,2),   -- 记录历史底价    偏好平台权重 JSON          -- 自定义平台优先级);

2. 平台配置库:视觉自动化最核心模块

整套系统能否精准自动点击、识别价格,全靠这张表。通过 UI 图像模板匹配 + 动态相对坐标定位,记录三大外卖平台全部操作控件区域,实现无差错自动触控。

CREATE TABLE 平台配置库 (    平台名称 VARCHAR(50),    搜索框坐标 X,Y,            -- 图像识别锁定搜索框精准坐标    价格区域坐标 X,Y,W,H,      -- 划定OCR专属价格识别区域    模板图片路径 VARCHAR(200), -- UI图像匹配模板,适配页面变动    是否启用 BOOLEAN);

关键优势:

系统不会依靠固定坐标死磕页面。每次操作先通过图像模板匹配识别,如果无法找到会按照逻辑上下滑动。动态计算控件坐标完成点击。即便平台页面小幅改版,只要最开始记录的整体 UI 结构不变,程序就能正常运行,容错率较高。

3. 价格快照库:全网比价核心数据仓库

全量存储 OCR 识别清洗后的真实到手价,既支撑实时比价计算,也可以长期复盘平台定价、优惠券溢价规律。

CREATE TABLE 价格快照库 (    菜品ID INT,    平台名称 VARCHAR(50),    店铺名称 VARCHAR(100),    价格 DECIMAL(5,2),    采集时间 DATETIME,    原始OCR文本 TEXT           -- 用于排查识别误差,校准OCR模型);

三、视觉自动化碾压人工比价

整套比价系统分层解耦,分为调度总控层、视觉采集层、智能决策层,所有操作全部依托图像识别驱动,逻辑清晰、方便后续维护扩展。

第一层:调度总控层

系统总指挥,自动读取待比价任务,批量触发多平台采集,内置随机延时策略模拟真人操作节奏,规避平台风控封禁。

def 主流程():    待办任务列表 = 数据库.查询("SELECT * FROM 任务队列 WHERE 状态='待执行'")    for 单个任务 in 待办任务列表:        菜品信息 = 数据库.查询菜品(单个任务.菜品ID)        报价列表 = 多平台采集比价(菜品信息)        最优选择 = 决策引擎(报价列表, 菜品信息.目标预算)        if 最优选择 != NULL:            执行下单(最优选择)            数据库.更新任务状态(单个任务.ID, "已下单")        随机延时(3~8秒)  # 模拟真人操作,规避机器特征

第二层:整套工具灵魂模块

不抓接口、不调用平台底层 API,全程纯视觉交互:

图像模板匹配页面元素 → 动态定位按钮控件 → 模拟器模拟手指点击 → OCR 精准识别价格区域,再通过正则清洗提取真实支付价格。

def 多平台采集比价(菜品信息):    报价列表 = []    平台列表 = 数据库.查询("SELECT * FROM 平台配置库 WHERE 是否启用=true")    for 平台 in 平台列表:        启动App(平台)        图像定位点击(平台.搜索框坐标)        输入菜品名称 + 回车搜索        等待页面加载(3秒)        for i in range(1, 4):            图像定位点击第i个店铺()            等待加载(2秒)            原始文本 = OCR区域识别(平台.价格区域坐标)            实付价格 = 正则清洗提取数字()            报价列表.存入数据()        返回桌面()    return 报价列表

第三层:智能决策层,自动输出最优下单方案

负责清洗无效价格数据、过滤超出个人预算的套餐;

多套餐价格相同时,按照自定义平台权重择优推荐,最终直接返回唯一最优解。

def 决策引擎(报价列表, 目标预算):    有效报价 = 报价列表.筛选正常价格()    有效报价.价格升序排序()    最低价 = 有效报价.第一个()    if 最低价.价格 > 目标预算:        return NULL    if 多单价格并列:        按平台权重择优    return 最低价

四、安全兜底机制:严守边界,杜绝风险

整套自动化系统的安全底线提前焊死,绝不越界操作,彻底规避误扣款、恶意批量下单的风险。

核心安全规则

所有自动化操作仅执行至提交订单页面,最终支付步骤必须手动确认,程序无权自动扣款。

配套全套平台防封策略:

 ✅ 随机操作延时:打破机器固定点击频率,高度模拟真人使用习惯

 ✅ 模拟滑动浏览:复刻用户上下滑动查看店铺的行为,降低风控判定概率

 ✅ 异常降级机制:单平台采集失败不会导致整套程序崩溃,剩余平台正常兜底比价

 ✅ 人工总开关:一键暂停所有比价、下单任务,全流程完全可控

作者有话说

你平时点外卖,会反复切换多个 APP 比价吗?有没有遇到过线上外卖和线下到店差价巨大的情况?

欢迎在评论区聊聊你的省钱小技巧。

作者 计蒙不吃鱼 | 编辑 计蒙大宝
内容由AI辅助生成,版权归作者所有
如需投稿请发送【联系作者】至后台

更多精彩内容

计蒙说:数据采集与处理标准化

计蒙说:数据分析工具选型建议

最新文章

随机文章