我正在尝试检查链接是否断开。为此,我使用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
感谢任何建议,谢谢!
答案 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