??在這篇博客中:http://blog.csdn.net/Innovation_Z/article/details/51106601 捌肴,作者利用遞歸方法解決了urlretrieve下載文件不完整的方法执泰,其代碼如下:
def auto_down(url,filename):
try:
urllib.urlretrieve(url,filename)
except urllib.ContentTooShortError:
print 'Network conditions is not good.Reloading.'
auto_down(url,filename)
??但是經(jīng)筆者測試灵迫,下載文件出現(xiàn)urllib.ContentTooShortError且重新下載文件會存在用時過長的問題飘庄,而且往往會嘗試好幾次,甚至十幾次州叠,偶爾會陷入死循環(huán)后众,這種情況是非常不理想的。為此祟昭,筆者利用socket模塊缕坎,使得每次重新下載的時間變短,且避免陷入死循環(huán)篡悟,從而提高運行效率谜叹。
??以下為代碼:
import socket
import urllib.request
#設(shè)置超時時間為30s
socket.setdefaulttimeout(30)
#解決下載不完全問題且避免陷入死循環(huán)
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!")
??本次分享到此結(jié)束匾寝,如有不足之處,還請批評指正荷腊!歡迎大家交流~~