亚马逊每日特惠爬虫返回空列表,求实现商品信息抓取
修复亚马逊每日特惠爬虫返回空列表的问题
原代码的核心问题
- 未定义请求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
相关产品推荐
相关产品推荐

