urlretrieve在下载文件时挂起

时间:2015-07-01 14:54:32

标签: python urllib

我有一个非常简单的脚本,它使用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)

2 个答案:

答案 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-ftphttp://docs.python-requests.org/en/latest/