博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
医学教育网批量资源下载程序之——ftp下载失败问题
阅读量:7177 次
发布时间:2019-06-29

本文共 2272 字,大约阅读时间需要 7 分钟。

hot3.png

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

我通过遍历网站,获得了我所要下载的资源链接。每个资源文件看起来都是从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.172Connected to 60.2.237.172 (60.2.237.172).220 ��ӭ�����л�������У����վ��Name (60.2.237.172:hevake_lcj): med331 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/word550 Failed to change directory.ftp> get yxzh_jy0101.exelocal: yxzh_jy0101.exe remote: yxzh_jy0101.exe227 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

谢谢大家的关注!

转载于:https://my.oschina.net/hevakelcj/blog/368766

你可能感兴趣的文章
Linux命令之kill
查看>>
Asp.Net SignalR Hub类中的操作详解
查看>>
附上解决迅雷9及迅雷极速版任何资源下载任务出错、内容违规问题
查看>>
hadoop3: mkdir: cannot create directory `/usr/local/hadoop/bin/../logs’: Permission denied
查看>>
高阶函数与面向对象继承的比较
查看>>
群雄逐鹿的移动互联网时代【转载】
查看>>
【排序】InsertSort
查看>>
[c++11]多线程编程(五)——unique_lock
查看>>
漫谈promise使用场景
查看>>
Design Pattern的万剑归宗 => Mediator
查看>>
Javascript中的原型继承的一些看法与见解
查看>>
HackerRank:JavaScript 是最知名的编程语言
查看>>
Linux修改本地时间
查看>>
elasticsearch字符串包含查询
查看>>
5- Flask构建弹幕微电影网站-项目分析、搭建目录及模型设计
查看>>
Mysql四种常见数据库引擎
查看>>
《Kotin 极简教程》第7章 面向对象编程(OOP)(1)
查看>>
Chrome吃内存的能力可不是说着玩的!
查看>>
iStaing获500万美元投资,VR室内设计离我们还远吗?
查看>>
Java日志框架-Spring中使用Logback(Spring/Spring MVC)
查看>>