ConnectionResetError:[Errno 104]对等方从特定网站重置连接| Python3

时间:2020-05-15 22:50:36

标签: python python-3.x python-requests

我正在尝试检查链接是否断开。为此,我使用while循环从字典列表中发送元素(链接),并且使用urllib.request。目标是从列表中仅删除断开的链接。列表包含来自https://jamanetwork.com/的不同文章的链接,我希望能够下载现有的文章。

但是,我收到一个 ConnectionResetError:[Errno 104]对等重置连接。 当我尝试测试来自https://jamanetwork.com/https://jamanetwork.com/上每个页面的链接时,只会出现该错误,但是代码似乎可以在其他网站上正常工作。

我的问题是:我在这里缺少什么还是服务器端问题?

这是我的代码(python3):

import urllib.request

i = 0
while i < (len(dicts)):
  url = dicts[i]['link']
  try:
    with urllib.request.urlopen(url) as f:
    status = f.getcode()
    i += 1
 except:
    del dicts[i]

这是一个追溯:

https://jamanetwork.com/
---------------------------------------------------------------------------

ConnectionResetError                      Traceback (most recent call last)
<ipython-input-59-8d93b45dbd14> in <module>()
     22 print(url)
     23 
---> 24 with urllib.request.urlopen("https://jamanetwork.com/") as f:
     25   status = f.getcode()
     26   print(status)

12 frames
/usr/lib/python3.6/ssl.py in read(self, len, buffer)
    629         """
    630         if buffer is not None:
--> 631             v = self._sslobj.read(len, buffer)
    632         else:
    633             v = self._sslobj.read(len)

ConnectionResetError: [Errno 104] Connection reset by peer

感谢任何建议,谢谢!

1 个答案:

答案 0 :(得分:0)

基于this answer。您无法解决服务器错误。但是,您可以处理。

因此您无能为力,这是服务器的问题。 但是您可以使用try ..除了块来处理该异常:

尝试此代码:

import urllib.request

i = 0
while i < (len(dicts)):
    url = dicts[i]['link']
    try:
        f = urllib.request.urlopen(url)
    except:
        del dicts[i]
    else:
        with f:
            status = f.getcode()
            i += 1