Skip to main content

沃尔玛价格监控工具 - 每天定时获取商品价格并写入钉钉表格

Project description

沃尔玛价格监控工具

每天定时从钉钉表格读取商品SKU,爬取沃尔玛价格并写回表格,支持促销价识别和历史价格追踪。

功能特性

  • 定时任务自动执行(支持 Cron 表达式)
  • 从钉钉表格读取商品 SKU
  • 自动识别促销价/原价
  • 智能防爬验证处理(Logo点击、验证码、按住验证等)
  • 价格数据写回钉钉表格
  • 历史价格记录自动追加
  • 钉钉机器人通知(开始/完成/异常)
  • 多实例并发支持

快速开始

1. 安装

# 使用 uvx 一键运行(推荐)
uvx walmart-price-monitor

# 或使用 pip 安装
pip install walmart-price-monitor

# 或克隆项目手动安装
git clone <repo-url>
cd WalmartAbby
pip install -e .

2. 配置

复制 .env-example.env,填入配置:

cp .env-example .env

必填配置项:

配置项 说明 示例
CRON_EXPRESSION 定时任务表达式 0 8 * * *(每天8点)
DINGTALK_WEBHOOK 钉钉机器人 Webhook https://oapi.dingtalk.com/robot/send?access_token=...
DINGTALK_SECRET 钉钉机器人密钥 SECxxxx
DINGTALK_DOC_URL 钉钉表格链接 https://alidocs.dingtalk.com/i/nodes/xxx
DINGTALK_APP_KEY 钉钉应用 AppKey dingxxxx
DINGTALK_APP_SECRET 钉钉应用 AppSecret xxxx
DINGTALK_OPERATOR_ID 操作人 UnionId xxxx
DATA_SHEET_NAME SKU 所在工作表名 ALL

可选配置项:

配置项 说明 默认值
DINGTALK_AT_MOBILES @指定人员手机号(逗号分隔) 空(异常时@所有人)
CHROME_USER_DATA_PATH Chrome 用户数据目录 空(自动使用系统Chrome)
PROXY_ENABLED 是否启用代理 false
PROXY_POOL 代理地址池(逗号分隔)

3. 运行

# 定时任务模式(默认)
python run.py

# 单次执行模式
python run.py --once

# uvx 运行
uvx walmart-price-monitor
uvx wpm --once

钉钉表格结构

A列 B列 C列 D列 E列 F列+
1 - - - 日期(如"30日") - 历史日期
2 商品ID WM链接 SKU Price Promo Price 历史价格
3+ 商品ID 链接 SKU号 当前价格 促销价 历史数据
  • A列(商品ID):必填,沃尔玛商品ID(6-15位纯数字)
  • D列+:程序自动写入,每次执行占用2列(价格+促销价)
  • 同一天重复执行会覆盖当天数据

价格识别逻辑

  1. 有促销时(存在划线价):

    • D列:原价(划线价)
    • E列:促销价(当前显示价)
  2. 无促销时

    • D列:当前价格
    • E列:空

防爬处理

项目内置完善的防爬验证处理机制:

验证类型 处理方式 说明
Logo点击 自动处理 最常见,成功率 >90%
验证码 等待手动输入 最长等待2分钟
按住验证 自动模拟 PerimeterX 验证
拼图验证 等待手动完成 需要人工操作
被封禁 返回错误 无法自动处理

防爬优化建议:

  • 使用 Chrome 用户数据目录保持登录状态
  • 避免短时间内大量请求(内置频率限制)
  • 首次运行建议使用 --once 模式观察

多实例运行

同一台机器可运行多个爬虫实例,通过 INSTANCE_ID 区分:

# Windows CMD
set INSTANCE_ID=0 && python run.py --once   # 端口 9333
set INSTANCE_ID=1 && python run.py --once   # 端口 9334
set INSTANCE_ID=2 && python run.py --once   # 端口 9335

# Windows PowerShell
$env:INSTANCE_ID=1; python run.py --once

# Linux/macOS
INSTANCE_ID=1 python run.py --once

每个实例有独立的 Chrome 调试端口和用户数据目录。

通知示例

### 沃尔玛价格监控报告

**执行时间**: 2024-02-01 08:00:00 ~ 08:15:32

**扫描统计**:
- 商品总数: 150 个
- 获取成功: 145 个
- 有促销价: 23 个
- 获取异常: 5 个

**异常商品**:
1. SKU: 10101089 - 页面不存在
2. SKU: 10102007 - 商品不可用

---
数据已更新至钉钉表格

目录结构

WalmartAbby/
├── app/
│   ├── cli.py                    # 入口(定时任务/单次执行)
│   ├── config.py                 # 配置管理
│   ├── notifier.py               # 钉钉通知
│   ├── dingtalk_doc_reader.py    # 钉钉文档API
│   ├── models/
│   │   └── price_result.py       # 价格结果模型
│   ├── readers/
│   │   └── sku_reader.py         # SKU读取器
│   ├── recorders/
│   │   └── price_recorder.py     # 价格记录器
│   ├── selectors/
│   │   └── walmart_selectors.py  # 页面选择器
│   ├── spiders/
│   │   ├── base_spider.py        # 爬虫基类
│   │   ├── walmart_spider.py     # 价格爬虫
│   │   └── walmart_bot_handler.py # 防爬处理器
│   └── utils/
│       ├── rate_limiter.py       # 频率限制
│       └── behavior_simulator.py # 人类行为模拟
├── docs/                         # 详细文档
├── data/                         # 数据目录(日志、备份)
├── run.py                        # 启动脚本
├── .env-example                  # 配置示例
└── pyproject.toml                # 项目配置

技术栈

  • Python >= 3.9
  • DrissionPage - 浏览器自动化
  • alibabacloud-dingtalk - 钉钉文档 API
  • dingtalkchatbot - 钉钉通知
  • croniter - 定时任务

详细文档

更多详细说明请查看 docs/ 目录:

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

walmart_price_monitor-0.2.1.tar.gz (49.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

walmart_price_monitor-0.2.1-py3-none-any.whl (56.9 kB view details)

Uploaded Python 3

File details

Details for the file walmart_price_monitor-0.2.1.tar.gz.

File metadata

  • Download URL: walmart_price_monitor-0.2.1.tar.gz
  • Upload date:
  • Size: 49.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for walmart_price_monitor-0.2.1.tar.gz
Algorithm Hash digest
SHA256 d854fe43decf37454c799a4855986b7bc64447844c3880398553132edba9884d
MD5 8267f1f82f0cec3539afa514f23eca75
BLAKE2b-256 c0581b67fea78d06c4dcc0db0f97f59c5a46193e4b2ec2c0a454434dd2824967

See more details on using hashes here.

File details

Details for the file walmart_price_monitor-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for walmart_price_monitor-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d8015820cabb8ea1aee3b15a4c4fe6b9546223103785462cb5d9c53e5d9432cf
MD5 b00e9afb3d3e9d6c41299ef818a65546
BLAKE2b-256 b4acd0cc656d7c8a4a96d9d45c9fb9a54e79cb07b6e7453eb08d824eefbd52c7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page