You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:21:01