https://blog.csdn.net/jclian91/article/details/77513289
但是經筆者測試,下載文件出現urllib.ContentTooShortError且重新下載文件會存在用時過長的問題,而且往往會嘗試好幾次,甚至十幾次,偶爾會陷入死循環,這種情況是非常不理想的。為此,筆者利用socket模塊,使得每次重新下載的時間變短,且避免陷入死循環,從而提高運行效率。
以下為代碼:
import socket
import urllib.request
#設置超時時間為30s socket.setdefaulttimeout(30) #解決下載不完全問題且避免陷入死循環 try: urllib.request.urlretrieve(url,image_name) except socket.timeout: count = 1 while count <= 5: try: urllib.request.urlretrieve(url,image_name) break except socket.timeout: err_info = 'Reloading for %d time'%count if count == 1 else 'Reloading for %d times'%count print(err_info) count += 1 if count > 5: print("downloading picture fialed!")