LAADS多任务下载MODIS产品
在LAADS上查找到相应遥感产品后常常由于下载数量众多往往在使用浏览器下载的时候出现1800个文件只下载800多个后就停止下载的问题,导致下载失败,而使用wget下载时由于单一任务下载导致如果有某个下载链接失效则整个下载过程会在此任务上响应非常长的时间。因此采用其他相关API下载变得十分重要。本文使用LAAD 给出的TOKEN 结合python API使得下载任务能够多线程错任务下载。此外其还拥有遇障跳过后续补充下载功能
多线程下载速度
峰值下载速度基本可以占慢带宽 wget在200k~300k左右
下载700多个hdf文件大概在20分钟左右
代码
# -*- coding: utf-8 -*-
# author QXC NWU
# TIME 2021/5/28
from tqdm import tqdm
import os
import threading
import ssl
from urllib.request import urlopen, Request
import argparse
import sys
def read_csv(csv_path: str, save_dir: str) -> [list, list]:
"""
# 创建文件名称池文件大小池
:param csv_path: csv文件路径 默认格式 文件名:日期:文件大小
:param save_dir: 保存路径
:return: filename_list,save_list
"""
filename_list = []
save_list = []
fd = open(csv_path)
lines = fd.readlines()
for line in lines[1:-1]:
filename_list.append(line.split(',')[0])
save_list.append(os.path.join(save_dir, filename_list[-1]))
fd.close()
return filename_list, save_list
def get_csv(csv_path:str,url:str,token:str):
"""
# 下载csv函数
:param csv_path: 文件名
:param url: URL
:param token: token
:return: null
"""
# URL修改位置
url = url+'.csv'
# Token修改位置 Bearer
headers = {
'user-agent': 'tis/download.py_1.0--3.7.6rc1 (tags/v3.7.6rc1:bd18254b91, Dec 11 2019, 20:31:07) [MSC v.1916 64 bit (AMD64)]',
'Authorization': 'Bearer '+token
}
try:
CTX = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
fh = urlopen(Request(url, headers=headers), context=CTX)
with open(csv_path<