1. 程式人生 > >Python爬蟲——解決urlretrieve下載不完整問題且避免用時過長

Python爬蟲——解決urlretrieve下載不完整問題且避免用時過長

在這篇部落格中: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 
版權宣告:本文為博主原創文章,轉載請附上博文連結!