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

亚马逊每日特惠爬虫返回空列表,求实现商品信息抓取

修复亚马逊每日特惠爬虫返回空列表的问题

原代码的核心问题

  • 未定义请求URL:亚马逊美国站每日特惠的官方页面为https://www.amazon.com/gp/goldbox,原代码缺少这个关键变量
  • 请求头格式错误:HEADERS应该是字典类型,而非字符串
  • 商品容器选择器错误:原代码选中的仅为图片容器,无法获取价格、标题等核心信息
  • 未配置代理:你提到已配置代理,但代码中未添加proxies参数
  • 无异常处理:提取元素时一旦某个标签找不到,会直接中断循环
  • 无分页逻辑:单页商品数量有限,无法抓取到最多1000条数据

修复后的完整代码

import requests
from bs4 import BeautifulSoup

def scrape_amazon_deals(max_items=1000):
    # 亚马逊美国站每日特惠URL
    base_url = "https://www.amazon.com/gp/goldbox"
    # 正确格式的请求头,替换成你的真实UA等信息
    HEADERS = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
        "Accept-Language": "en-US,en;q=0.9"
    }
    # 代理配置,替换成你的代理信息
    proxies = {
        "http": "http://your-proxy:port",
        "https": "https://your-proxy:port"
    }
    
    deals = []
    page = 1
    
    while len(deals) < max_items:
        # 构造分页URL
        url = f"{base_url}?page={page}"
        try:
            # 发送请求,添加代理
            response = requests.get(url, headers=HEADERS, proxies=proxies, timeout=10)
            # 检查请求是否成功
            response.raise_for_status()
            soup = BeautifulSoup(response.content, 'html.parser')
            
            # 正确的商品容器选择器,适配亚马逊Goldbox页面结构
            deal_elements = soup.find_all('div', {'class': 'a-section a-spacing-base'})
            
            # 若无更多商品,终止循环
            if not deal_elements:
                break
            
            for deal in deal_elements:
                # 异常处理,避免单个商品信息缺失导致程序中断
                try:
                    productname = deal.find('span', {'class': 'a-size-base-plus a-color-base a-text-normal'}).text.strip()
                    # 原价可能不存在,做容错处理
                    original_price_elem = deal.find('span', {'class': 'a-text-strike'})
                    productorgprice = original_price_elem.find('span', {'class': 'a-offscreen'}).text.strip() if original_price_elem else "无原价"
                    # 特惠价提取
                    deal_price_elem = deal.find('span', {'class': 'a-price'})
                    productdealprice = deal_price_elem.find('span', {'class': 'a-offscreen'}).text.strip() if deal_price_elem else "无特惠价"
                    # 商品链接
                    product_link_elem = deal.find('a', {'class': 'a-link-normal'})
                    productpurchaselink = "https://www.amazon.com" + product_link_elem['href'] if product_link_elem else ""
                    # 图片链接
                    image_elem = deal.find('img', {'class': 's-image'})
                    productimageurl = image_elem['src'] if image_elem else ""
                    
                    deals.append({
                        'productname': productname,
                        'productorgprice': productorgprice,
                        'productdealprice': productdealprice,
                        'productpurchaselink': productpurchaselink,
                        'productimageurl': productimageurl
                    })
                    
                    # 达到最大数量则停止
                    if len(deals) >= max_items:
                        break
                except Exception as e:
                    # 单个商品提取失败,跳过继续处理下一个
                    continue
            
            page += 1
        except Exception as e:
            print(f"请求第{page}页失败: {str(e)}")
            break
    
    return deals

# 测试调用
if __name__ == "__main__":
    amazon_deals = scrape_amazon_deals()
    print(amazon_deals[:5])  # 打印前5条数据

关键修复说明

  • 新增分页逻辑,自动翻页直到抓取满1000条或无更多商品
  • 修正请求头格式,添加真实的User-Agent(需替换成你自己的)
  • 更换商品容器选择器,确保能获取完整的商品信息
  • 添加代理配置(需替换成你的代理地址)
  • 增加异常处理,单个商品信息提取失败时自动跳过,不会中断整个爬虫
  • 适配亚马逊页面结构,对可能不存在的原价做容错处理
  • 输出字段与你期望的示例完全匹配

内容的提问来源于stack exchange,提问作者meruvu likith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:53:27