Skip to main content

Walmart/Amazon 双平台商品监控系统

一个基于 FastAPI 的商品监控系统,支持 Walmart 和 Amazon 双平台商品状态检测,使用 DrissionPage 进行页面检测,并通过钉钉机器人发送异常通知。

文档导航

文档 说明
配置指南 环境变量和系统配置详解
重试机制 三轮重试逻辑详解
钉钉集成 钉钉文档读取和通知配置
邮编功能 多站点邮编自动设置指南
通知格式 钉钉通知消息格式说明
优化说明 DrissionPage 爬虫优化总结
打包发布 PyPI 打包与发布指南

项目概述

本系统主要用于监控 Walmart 和 Amazon 商品页面的状态,包括:

  • 双平台支持: Walmart + Amazon 商品监控
  • 商品库存状态检测
  • 购物车按钮可用性检测
  • 价格监控
  • 异常情况实时通知(支持 @指定人员)
  • 支持多店铺配置
  • 支持钉钉文档集成
  • 支持 18+ 个 Amazon 站点
  • 终端进度显示(CLI/定时任务模式)

运行模式

系统支持 5 种运行模式:

模式 环境变量 说明 终端UI
web RUN_MODE=web uvicorn Web 服务(默认) 不支持
cli RUN_MODE=cli 单平台单次执行 支持
cli-dual RUN_MODE=cli-dual 双平台单次执行 支持
scheduler RUN_MODE=scheduler 单平台定时任务 支持
scheduler-dual RUN_MODE=scheduler-dual 双平台定时任务 支持
# Web 服务模式(默认)
RUN_MODE=web python run.py

# 单平台 CLI 执行
RUN_MODE=cli python run.py

# 双平台 CLI 执行(推荐)
RUN_MODE=cli-dual python run.py

# 单平台定时任务
RUN_MODE=scheduler CRON_EXPRESSION="0 */2 * * *" python run.py

# 双平台定时任务(推荐)
RUN_MODE=scheduler-dual CRON_EXPRESSION="0 */2 * * *" python run.py

技术架构

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   FastAPI       │    │   DrissionPage   │    │   钉钉机器人     │
│   Web 接口      │───▶│   浏览器自动化    │───▶│   异常通知      │
└─────────────────┘    └──────────────────┘    └─────────────────┘
         │                        │
         ▼                        ▼
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│  Amazon SP-API  │    │   Chrome 浏览器   │    │   终端进度UI    │
│  商品数据获取    │    │   页面检测       │    │   Rich 分屏     │
└─────────────────┘    └──────────────────┘    └─────────────────┘

核心技术栈

  • Web框架: FastAPI
  • 浏览器自动化: DrissionPage
  • Amazon API: python-Amazon-sp-api
  • 通知系统: dingtalkchatbot + alibabacloud-dingtalk
  • 终端UI: Rich (分屏进度显示)
  • 定时任务: croniter
  • 配置管理: python-dotenv

快速开始

方式一:uvx 一键运行(推荐)

无需安装,直接运行:

# 安装 uv(如果还没有)
# Windows: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh

# 一键运行(需要先配置 .env 文件)
uvx walmart-monitor

# 或使用简写
uvx wm

配置文件位置(按优先级):

./.env                             # 当前目录
~/.walmart-monitor/.env            # 用户主目录

方式二:pip 安装

pip install walmart-monitor
walmart-monitor

方式三:从源码运行

1. 安装依赖

pip install -r requirements.txt

2. 配置环境

copy .env-example .env
# 编辑 .env 文件,填入你的配置

详细配置说明请参考 配置指南

3. 启动服务

# 推荐:使用统一入口
python run.py

# 或直接启动 Web 服务
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

4. 访问接口

打开浏览器访问 http://localhost:8000/docs 查看 API 文档


环境变量配置

核心配置

# 运行模式
RUN_MODE=cli-dual

# 定时任务 Cron 表达式
CRON_EXPRESSION=0 */2 * * *

# 钉钉通知
DINGTALK_WEBHOOK=https://oapi.dingtalk.com/robot/send?access_token=xxx
DINGTALK_SECRET=SECxxx

# 钉钉 @ 指定人员(多个用逗号分隔,为空则 @所有人)
DINGTALK_AT_MOBILES=13800138000,13900139000

# 数据源 Sheet 列表
DATA_SHEETS=WM-FIT,WM-Uriah

完整配置请参考 .env-example 文件。


API 接口

接口 方法 说明
/get-all-product-urls POST 从 SP-API 获取商品链接
/test-dingtalk GET 测试钉钉文档连接
/process POST 执行监控任务
/task/progress GET 获取任务进度
/health GET 健康检查

执行监控任务

