医学教育网批量资源下载程序之——ftp下载失败问题

简介:

这里,我遇到了一个困难。请求大神支个招。

我通过遍历网站,获得了我所要下载的资源链接。每个资源文件看起来都是从ftp文件服务器上去抓取的。
233509_WVzR_243525.png

上面的资源链接为:ftp://med:w7o0nse@60.2.237.172/med66/2014/yaoshi/jichu/yxzh/word/yxzh_jy0501.exe

大神可以帮忙试试看。

我在这方面是菜鸟,我直接用下载一般文件的方式尝试获取文件:


    resp = urllib2.urlopen(url)
    with open(filename, 'w') as wfile:
        wfile.write(resp.read())

运行报错:

  File "/usr/lib/python2.6/ftplib.py", line 223, in voidresp
    resp = self.getresp()
  File "/usr/lib/python2.6/ftplib.py", line 218, in getresp
    raise error_perm, resp
urllib2.URLError: <urlopen error ftp error: 550 Failed to change directory.>
好像意思是说路径不存在。
看来是我想得太简单了。

我直接用浏览器点网络提供的下载链接进行下载:
234051_Bs4U_243525.png

确实又能下载下来。

我再试了一下,直接将"ftp://med:w7o0nse@60.2.237.172/med66/2014/yaoshi/jichu/yxzh/word/yxzh_jy0501.exe"粘贴到浏览器的地址栏,Enter。结果也能正常下载文件。就然不是用Firefox,用Konqueror浏览器也可以。

哪为什么流览器都办到的事儿,我用程序就死活办不了呢?没理由呀!

我在网上查找资料,对ftp地址了解了一下。原来med为用户名,w7o0nse为登陆密码。于是我用ftp命令再试一下:


ftp> open 60.2.237.172
Connected to 60.2.237.172 (60.2.237.172).
220 ��ӭ�����л�������У����վ��
Name (60.2.237.172:hevake_lcj): med
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /med66/
250 Directory successfully changed.
ftp> cd /med66/2014/yaoshi/jichu/yxzh/word
550 Failed to change directory.
ftp> get yxzh_jy0101.exe
local: yxzh_jy0101.exe remote: yxzh_jy0101.exe
227 Entering Passive Mode (60,2,237,172,232,214).
150 Opening BINARY mode data connection for yxzh_jy0101.exe (-1 bytes).
226 File send OK.

结果我查看当前目录,果真有一个叫yxzh_jy0101.exe的文件,但是文件大小为0,等于是空文件。

OOps~


后记:

其实并不是用urllib2下载方法的问题,确实是有部分链接是失效的。这种情况下,我们可以尝试别的链接。

如下为我写的python下载方法,供大家参考:


def download_file(url, filename):
    print('Download : ' + url)
    print(' Save as : ' + filename)
    print('  Process:       '),
    def call_back(blocknum, blocksize, totalsize):
        if totalsize == 0:
            return
        percent = 100.0 * blocknum * blocksize / totalsize
        if (percent > 100.0):
            percent = 100.0
        print('\b'*7 + '%5.1f%%' % percent),
 
    try:
        temp_filename = filename + '.tmp'
        urllib.urlretrieve(url, temp_filename, call_back)
        os.rename(temp_filename, filename)
        print('\n== Done ==')
        return True
    except:
        print('\n== Error ==')
        return False
    pass

谢谢大家的关注!
目录
相关文章
|
9月前
|
网络协议 C# 文件存储
C# 利用FluentFTP实现FTP上传下载功能
C# 利用FluentFTP实现FTP上传下载功能
184 0
C# 利用FluentFTP实现FTP上传下载功能
|
JavaScript
使用nodejs连接ftp上传下载
使用nodejs连接ftp,进行ftp的操作,包括列表、上传、下载以及速率等。
使用nodejs连接ftp上传下载
|
Windows
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
1651 0
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
|
1月前
|
Shell Python Windows
通过Python实现win11环境下FTP的上传与下载
通过Python实现win11环境下FTP的上传与下载
|
2月前
|
Java
java上传、下载、预览、删除ftp服务器上的文件
java上传、下载、预览、删除ftp服务器上的文件
|
7月前
|
Apache
基于commons-net实现ftp创建文件夹、上传、下载功能.
基于commons-net实现ftp创建文件夹、上传、下载功能.
106 0
|
8月前
|
Java
Java——通过Java代码从ftp服务器下载文件
Java——通过Java代码从ftp服务器下载文件
|
4月前
|
API 分布式数据库 数据安全/隐私保护
C/C++ 实现FTP文件上传下载
FTP(文件传输协议)是一种用于在网络上传输文件的标准协议。它属于因特网标准化的协议族之一,为文件的上传、下载和文件管理提供了一种标准化的方法,在Windows系统中操作FTP上传下载可以使用WinINet库,WinINet(Windows Internet)库是 Windows 操作系统中的一个网络 API 库,用于访问 Internet 上的资源。它提供了一组函数,使开发人员能够创建网络应用程序,例如通过 HTTP 协议下载文件,发送 HTTP 请求,处理 cookie 等,本章将通过使用WinInet所提供的接口实现FTP文件上传下载功能,使得用户可以通过代码的方式上传或下载文件与FTP
72 1
C/C++ 实现FTP文件上传下载
|
8月前
|
Shell
从 FTP 服务器下载文件
从 FTP 服务器下载文件
54 0
|
10月前
|
Shell
从FTP服务器下载文件
从FTP服务器下载文件
67 0