如何使用Python结合亚马逊商品详情API实现商品价格监控?
你想通过 Python 结合亚马逊商品详情 API 实现商品价格监控核心是自动定时获取商品价格、对比预设阈值、价格达标时触发提醒我会基于亚马逊官方 PA API 5.0最合规的方式提供一套「新手可落地、功能完整、稳定性高」的监控方案涵盖从 API 配置到自动提醒的全流程。一、核心前提必看API 基础使用亚马逊 Product Advertising API (PA API 5.0)需先在亚马逊联盟后台申请Access Key、Secret Key、Partner Tag跟踪 ID商品用唯一标识 ASIN从商品详情页 URL 提取如https://www.amazon.com/dp/B08CZJ7Z8L中的B08CZJ7Z8L监控逻辑定时调用 API → 解析价格数据 → 存储历史价格 → 对比阈值 → 触发提醒控制台 / 邮件→ 循环执行必备库amazon-pa-api5-python简化 API 签名、requests、pandas数据存储、schedule定时任务、smtplib邮件提醒。二、前置准备1. 安装依赖库bash运行# 核心亚马逊API签名请求 pip install amazon-pa-api5-python # 辅助数据存储定时任务 pip install pandas schedule2. 配置关键信息亚马逊 PA API 5.0 的Access Key/Secret Key/Partner Tag亚马逊联盟后台获取目标商品 ASIN、价格阈值如 AirPods Pro 低于 200 美元提醒可选邮箱账号开启 SMTP 服务如 QQ 邮箱需获取授权码。三、完整实现代码可直接运行python运行# 亚马逊API依赖 from paapi5_python_sdk import ApiClient, ApiException, Configuration, GetItemsApi from paapi5_python_sdk.models import GetItemsRequest, PartnerType, Resource # 基础工具 import pandas as pd from datetime import datetime import schedule import time # 邮件提醒可选 import smtplib from email.mime.text import MIMEText from email.header import Header # 全局配置修改为你的信息 # 亚马逊API配置 AMAZON_CONFIG Configuration() AMAZON_CONFIG.access_key 你的Access Key AMAZON_CONFIG.secret_key 你的Secret Key AMAZON_CONFIG.host webservices.amazon.com # 美国站中国站改webservices.amazon.cn PARTNER_TAG 你的Partner Tag跟踪ID # 监控配置 TARGET_ASIN B08CZJ7Z8L # 监控商品ASIN PRICE_THRESHOLD 200.0 # 价格阈值低于此价触发提醒 MONITOR_INTERVAL 1 # 监控频率小时 HISTORY_FILE amazon_price_monitor.xlsx # 历史价格存储文件 # 邮件配置可选不需要则注释相关代码 EMAIL_SENDER 你的邮箱qq.com EMAIL_AUTHOR_CODE 你的邮箱授权码 EMAIL_RECEIVER 接收提醒的邮箱xxx.com SMTP_SERVER smtp.qq.com SMTP_PORT 587 # def get_amazon_product_price(asinTARGET_ASIN): 调用亚马逊API获取商品当前价格核心函数 try: # 初始化API客户端 api_client ApiClient(AMAZON_CONFIG) get_items_api GetItemsApi(api_client) # 构造请求仅获取必要字段减少数据量 request GetItemsRequest( partner_tagPARTNER_TAG, partner_typePartnerType.ASSOCIATES, item_ids[asin], resources[ Resource.ITEMS_TITLE, Resource.ITEMS_OFFERS_LISTINGS_PRICE, Resource.ITEMS_OFFERS_LISTINGS_AVAILABILITY, Resource.ITEMS_DETAIL_PAGE_URL ] ) # 发送请求并解析响应 response get_items_api.get_items(request) if not response.items or len(response.items) 0: print(未获取到商品数据) return None item response.items[0] # 安全提取核心数据多层嵌套用判断避免报错 price_data { ASIN: item.asin or 未知, 标题: (item.item_info.title.display_value[:50] ...) if (item.item_info and item.item_info.title) else 未知, 当前价格: item.offers.listings[0].price.amount if (item.offers and item.offers.listings and item.offers.listings[0].price) else 0.0, 货币: item.offers.listings[0].price.currency if (item.offers and item.offers.listings and item.offers.listings[0].price) else USD, 库存状态: item.offers.listings[0].availability.display_value if (item.offers and item.offers.listings and item.offers.listings[0].availability) else 未知, 详情链接: item.detail_page_url or 未知, 查询时间: datetime.now().strftime(%Y-%m-%d %H:%M:%S) } return price_data except ApiException as e: print(fAPI调用失败{e.response_body}) return None except Exception as e: print(f解析数据失败{str(e)}) return None def save_price_history(price_data): 保存价格数据到Excel追加模式 if not price_data: return False new_df pd.DataFrame([price_data]) # 追加到历史文件避免重复 try: history_df pd.read_excel(HISTORY_FILE) combined_df pd.concat([history_df, new_df], ignore_indexTrue).drop_duplicates(subset[ASIN, 查询时间]) except FileNotFoundError: combined_df new_df combined_df.to_excel(HISTORY_FILE, indexFalse, encodingutf-8) print(f历史数据已更新共{len(combined_df)}条记录) return True def send_email_alert(price_data): 价格达标时发送邮件提醒可选 if not price_data: return # 构造邮件内容 content f h2亚马逊商品价格提醒/h2 p监控时间{price_data[查询时间]}/p p商品{price_data[标题]}/p p当前价格{price_data[当前价格]} {price_data[货币]}/p p目标阈值{PRICE_THRESHOLD} {price_data[货币]}/p p库存状态{price_data[库存状态]}/p p购买链接a href{price_data[详情链接]}{price_data[详情链接]}/a/p msg MIMEText(content, html, utf-8) msg[From] Header(亚马逊价格监控, utf-8) msg[To] Header(用户, utf-8) msg[Subject] Header(f {price_data[标题][:20]} 价格达标, utf-8) # 发送邮件 try: with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(EMAIL_SENDER, EMAIL_AUTHOR_CODE) server.sendmail(EMAIL_SENDER, EMAIL_RECEIVER, msg.as_string()) print(提醒邮件已发送) except Exception as e: print(f邮件发送失败{str(e)}) def check_price_and_alert(price_data): 对比价格阈值触发提醒 if not price_data: return # 打印监控日志 print(f\n {price_data[查询时间]} 监控结果 ) print(f商品{price_data[标题]}) print(f当前价格{price_data[当前价格]} {price_data[货币]}) print(f库存状态{price_data[库存状态]}) # 价格判断低于阈值有库存才提醒 in_stock In Stock in price_data[库存状态] or 有货 in price_data[库存状态] if price_data[当前价格] 0 and price_data[当前价格] PRICE_THRESHOLD and in_stock: print(f\n 价格达标当前价格低于{PRICE_THRESHOLD} {price_data[货币]}) send_email_alert(price_data) # 触发邮件提醒 else: print(f\n⏳ 价格未达标目标≤{PRICE_THRESHOLD} {price_data[货币]}) def run_monitor(): 启动监控主程序 print(f\n 亚马逊价格监控已启动 ) print(f监控商品{TARGET_ASIN}) print(f价格阈值{PRICE_THRESHOLD} {AMAZON_CONFIG.host.split(.)[1].upper()}) print(f监控频率每{MONITOR_INTERVAL}小时) print(f启动时间{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}) print(*60) # 首次运行立即执行不等待 price_data get_amazon_product_price() if price_data: save_price_history(price_data) check_price_and_alert(price_data) # 配置定时任务 schedule.every(MONITOR_INTERVAL).hours.do(lambda: [ save_price_history(pd), check_price_and_alert(pd) ] if (pd : get_amazon_product_price()) else None) # 循环执行定时任务 while True: schedule.run_pending() time.sleep(60) # 每分钟检查一次任务 if __name__ __main__: try: run_monitor() except KeyboardInterrupt: print(f\n监控已手动停止停止时间{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}) except Exception as e: print(f\n监控异常停止{str(e)})四、关键步骤解析1. API 调用与数据解析使用amazon-pa-api5-python库简化 AWS4 签名手动实现签名极其复杂新手必用「安全取值」是核心亚马逊 JSON 层级深用if判断 or默认值避免KeyError比如item.offers.listings[0].price.amount需先判断offers/listings是否存在仅请求必要字段通过resources参数减少数据传输和解析耗时。2. 历史数据存储用 Excel 文件存储新手友好无需数据库通过pandas实现「追加写入 去重」避免重复记录文件名固定可随时打开查看价格走势。3. 价格提醒逻辑双重判断价格≤阈值且商品有库存In Stock/ 有货避免提醒无货商品邮件提醒通过smtplib发送 HTML 格式邮件包含商品链接直接点击即可购买。4. 定时任务用schedule库实现定时调用every(MONITOR_INTERVAL).hours可灵活调整频率如every(30).minutes每 30 分钟循环中time.sleep(60)减少 CPU 占用仅每分钟检查一次任务是否需要执行。五、使用说明修改配置替换代码中Access Key、Secret Key、Partner Tag、TARGET_ASIN、PRICE_THRESHOLD等参数运行脚本终端执行python amazon_price_monitor.py启动后会立即执行一次监控之后按设定频率运行查看结果控制台实时打印监控日志生成amazon_price_monitor.xlsx文件记录所有历史价格价格达标时自动发送邮件提醒。六、避坑指南API 调用失败检查Access Key/Secret Key是否正确Partner Tag是否绑定对应站点确认 API 配额未耗尽亚马逊 PA API 5.0 每天有调用次数限制避免高频调用价格为 0.0商品无报价 / 下架检查 ASIN 是否有效或等待商品重新上架邮件发送失败开启邮箱 SMTP 服务如 QQ 邮箱在「设置 - 账户」中开启确认授权码正确SMTP 服务器 / 端口匹配中文乱码保存 Excel 时指定encodingutf-8邮件内容用utf-8编码。总结亚马逊价格监控核心是「合规调用 API 安全解析数据 定时触发 阈值提醒」本次代码覆盖全流程新手只需修改配置即可运行关键优化点仅请求必要字段、安全取值避免报错、Excel 追加存储、合理控制监控频率避免 API 限流扩展方向支持多商品监控遍历 ASIN 列表、价格走势可视化用 matplotlib 绘图、微信 / 短信提醒对接第三方短信接口。