# 从钉钉文档读取 URL(推荐)
curl -X POST http://localhost:8000/process

# 指定 URL 列表
curl -X POST http://localhost:8000/process \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://www.amazon.com/dp/B0DFP79LBL"]}'

项目结构

├── app/
│   ├── main.py              # FastAPI 主应用
│   ├── cli.py               # CLI 入口点(uvx 使用)
│   ├── config.py            # 配置管理
│   ├── spider.py            # 单平台爬虫核心逻辑
│   ├── spiders/             # 爬虫模块
│   │   ├── base_spider.py   # 基础爬虫类
│   │   ├── walmart_spider.py # Walmart 爬虫
│   │   └── dual_platform_spider.py # 双平台爬虫
│   ├── selectors/           # 选择器模块
│   │   ├── amazon_selectors.py
│   │   └── walmart_selectors.py
│   ├── readers/             # 数据读取模块
│   ├── recorders/           # 结果记录模块
│   ├── notifiers/           # 通知模块
│   ├── amazon_sp_api.py     # Amazon SP-API 客户端
│   ├── notifier.py          # 钉钉通知模块
│   ├── terminal_ui.py       # 终端进度显示模块
│   └── retry_strategy.py    # 重试策略模块
├── scripts/
│   └── publish.py           # 一键发布脚本
├── data/                    # 数据存储目录
├── docs/                    # 文档目录
├── run.py                   # 本地开发入口
├── pyproject.toml           # 包配置
├── .env-example             # 环境变量示例
└── requirements.txt         # 依赖包列表

打包发布

一键发布到 PyPI

# 发布补丁版本 (0.1.0 -> 0.1.1)
python scripts/publish.py patch

# 发布次版本 (0.1.0 -> 0.2.0)
python scripts/publish.py minor

# 发布主版本 (0.1.0 -> 1.0.0)
python scripts/publish.py major

可选参数

参数 说明
--dry-run 只构建不发布,用于测试
--test-pypi 发布到 TestPyPI 而非正式 PyPI
--no-git 跳过 git 提交和推送

详见 打包发布指南


主要功能

商品状态检测

  • 库存检测: 识别商品是否有库存
  • 购物车按钮检测: 检查 "Add to Cart" 按钮是否可用
  • 价格监控: 检测商品价格变化
  • 页面异常检测: 处理验证码、页面错误等情况
  • 智能重试机制: 对失败的检测进行二次验证

通知系统

  • 分级通知: 根据异常类型发送不同级别的通知
  • 购物车异常: @指定人员或@所有人的紧急通知
  • 库存异常: 普通通知
  • 任务完成: 包含详细统计的完成报告
  • 支持 @指定人员: 通过 DINGTALK_AT_MOBILES 配置

多站点支持

支持 18+ 个 Amazon 站点,自动根据 URL 设置对应邮编。详见 邮编功能


故障排除

Chrome 启动失败

  • 检查 CHROME_USER_DATA_PATH 路径是否正确
  • 运行 python test_chrome_config.py 验证配置

API 认证失败

  • 验证 .env 文件中的 SP-API 凭证
  • 检查 refresh_token 是否过期

钉钉通知失败

  • 检查 DINGTALK_WEBHOOK 和 DINGTALK_SECRET
  • 确认钉钉机器人有发送消息权限

更多问题请查看 配置指南


许可证

MIT License

Metadata

Release files for walmart-monitor 0.1.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for walmart-monitor 0.1.11
File Size Uploaded
walmart_monitor-0.1.11.tar.gz 108.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for walmart-monitor 0.1.11
File Interpreter ABI Platform
walmart_monitor-0.1.11-py3-none-any.whl Python 3 none any Details

Total release size: 232.2 kB

Release files / walmart_monitor-0.1.11.tar.gz

Download URL walmart_monitor-0.1.11.tar.gz
Size 108.0 kB
Tags Source
SHA-256 checksum
How to use checksums
fa04472080e0df326466deae43c59b160c941cd4e0d4ffd00987ff39fb05a7be
BLAKE2b-256 checksum
How to use checksums
c4bbcc4261e13bcfd241778b61c2298eaeb1cb76673fa88b32e3df99246549c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.7

Release files / walmart_monitor-0.1.11-py3-none-any.whl

Download URL walmart_monitor-0.1.11-py3-none-any.whl
Size 124.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d7cf29adc552007774d5786e1387c4b0373d686175f4e0b3e52eacc10c83c148
BLAKE2b-256 checksum
How to use checksums
b3df6d8f01fc7d53d057948b1d1d322522d2c7e5304dab98e1a33d7247a33825
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.7

Release history Release notifications | RSS feed

This release

0.1.11 This release

2 release files

0.1.10

1 release file

0.1.9

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page