ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

今天做作业的时候,爬取网站出现错误

D:\python\python.exe D:/python/斗图啦爬取.py
Traceback (most recent call last):
  File "D:\python\斗图啦爬取.py", line 34, in <module>
    urllib.request.urlretrieve(img,path)
  File "D:\python\lib\urllib\request.py", line 239, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "D:\python\lib\urllib\request.py", line 214, in urlopen
    return opener.open(url, data, timeout)
  File "D:\python\lib\urllib\request.py", line 517, in open
    response = self._open(req, data)
  File "D:\python\lib\urllib\request.py", line 534, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "D:\python\lib\urllib\request.py", line 494, in _call_chain
    result = func(*args)
  File "D:\python\lib\urllib\request.py", line 1375, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "D:\python\lib\urllib\request.py", line 1350, in do_open
    r = h.getresponse()
  File "D:\python\lib\http\client
解决 `ConnectionResetError: [WinError 10054] 远程主机强迫关闭一个现有连接` 的方法如下: - **添加时间间隔**:在代码中添加时间模块,使代码每隔一段时间爬取,避免短时间内发送大量请求,可使用 `time.sleep()` 函数。示例代码如下: ```python import time # 每一个循环暂停2秒 time.sleep(2) ``` - **关闭请求响应**:在 `request` 后面写入关闭操作,即 `response.close()`,避免资源占用导致异常 [^2][^4]。 - **设置超时时间**:设置 `socket` 默认的等待时间,在 `read` 超时后能自动往下继续执行,使用 `socket.setdefaulttimeout(t_default)` [^2][^4]。示例代码如下: ```python import socket # 设置默认超时时间为10秒 socket.setdefaulttimeout(10) ``` - **捕获异常继续循环**:防止循环时某一个请求失败导致循环退出,从而使程序退出 [^2]。示例代码如下: ```python import requests urls = [...] for url in urls: try: response = requests.get(url) # 处理响应 except ConnectionResetError: continue ``` - **随机更换代理**:对于公共网址的请求,可随机更换代理,避免被服务器识别为单一来源的大量请求 [^3]。示例代码如下: ```python import requests proxies = { 'http': 'http://proxy.example.com:8080', 'https': 'http://proxy.example.com:8080' } response = requests.get('http://example.com', proxies=proxies) ``` - **修改服务限制条件**:如果是对自己的服务请求出现该错误,可通过修改服务请求次数限制条件,添加白名单等方式来处理 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值