2015-07-01 89 views
1

我有一個非常簡單的腳本,它使用urllib來檢索zip文件並將其放在我的桌面上。該zip文件只有幾MB大小,並且不需要很長時間下載。然而,腳本似乎並沒有完成,它只是掛起。有沒有辦法強行關閉urlretrieve?或者更好的解決方案?urlretrieve在下載文件時掛起

該URL是公用的ftp大小。 ftp也許是原因?

我使用python 2.7.8。

url = r'ftp://ftp.ngs.noaa.gov/pub/DS_ARCHIVE/ShapeFiles/IA.ZIP' 
zip_path = r'C:\Users\***\Desktop\ngs.zip' 

urllib.urlretrieve(url, zip_path) 

在此先感謝!

---編輯---

能夠使用FTPLIB來完成任務......

import os 
from ftplib import FTP 
import zipfile 

ftp_site = 'ftp.ngs.noaa.gov' 
ftp_file = 'IA.ZIP' 
download_folder = '//folder to place file' 
download_file = 'name of file' 
download_path = os.path.join(download_folder, download_file) 

# Download file from ftp 
ftp = FTP(ftp_site) 
ftp.login() 
ftp.cwd('pub/DS_ARCHIVE/ShapeFiles') #change directory 
ftp.retrlines('LIST') #show me the files located in directory 
download = open(download_path, 'wb') 
ftp.retrbinary('RETR ' + ftp_file, download.write) 
ftp.quit() 
download.close() 

# Unzip if .zip file is downloaded 
with zipfile.ZipFile(download_path, "r") as z: 
    z.extractall(download_folder) 
+0

我無法將它作爲'nodename或servername提供或不知道的'' – ForceBru

+0

您是否故意將regexp用於url和zip_path而不是字符串? –

+0

@EriksDobelis不確定你的意思是...?我相當新的python,所以不知道差異... –

回答

1

urllib對錯誤捕獲和調試的支持非常差。 urllib2是一個更好的選擇。該urlretrieve當量的urllib2是:

resp = urllib2.urlopen(im_url) 
with open(sav_name, 'wb') as f: 
    f.write(resp.read()) 

而且趕上錯誤是:

urllib2.URLError, urllib2.HTTPError, httplib.HTTPException 

而且你還可以趕上socket.error的情況下,網絡已關閉。