使用Python爬取Unieuro网站时出现ConnectionError如何解决?
解决Unieuro网页爬取时频繁出现的ConnectionError问题
你用Python爬取意大利电商Unieuro商品价格时,已设置User-Agent但程序仅偶尔正常运行,频繁抛出以下错误:
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
问题原因及解决思路
这类错误通常是网站反爬拦截、临时网络波动或请求行为不够“模拟真实用户”导致的,以下是针对性的解决方法:
- 添加请求重试机制:针对临时网络故障或服务器过载,自动重试请求
- 增加请求延迟:降低请求频率,避免触发网站反爬阈值
- 完善请求头:补充更多浏览器常用头信息,让请求更接近真实用户访问
- 使用会话保持连接:复用TCP连接,减少握手次数提升稳定性
修改后的完整代码
from bs4 import BeautifulSoup import requests import time from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry def get_unieuro_price(url): # 配置会话与重试策略 session = requests.Session() retry_strategy = Retry( total=3, # 总重试次数 backoff_factor=1, # 重试间隔递增(1s→2s→4s) status_forcelist=[429, 500, 502, 503, 504] # 触发重试的状态码 ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount('https://', adapter) session.mount('http://', adapter) # 模拟真实浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept-Language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7', 'Referer': 'https://www.unieuro.it/online/', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' } try: time.sleep(2) # 添加请求延迟,避免频繁访问 pagina = session.get(url, headers=headers, timeout=10) pagina.raise_for_status() # 主动抛出HTTP状态码异常 soup = BeautifulSoup(pagina.content, 'html.parser') prezzo_element = soup.find(id='features') if not prezzo_element: print('无法定位价格元素,可能网站结构已更新') return prezzo = prezzo_element.get_text() prezzo = prezzo.split('Iva Inclusa')[0] if '%' in prezzo: prezzo = prezzo.split('%')[-1].strip()[:7] print(f'折扣价: {prezzo}') # 此处添加发送折扣价邮件的逻辑 else: print('Prezzo non scontato fratellì') # 此处添加发送原价邮件的逻辑 except requests.exceptions.RequestException as e: print(f'请求失败: {str(e)}') if __name__ == '__main__': target_url = 'https://www.unieuro.it/online/Giochi-Playstation-5/The-Last-of-Us-Parte-I-pidSON9405597' get_unieuro_price(target_url)
额外提示
- 若后续仍出现拦截,可尝试调整延迟时间(比如改为3-5秒)
- 定期检查网站页面结构,电商网站可能会更新元素ID或布局,导致价格提取逻辑失效
- 极端情况下可考虑使用代理IP,但需确保符合网站的robots协议及当地法律法规
内容的提问来源于stack exchange,提问作者Forty966996
相关产品推荐
相关产品推荐

