Python 下载文件时URL检索挂起
我有一个非常简单的脚本,它使用urllib检索zip文件并将其放在我的桌面上。zip文件的大小只有几MB,下载不需要很长时间。但是,脚本似乎没有完成,只是挂起了。是否有办法强制关闭urlretrieve?…或更好的解决方案 该URL为公共ftp大小。ftp可能是原因吗 我正在使用python 2.7.8Python 下载文件时URL检索挂起,python,urllib,Python,Urllib,我有一个非常简单的脚本,它使用urllib检索zip文件并将其放在我的桌面上。zip文件的大小只有几MB,下载不需要很长时间。但是,脚本似乎没有完成,只是挂起了。是否有办法强制关闭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\***\Deskto
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)
您可以将python请求库与请求ftp模块一起使用。它提供了更简单的API和更好的异常处理。请参阅:并且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 我无法将其作为
节点名或提供的服务器名工作,或者不知道您是否有意将regexp用于url和zip_路径而不是字符串?@EriksDobelis不确定您的意思。。。?我对python相当陌生,所以不确定区别…前缀为r的字符串是正则表达式而不是普通字符串。请参阅@EriksDobelis前缀为r的字符串是原始字符串,因此对正则表达式很有帮助。您会发现原始字符串也是文件名和URL的理想选择。