真是越看越喜歡python啊,想要瞭解它提供的http和ftp下載功能,原來是如此的簡單。
1、相應模組
ftplib模組定義了FTP類和一些方法,用以進行用戶端的ftp編程。我們可用python編寫一個自已的ftp用戶端程式,用於下載檔案或鏡像網站。如果想瞭解ftp協議的詳細內容,請參考RFC959或是查看python協助吧。
Urllib模組提供了非常進階的介面來從網路上抓取資料,主要使用到的是urlopen函數,跟open函數功能比較相似,這裡我們要用到urlretrieve()函數來實現從http伺服器上下載檔案。
2、執行個體實現FTP下載和上傳
from ftplib import FTP
import sys
def ftpdownload(path,file):
ftp = FTP()
ftp.set_debuglevel(2) #開啟調試層級2,顯示詳細資料
ftp.connect('**IP**') #串連ftp伺服器
ftp.login(user,password) #輸入使用者名稱和密碼
print ftp.getwelcome() #顯示ftp伺服器的歡迎資訊
ftp.cwd(path) #選擇操作目錄
bufsize = 1024 #設定緩衝區大小
file_handler = open(file,'wb').write #以寫入模式在本地開啟檔案
strBuffer = 'RETR ' + file
ftp.retrbinary(strBuffer,file_handler,bufsize) #接收伺服器上檔案並寫入本地檔案
ftp.set_debuglevel(0) #關閉調試
ftp.quit() #退出ftp伺服器
if __name__ == '__main__':
path1 = 'download/test/'
file1 = 'test1.rar'
if len(sys.argv) == 3:
try:
ftpdownload(sys.argv[1],sys.argv[2]) #命令列輸入檔案在ftp上的路徑和檔案名稱,
except IOError:
print "please input the correct path and filename"
else:
ftpdownload(path1,file1)
上傳檔案非常類似,對應的上傳函數storbinary。
from ftplib import FTP
import sys,os
def ftpdownload(path,file):
ftp = FTP()
ftp.set_debuglevel(2)
ftp.connect('**IP**')
ftp.login(user,password)
print ftp.getwelcome()
ftp.cwd(path)
bufsize = 1024
file_handler = open(file,'rb') #讀方式開啟上傳檔案
strBuffer = 'RETR ' + file
ftp.storbinary(strBuffer,file_handler,bufsize) #上傳檔案
ftp.set_debuglevel(0)
ftp.quit()
if __name__ == '__main__':
path1 = 'download/test/'
file1 = '4.jpg'
if len(sys.argv) == 3:
try:
ftpdownload(sys.argv[1],sys.argv[2])
except IOError:
print "please input the correct path and filename"
else:
ftpdownload(path1,file1)
3、執行個體實現HTTP下載
http下載真的是超級簡單,一個函數就搞定,這裡通過傳入要下載的地址下載檔案,並計算下載時間,我想的感覺是比較笨的計算時間的方法,不知道誰有高招呢?
import urllib
import sys
def download(url):
starttime = datetime.datetime.now()
print 'download start time is %s'% starttime
urllib.urlretrieve(url,'test.exe') #開始下載,test.exe為下載後儲存的檔案名稱
endtime = datetime.datetime.now()
print 'download end time is %s'% endtime
print 'you download the file use time %s s' % (endtime - starttime).seconds
if __name__ == '__main__':
if len(sys.argv) == 2:
try:
download(sys.argv[1])
except IOError:
print 'url not found'
else:
download('http://www.python.org/‘')
vivilisa write in 03.20.2009