如何使用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/5 8:21:36 阅读更多 →

最新新闻

Plone 4.3升级:内容运营自主化与数字韧性构建

Plone 4.3升级:内容运营自主化与数字韧性构建

1. 项目概述:Plone 4.3 升级不是“打补丁”,而是内容运营能力的结构性升级 我从2008年开始接触Plone,亲手部署过从2.5到4.2的每一次大版本迁移,也带团队做过二十多个高校和科研机构的Plone站点重构。所以当Plone 4.3正式发布时&a…

2026/7/6 10:09:35 阅读更多 →
Midscene视觉驱动浏览器自动化:原理、实战与性能优化指南

Midscene视觉驱动浏览器自动化:原理、实战与性能优化指南

1. 项目概述:当AI“看见”并“操作”你的浏览器浏览器自动化,这个概念对很多开发者、测试工程师甚至运营同学来说都不陌生。从早期的Selenium,到后来的Puppeteer、Playwright,我们一直在尝试用代码模拟人类在浏览器中的点击、输入…

2026/7/6 10:03:25 阅读更多 →
输电线路绝缘子YOLO训练数据集:含完好与破损实物图及标准txt标签

输电线路绝缘子YOLO训练数据集:含完好与破损实物图及标准txt标签

本文还有配套的精品资源,点击获取 简介:输电线路巡检场景下的绝缘子检测专用YOLO格式数据集,覆盖正常和缺陷两类真实拍摄图像,图片分辨率适中,背景为典型野外架空线路环境,具备实际部署所需的复杂背景与…

2026/7/6 10:01:21 阅读更多 →
Windows任务栏透明美化终极指南:5种模式让你的桌面焕然一新

Windows任务栏透明美化终极指南:5种模式让你的桌面焕然一新

Windows任务栏透明美化终极指南:5种模式让你的桌面焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 厌倦了Windows系统…

2026/7/6 9:59:19 阅读更多 →
医生用AI不是偷懒,是临床决策的静默升级

医生用AI不是偷懒,是临床决策的静默升级

1. 这不是医德滑坡,而是临床决策方式的静默升级上周陪媳妇去西安一家三甲医院看胃部不适,挂的是消化内科的专家号——抢了整整两天才成功。从挂号、签到、候诊,到助理初筛登记,流程和十年前几乎没变。但就在我们坐在诊室外长椅上等…

2026/7/6 9:59:19 阅读更多 →
【毕业设计】SpringBoot+Vue+MySQL 船舶监造系统平台源码+数据库+论文+部署文档

【毕业设计】SpringBoot+Vue+MySQL 船舶监造系统平台源码+数据库+论文+部署文档

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。博主介绍:&#x…

2026/7/6 9:59:19 阅读更多 →

日新闻

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 阅读更多 →

月新闻