Python爬蟲——解決urlretrieve下載不完整問題且避免用時過長
阿新 • • 發佈:2018-12-15
在這篇部落格中: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)
但是經筆者測試,下載檔案出現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!")
本次分享到此結束,如有不足之處,還請批評指正!歡迎大家交流~~
注意:本人現已開通兩個微信公眾號: 因為Python(微訊號為:python_math)以及輕鬆學會Python爬蟲(微訊號為:easy_web_scrape), 歡迎大家關注哦~~
作者:劍與星辰
來源:CSDN
原文:https://blog.csdn.net/jclian91/article/details/77513289
版權宣告:本文為博主原創文章,轉載請附上博文連結!