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

使用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)

额外提示

  1. 若后续仍出现拦截,可尝试调整延迟时间(比如改为3-5秒)
  2. 定期检查网站页面结构,电商网站可能会更新元素ID或布局,导致价格提取逻辑失效
  3. 极端情况下可考虑使用代理IP,但需确保符合网站的robots协议及当地法律法规

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:40:50