如何修改Python版Amazon Availability Checker实现从文件读ASIN的缺货通知功能
亚马逊ASIN库存监控脚本修改方案
实现思路
- 批量读取ASIN:支持TXT/CSV两种格式的文件读取,每行存储1个ASIN,自动过滤空行和无效字符
- 调整通知触发逻辑:原脚本为有货发通知,修改为库存状态不在预设的有货列表中时,触发缺货通知
- 补全邮件发送功能:原脚本缺少
sendemail函数的实现,补充SMTP发信逻辑 - 批量遍历检查:将原单ASIN检查逻辑改为循环遍历所有读取到的ASIN,逐个检测库存状态
核心代码修改
1. ASIN文件读取代码
读取TXT文件(无需额外依赖)
def read_asin_from_txt(file_path: str = "asin.txt") -> list: asin_list = [] with open(file_path, "r", encoding="utf-8") as f: for line in f: cleaned_asin = line.strip() if cleaned_asin: asin_list.append(cleaned_asin) return asin_list
读取CSV文件(需导入内置csv模块)
import csv def read_asin_from_csv(file_path: str = "asin.csv") -> list: asin_list = [] with open(file_path, "r", encoding="utf-8") as f: reader = csv.reader(f) # 若你的CSV第一行是表头,保留下面这行,否则删除 next(reader) for row in reader: if row: cleaned_asin = row[0].strip() if cleaned_asin: asin_list.append(cleaned_asin) return asin_list
2. 补全邮件发送函数
def sendemail(availability: str, asin: str): # 替换为你自己的发件邮箱配置 SENDER_EMAIL = "你的发件邮箱地址" # 注意:QQ邮箱/163邮箱等需使用授权码而非登录密码,可在邮箱设置中开启SMTP服务获取 SENDER_PWD = "你的邮箱SMTP授权码" SMTP_SERVER = "smtp.qq.com" # 163邮箱替换为smtp.163.com,gmail替换为smtp.gmail.com SMTP_PORT = 465 # SSL端口通用为465 mail_title = f"亚马逊缺货通知:ASIN {asin}" mail_content = f"监控商品ASIN:{asin}\n当前库存状态:{availability}\n商品链接:http://www.amazon.de/dp/{asin}" mail_msg = f"Subject: {mail_title}\n\n{mail_content}".encode("utf-8") with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server: server.login(SENDER_EMAIL, SENDER_PWD) server.sendmail(SENDER_EMAIL, receiver_email_id, mail_msg) print(f"已发送缺货通知,ASIN:{asin}")
3. 修改原有库存检查逻辑
def ReadAsin(): # 按需选择读取TXT还是CSV,这里以TXT为例 asin_list = read_asin_from_txt() # 预设的有货状态列表 in_stock_list = [ 'Only 1 left in stock.', 'Only 2 left in stock.', 'In stock.' ] for asin in asin_list: url = f"http://www.amazon.de/dp/{asin}" print(f"正在检测:{url}") current_status = check(url) print(f"当前状态:{current_status}") # 不在有货列表中即判定为缺货,触发通知 if current_status not in in_stock_list: sendemail(current_status, asin) # 每个ASIN检测间隔5秒,避免请求过快被封IP sleep(5)
注意事项
- 原
check函数中循环sleep的逻辑无效,仅会执行一次就返回结果,可直接删除多余的for循环,改为请求失败时重试即可 - 建议不要将检测频率调得过高,至少间隔10分钟检测一次,避免IP被亚马逊限制访问
- 可新增本地状态缓存逻辑,仅当商品库存状态发生变化时才发送通知,避免重复发信
内容的提问来源于stack exchange,提问作者Richard7791
相关产品推荐
相关产品推荐

