醫學教育網批量資源下載程序之——ftp下載失敗問題

這裏,我遇到了一個困難。請求大神支個招。python

我經過遍歷網站,得到了我所要下載的資源連接。每一個資源文件看起來都是從ftp文件服務器上去抓取的。

shell

上面的資源連接爲: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.>
好像意思是說路徑不存在。
看來是我想得太簡單了。url

我直接用瀏覽器點網絡提供的下載連接進行下載:

code

確實又能下載下來。ci

我再試了一下,直接將"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

謝謝你們的關注!

相關文章
相關標籤/搜索