相关新闻

寒冬燃情!湖南省网安基地第二期“守护者联盟”

寒冬燃情!湖南省网安基地第二期“守护者联盟”

风雪刺骨,键盘炙热,一群网络安全守护者在零下温度中开启了他们的数字征程2026年1月19日,当星城长沙迎来这一年最冷的寒潮,湖南省网安基地(CSB)的实训室内却热火朝天。来自全国各地的网络安全爱好者、高校学…

2026/5/17 3:41:22 阅读更多 →
【多所研究所知名高校办会】第三届光电信息与光学工程国际学术会议(OIOE 2026)

【多所研究所知名高校办会】第三届光电信息与光学工程国际学术会议(OIOE 2026)

第三届光电信息与光学工程国际学术会议(OIOE 2026) 2026 3rd International Conference on Optoelectronic Information and Optical Engineering 2026年3月20-22日|中国长春 “第三届光电信息与光学工程国际学术会议(OIOE 2026)"将于…

2026/7/6 7:41:54 阅读更多 →
频繁跳槽真的比稳定工作的人差吗?

频繁跳槽真的比稳定工作的人差吗?

前几日在在电梯里听见的谈论: “你这几年换了三份工作啊?” “嗯。” “厉害……也有点飘。” 电梯门一合,扣好“草率”的标签,一整天都刮着风。 与其争辩,不如换个叙述方式。今天不讲数据,讲一个三幕小剧…

