這裏,我遇到了一個困難。請求大神支個招。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
謝謝你們的關注!