我有一个非常简单的脚本,它使用urllib检索zip文件并将其放在我的桌面上。该zip文件只有几MB大小,下载时间不长。但是,脚本似乎没有完成,它只是挂起。有没有办法强制关闭urlretrieve?...或更好的解决方案?
网址是公共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 :(得分:3)
urllib对错误捕获和调试的支持非常糟糕。 urllib2是一个更好的选择。 urllib2中的urlretrieve
等价物是:
resp = urllib2.urlopen(im_url)
with open(sav_name, 'wb') as f:
f.write(resp.read())
要抓住的错误是:
urllib2.URLError, urllib2.HTTPError, httplib.HTTPException
如果网络出现故障,您还可以捕获socket.error。
答案 1 :(得分:0)
您可以将python请求库与requests-ftp模块一起使用。它提供了更简单的API和更好的流程异常。请参阅:https://pypi.python.org/pypi/requests-ftp和http://docs.python-requests.org/en/latest/