2026/7/6 10:53:25 阅读更多 →

最新新闻

Excel ROUND函数底层原理与财务工程级避坑指南

Excel ROUND函数底层原理与财务工程级避坑指南

1. 项目概述:为什么一个“四舍五入”函数值得写上万字?Excel里敲下ROUND(A1,2),结果立刻出来——看起来简单得不能再简单。但如果你在财务报表里用它算过增值税、在工程预算中处理过材料损耗率、在科研数据里校验过有效数字,你大概…

2026/7/6 10:46:37 阅读更多 →
Plone电商基建加固:GetPaid Recipe Release 1.4.1深度解析

Plone电商基建加固:GetPaid Recipe Release 1.4.1深度解析

1. 项目概述:一个被低估的 Plone 电商基建工具包更新 Plone 是个老派但极其扎实的内容管理系统,尤其在政府、教育、科研类机构里扎根很深。它不像 WordPress 那样靠主题和插件堆出花哨界面,而是靠严格的权限模型、内容生命周期管理和可审计性…

2026/7/6 10:46:37 阅读更多 →
ZODB对象数据库原理与Zope内容管理实战

ZODB对象数据库原理与Zope内容管理实战

1. 项目概述:当应用服务器与数据库在对象层面“无缝焊接”我第一次接触 Zope 是在 1998 年,那会儿连“Web 应用框架”这个词都还没被广泛使用。打开文档,第一反应不是兴奋,而是皱眉——“这玩意儿默认不让我连 MySQL?”…

2026/7/6 10:46:37 阅读更多 →
Linux防火墙端口管理:firewalld、iptables、ufw 3种方案深度对比与选择指南

Linux防火墙端口管理:firewalld、iptables、ufw 3种方案深度对比与选择指南

Linux防火墙端口管理:firewalld、iptables、ufw 3种方案深度对比与选择指南在Linux服务器管理中,防火墙配置是确保系统安全的关键环节。面对不同的发行版和业务需求,系统管理员常常需要在firewalld、iptables和ufw这三种主流防火墙工具之间做…

2026/7/6 10:44:32 阅读更多 →
可视化指挥闭环:城市安防视频孪生时空感知技术详解

可视化指挥闭环:城市安防视频孪生时空感知技术详解

可视化指挥闭环:城市安防视频孪生时空感知技术详解摘要传统城市安防指挥体系存在视频孤岛、时空基准割裂、预警处置脱节、调度无空间量化支撑、事后复盘证据碎片化五大核心痛点,指挥链路停留在“看画面、接警情、人工派单”的线性被动模式,无…

2026/7/6 10:44:32 阅读更多 →
如何快速上手eulerfs-test:从配置到执行的完整教程

如何快速上手eulerfs-test:从配置到执行的完整教程

如何快速上手eulerfs-test:从配置到执行的完整教程 【免费下载链接】eulerfs-test test scripts for eulerfs 项目地址: https://gitcode.com/openeuler/eulerfs-test 前往项目官网免费下载:https://ar.openeuler.org/ar/ eulerfs-test是openEul…

2026/7/6 10:42:30 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