爬取亚马逊数据遇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
相关产品推荐
相关产品推荐

