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

爬取亚马逊数据遇ConnectionError,请求重试超限问题求助

问题分析与解决方法

核心错误原因

你遇到的ConnectionError: HTTPSConnectionPool(host='www.amazon.comhttps', port=443): Max retries exceeded错误,根源是URL拼接逻辑错误:

  • 你爬取的是亚马逊印度站(amazon.in)的搜索页面,但请求商品详情页时,错误地把商品链接拼到了amazon.com域名后;
  • 从搜索页获取的link本身是完整的亚马逊印度站URL(比如https://www.amazon.in/dp/XXX),拼接后变成了https://www.amazon.comhttps://www.amazon.in/dp/XXX,导致请求的主机名变成无效的www.amazon.comhttps,无法建立正常连接。

具体修复步骤

1. 修正URL拼接逻辑

替换循环中的请求代码,统一使用亚马逊印度站域名,并借助urljoin自动处理相对/绝对路径的拼接:
首先导入urllib.parse模块,然后修改请求部分:

from urllib.parse import urljoin

# ... 其余代码不变

for link in links_list:
    # 基于原搜索页URL拼接商品链接,自动适配相对/绝对路径
    full_url = urljoin(URL, link)
    try:
        new_webpage = requests.get(full_url, headers=HEADERS, timeout=10)
        new_webpage.raise_for_status()  # 主动触发HTTP错误,方便捕获
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        # 为该商品填充空值,避免数据结构混乱
        d['title'].append("")
        d['price'].append("")
        d['rating'].append("")
        d['reviews'].append("")
        d['availability'].append("请求失败")
        continue
    new_soup = BeautifulSoup(new_webpage.content, "html.parser")
    
    d['title'].append(get_title(new_soup))
    d['price'].append(get_price(new_soup))
    d['rating'].append(get_rating(new_soup))
    d['reviews'].append(get_review_count(new_soup))
    d['availability'].append(get_availability(new_soup))

2. 修复numpy未导入的问题

代码末尾使用了np.nan但未导入numpy库,需要在开头添加:

import numpy as np

3. 提升请求稳定性

  • 添加超时时间,避免请求无限等待:在requests.get中加入timeout=10参数
  • 增加重试机制,应对临时网络波动:
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# 在main函数中创建session并配置重试
session = requests.Session()
retry = Retry(total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504])
adapter = HTTPAdapter(max_retries=retry)
session.mount('https://', adapter)
session.mount('http://', adapter)

# 后续请求改用session.get
webpage = session.get(URL, headers=HEADERS)
# ...
new_webpage = session.get(full_url, headers=HEADERS, timeout=10)

额外注意事项

  • 亚马逊有严格的反爬机制,频繁请求可能被封禁IP,建议添加随机延迟:import time; import random; time.sleep(random.uniform(1,3))
  • 替换占位符here will be my user agent为真实的浏览器User-Agent,可以通过浏览器开发者工具查看自己访问亚马逊时的请求头获取。

内容的提问来源于stack exchange,提问作者FARINA KHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:05:10