开发者社区> 李名赫> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

医学教育网批量资源下载程序之——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

谢谢大家的关注!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
1.3【微信小程序全栈开发课程】小程序账号注册、开发工具下载安装
1、注册小程序 (1)注册小程序账号 点击下面注册地址开始注册 https://mp.weixin.qq.com/wxopen/waregister?action=step1 第一步:完善账号信息,选择一个自己的邮箱注册 第二步:进行邮箱激活,登录邮箱,点击激活链接 第三步:用户信息登记,确认主体类型,我选择的是「个人」类型 66
32 0
情人节福利,恋爱话术微信小程序它来了(开源,看了就懂~,2万字真香警告)
情人节福利,恋爱话术微信小程序它来了(开源,看了就懂~,2万字真香警告)
124 0
《算法设计编程实验:大学程序设计课程与竞赛训练教材》——导读
全书以知识单元为基本构件,各单元既保持循序渐进的顺序又相对独立,既可拆卸重组、各取所需,又可在此基础上推广或创新,便于各学校按照不同的层次要求组织教学和培训活动。
808 0
微信小程序开发资源整理
有兴趣学习微信小程序开发的可以关注简书专题 微信小程序开发 由于微信已经开发文档和开发工具了,所以下面的内容用处不大了。 具体参考:http://mp.weixin.qq.com/wiki/ 这篇文章只是资源的搬运工, 感谢各位大神的无私奉献。 由于微信小程序只邀请了200个大V内测,但是这些大V好多都是不写代码的CTO了,让真正想学习些代码的灰常着
1193 0
2.QT中使用资源文件,程序打包
 1 程序中使用资源文件 A  一个QT空项目 B  右击项目,添加新文件 添加后的效果是 C  右击main.prc,选择“添加现有项”,找到要使用的资源文件。最终的效果是: D 使用qrc文件 T27Resource.pro RE
1117 0
+关注
李名赫
博主从事的是物联网行业,目前在某知名智能家居科技公司担任家庭智能中心研发主管。欢迎交流!
147
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载