最近在学习GPS数据软件处理,经常需要下载数据练习,反复去网站上很麻烦,于是就写了一个小小的爬虫,用的是韩国的服务器,使用了python中的ftplib库实现的
今天稍微改了一下代码,可以选择卫星系统,支持批量下载,可以选择年份年积日
忘了添加n文件下载功能了,今天补上
#encode=utf8 ''' Created on 2016年10月18日 @author: WangHui ''' from ftplib import FTP import os import traceback class DownLoadGPS(object): __URLon='210.219.33.196' @staticmethod #形参均使用字符串表示 def ListOName(form,year,daily,gnss='gps'): ftp=FTP() ftp.connect(DownLoadGPS.__URLon,timeout=1000000) ftp.login() ftp.cwd('/'+gnss+'/data/daily/'+year+'/'+daily+'/'+year[-2:]+'o/') return ftp @staticmethod def ListNName(form,year,daily,gnss='gps'): ftp=FTP() ftp.connect(DownLoadGPS.__URLon) ftp.login() ftp.cwd('/'+gnss+'/data/daily/'+year+'/'+daily+'/'+year[-2:]+'n/') return ftp @staticmethod #下载文件 #不考虑是什么类型的数据 #只需要文件名和路径和ftp参数 def DownLoadFile(ftp,path='D:\'): #加载第一页的数据 DownLoadGPS.LoadPage(ftp, 1) while True: fileIndex=input('输入 索引(1,2,3,4,5) 开始下载,输入 n+页数(n1) 换页(按q退出) :') if fileIndex=='q' or fileIndex=='Q': break if fileIndex[0]=='n' or fileIndex[0]=='N': DownLoadGPS.LoadPage(ftp, int(fileIndex[1:])) else: ls=fileIndex.split(',') for i in range(len(ls)): try: print('开始下载'+ls[i]) f=open(os.path.join(path,ftp.nlst()[int(i)-1]),'wb') #A RETR request asks the server to send the contents of a file over the data connection already established by the client. #The RETR parameter is an encoded pathname of the file. #The file is either a binary file or a text file, depending on the most recent TYPE request. ftp.retrbinary('RETR '+ftp.nlst()[int(i)-1],f.write) except: print('软件异常,不过不妨事') @staticmethod #加载第index页的数据 def LoadPage(ftp,index,perpage=20): if len(ftp.nlst())==0: print('暂时没有这天数据,q退出') return pagecount=len(ftp.nlst())//perpage+len(ftp.nlst())%perpage start=(index-1)*perpage if start>=len(ftp.nlst()): start=len(ftp.nlst())-1 end=index*perpage if end>len(ftp.nlst()): end=len(ftp.nlst()) print('共%d页%d项,当前正在加载第%d页' %(pagecount,len(ftp.nlst()),index)) for i in range(start,end): print(str(i)+' : '+ftp.nlst()[i]) print('共%d页%d项,当前是第%d页' %(pagecount,len(ftp.nlst()),index)) if __name__=='__main__': gnss=input('输入卫星系统类型(gps,gnss):').lower() if gnss!='gps' and gnss!='gnss': print('请输入正确的卫星系统,系统退出') exit() while True: oorn=input('o文件还是n文件(o/n):') try: year=input('输入年份:') data=input('输入年积日:') if oorn=='o': ftp=DownLoadGPS.ListOName(gnss, year, data,gnss) DownLoadGPS.DownLoadFile(ftp) elif oorn=='n': ftp=DownLoadGPS.ListNName(gnss, year, data,gnss) DownLoadGPS.DownLoadFile(ftp) except: traceback.print_exc() print('格式输入错误') continue isnext=input('是否继续 y/n:') if isnext=='y' or isnext=='Y': continue else: break
这是运行效果图,目前只支持gps和gnss的下载观测数据和卫星星历。