Python调用IDM批量下载GOCI数据

目录

  1. 使用命令行调用IDM
  2. GOCI数据的下载方法
  3. GOCI数据下载链接的规律
  4. Python调用IDM批量下载GOCI数据

建了一个QQ群,大家可以在里边聊聊水色遥感数据下载和数据处理方面的事情:1087024529

我在另一篇博客里制作了一个拥有图形用户界面的程序,供大家参考:GOCI数据下载–基于Tkinter制作图形用户界面程序进行下载


2020-12-23更新:
1.http://kosc.kiost.ac.kr/eng/p10/kosc_p11.html已无法检索数据
2.http://222.236.46.45数据存储路径发生改变,但数据下载思路不变,博客中并未更新。

1.使用命令行调用IDM

IDM是一款优秀的下载器,其优点这里不在赘述。请大家登录其官方网站购买、下载、安装正版软件(http://www.internetdownloadmanager.com)。

IDM提供了使用命令行调用的接口,官方说明文档见:https://www.internetdownloadmanager.com/support/command_line.html
这里做一个简单翻译:

	使用:
	idman /s
	或
	idman /d URL [/p local_path] [/f local_file_name] [/q] [/h][/n] [/a]
	可以进行下载
	参数解释:
	/d URL  #根据URL下载文件
	/s      #开始下载队列中的任务
	/p      #定义文件要存储在本地的地址
	/f      #定义文件存储在本地的文件名
	/q      #下载成功后IDM将退出。
	/h      #下载成功后IDM将挂起你的链接
	/n      #当IDM不出问题时启动静默模式
	/a      #添加指定文件到/d的下载队列,但是不进行下载

可以打开CMD窗口,根据需求进行文件下载。在Python中可以调用命令行进行下载,在第三部分予以说明。

2.GOCI数据的下载方法

GOCI是搭载在韩国静止卫星COMS上的水色传感器。其介绍可以在其官网http://kosc.kiost.ac.kr/eng/上查看。相信大家来看这篇博客之前就已经对GOCI数据有详细的了解,这里不在介绍。
韩国水色卫星官网
在该网站可以下载GOCI数据,包括L1级数据和L2级数据(还有其他卫星数据,大家可以自行探索),但是该网站有时候可能无法成功访问。可以通过该网站下载数据:http://222.236.46.45
在这里插入图片描述
该网站也可以下载GOCI的L1级和L2级数据及其他卫星数据,这里只介绍下载GOCI-L1级数据的方法。大家根据需要自行探索。
依次点击:nfsdb->COMS->GOCI。可以看到如下界面:
在这里插入图片描述
这里的1.0、2.0就是代表L1级产品和L2级产品。我们下载L1级数据,点击1.0后可以看到如下界面:
在这里插入图片描述
没错,这里的数字就是表示的年份,根据自己需要下载的日期,依次点击即可。这里以下载2020年1月1日的数据为例,点击进入该日的数据目录:
在这里插入图片描述
这里列出了该日的所有L1级数据。根据需要可以点击下载。

3.GOCI数据的下载链接规律

第二部分介绍了单个GOCI数据的下载方法。下面我们来介绍GOCI的下载链接的规律,以达到批量下载的目的。在数据目录中右键单击任一数据,复制链接。

http://222.236.46.45/nfsdb/COMS/GOCI/1.0/2020/01/01/L1B/COMS_GOCI_L1B_GA_20200101001642.he5.zip

通过观察,我们可以看到,该链接包括了所需文件的日期和文件名。可以总结出链接的格式如下:

http://222.236.46.45/nfsdb/COMS/GOCI/1.0/yyyy/mm/dd/L1B/filename

yyyy表示年份,mm代表月份,dd表示天。filename表示文件名。也就是说,我们只要知道所要下载数据的年份、月份、天,文件名就可以下载我们要的数据。年月日都可以准确的指定。但是文件名却不容易构造。

有经验的小伙伴知道遥感数据的文件名一般也是有规律的。何况GOCI是一颗静止卫星,其卫星位置是固定的,应该更容易构造。

但经过观察,GOCI的成像时间在每个小时存在差异。因此不能简单的构造。但是,我们能够在浏览器中查看到某一天的所有文件名。这时想到使用Python对网页经行爬取,获取文件名。然后构造出下载链接。

4.Python调用IDM批量下载GOCI数据

根据前三部分的介绍。可以总结出使用Python调用IDM批量下载GOCI数据的步骤:
a.根据需要数据的日期,爬取网页获得文件名;
b.根据日期和文件名构造下载链接;
c.根据下载链接,在Python自动调用IDM下载数据。

我们先看某一日期网页的HTML代码:
在这里插入图片描述
我们只要获取标签a的href值,并加上‘http://222.236.46.45’即可构造出下载链接。值得注意的是,第一个标签a是返回上一级目录,应该剔除。

我这里以下载一天的数据为例,要下载多天的数据,自己可以写一个循环。

import os
from subprocess import call #用于调用CMD命令行
import time
from datetime import datetime
from bs4 import BeautifulSoup
import urllib
import os
from urllib.error import URLError,HTTPError,ContentTooShortError

IDM = r"D:\Program Files\IDM\IDMan.exe"  #IDM程序在电脑上的位置,大家根据IDM在自己电脑上的位置更改

def CallIDM(urlList,y,m,d):
    DownPath='E:/GOCI/L1/'+str(y)+'/'+str(m).zfill(2)+'/'+str(d).zfill(2)+'/'   #用于存储下载数据的位置,根据日期构建文件夹
    os.makedirs(DownPath)  
    #将下载链接全部加入到下载列表,之后再进行下载。
    for ul in urlList:    
        call([IDM, '/d',ul, '/p',DownPath,'/n','/a'])
    call([IDM,'/s'])

def ComUrl(y,m,d):
    #构建URL列表
    urllist=[]
    #根据日期,定位到某一日的数据存储位置,注意日期和月份应该用两位数字表示
    DayUrl='http://222.236.46.45/nfsdb/COMS/GOCI/1.0/'+str(y)+'/'+str(m).zfill(2)+'/'+str(d).zfill(2)+'/L1B/'  
    
    #开始爬取
    try:
        DayHTML= urllib.request.urlopen(DayUrl).read()
        soup=BeautifulSoup(DayHTML,'html.parser')
        alink=soup.find_all('a')  #获取界面下所有标签为a的元素
        for A in alink:
            fileUrl=A.get('href') #数据的下载链接
            filename=fileUrl.split('/')[-1]
            #该判断用于剔除返回上一级目录的链接
            if filename=='':
                continue
            else:
                urllist.append('http://222.236.46.45'+fileUrl) #将有效的链接加入到列表中
    except(URLError,HTTPError,ContentTooShortError):
        print(DayUrl)

    return urllist

Year=2020
Month=1
Day=1
UrlList=ComUrl(Year,Month,Day)  #构建URL列表
CallIDM(UrlList,Year,Month,Day)  #调用IDM下载

运行结果如图:
在这里插入图片描述

要想下载L2级数据或这个网址下的其他数据,进行简单的修改即可实现。

也可以加个定时器定时下载当天数据。

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值