GOCI数据批量下载
**
更新
**
原来的网址挂掉了,前面的爬虫代码不能用了,在此贴出新网站的爬虫代码。具体的爬取过程跟之前的类似,不过新网站的下载链接里多了一个文件所占字节大小,需要从响应里提取出来放到链接里。
import urllib.request
import urllib.parse
import datetimedef get_url(year, month, day):"""输入日期,返回当天内 GOCI L1B数据下载链接(列表)"""# 请求头url = f'http://kosc.kiost.ac.kr/gociSearch/list.nm?menuCd=11&lang=ko&url=gociSearch&dirString=/COMS/GOCI/L1/{year}/{month}/{day}/L1B'response = urllib.request.urlopen(url)html = response.read().decode('utf-8')urls = []for num in range(8):# 提取文件名try:index0 = html.index(f'realPath" name="downloadVOList[{num}].realPath" value="') + len('realPath" name="downloadVOList[1].realPath" value="')index1 = index0 + len('/download/downService.do?fileName=/home/goci/nfsdb/COMS/GOCI/L1/2012/01/02/L1B/COMS_GOCI_L1B_GA_20120102011640.he5.zip')filename = html[index0:index1]# 提取文件大小index0 = html.index(f'class="fSize" name="downloadVOList[{num}].fSize" value="') + len('class="fSize" name="downloadVOList[1].fSize" value="')index1 = index0 + len('786513032')filesize = int(html[index0:index1]) - 1# 组合为链接url = f'http://kosc.kiost.ac.kr/{filename}&_Html5=true&_StartOffset=0&_EndOffset={filesize}'urls.append(url)except Exception:print(f'缺少{year}_{month}_{day}_{num}')continuereturn urlsdef days_to_month(year, days):dd = datetime.datetime.strptime(str(year) + str(days), "%Y%j")mon, day = str(dd.timetuple().tm_mon), str(dd.timetuple().tm_mday)return year, mon, day# years = [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
years = [2021]for year in years:filename = f'{year}.txt'startday = 1endday = 366if year == 2011:startday = 91if year in [2012, 2016, 2020]:endday = 367with open(filename, 'w') as f:for day in range(startday, endday):year, month, day = days_to_month(year, day)month = '%.02d' % int(month)day = '%.02d' % int(day)try:urls = get_url(year, month, day)for url in urls:f.write(url + '\n')except Exception:print(f'{year}_{month}_{day}链接无法打开')
=====================================================================================
以下为原文章:
GOCI数据下载地址有两个,一个是NASA的 ocean color 网站:https://oceancolor.gsfc.nasa.gov/;二是韩国的官网:http://kosc.kiost.ac.kr/eng/p10/kosc_p11.html。其中ocean color 需科学上网,因心疼流量,最终选择了韩国的网站。
本篇博文的主要内容包括两个:一是GOCI数据链接的批量抓取(附代码);二是提取链接后的批量下载。
1、GOCI数据链接批量抓取
数据链接抓取不需太深厚的爬虫功底,入门即可。如嫌麻烦,在此附上2011.04-2020.04的L1级全部下载链接(链接:https://pan.baidu.com/s/1pbC9lV4g4KoyycdvhQw07Q 提取码:j3d8 ),但2020.04以后的数据和其他类型就需自己搞了。
仔细观察下载链接,其实是有一定的规律可循,因为网站前缀是一样的,而GOCI文件名的命名有其规则。本想直接按照规律生成这些链接,但发现每个文件名的最后两个数字找不到规律,在38-42之间波动。所以无奈还是得从网站上爬取,以下为爬取步骤及代码。
1)kosc.kiost.ac.kr 网页解析
打开官网,进入数据搜索页面,右键“检查”,在弹出的界面中选择network,然后在数据搜索页面点击search,此时右侧会出现一个list.php,所需要的下载链接则全部在这里了。
2)数据时间范围和类型选择
如下图红色框,数据范围和类型的选择主要依靠这四个keys,可根据自己需要选择时间范围和L1/L2数据。
3)爬取代码
import urllib.request
import urllib.parse
import reurl = 'http://kosc.kiost.ac.kr/eng/p10/list.php'# 四个关键词,根据需要调整
data = {}
data['src1'] = 'GOCI'
data['src2'] = '1.0/L1B'
data['start_date'] ='2011-04-01'
data['end_date'] = '2020-04-10'data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')# 正则表达式,找到response中全部的文件名
# 如需下载L2级数据,文件名前缀需做相应修改
list_GOCI = re.findall(r"='COMS_GOCI_L1B_GA_20[0-2][0-9][0-1][0-9][0-3][0-9]0[0-7]16[0-9][0-9].he5.zip", html)# 将获取的链接按照年分别存放
def GeneralList(list_GOCI, year_num):link_list = []for each in list_GOCI:i = each[2:]year = i[17:21]month = i[21:23]day = i[23:25]link = 'http://222.236.46.45/nfsdb/COMS/GOCI/1.0/' + str(year) + '/' + str(month) + '/' + str(day) + '/' + 'L1B/' + str(i)if str(year) == str(year_num):link_list.append(link)return link_list# 将各个年份链接写入.txt
for year in range(2011, 2021):link_list = GeneralList(list_GOCI, year)name = 'GOCI_Download_list' + str(year) + '.txt'with open(name, 'w') as f:for i in link_list:f.write(i + '\n')
最终生成如下文件:
2、批量下载
获取上述链接后,因官网服务器不需科学上网、注册登录等,下载就很简单了。我是直接将链接批量复制到迅雷,下载速度基本在3-10 M/s,基本能满足需求。也可选择IDM等下载工具。
GOCI数据批量下载相关推荐
- 大数据批量下载文件 代码
大数据批量下载文件 代码 # # 大数据批量下载文件 from multiprocessing import Process import os import pandas as pd import ...
- Harvard Dataverse 数据批量下载
最近看论文,看到了自己需要的数据,就想着下载下来,结果发现这个东西并不好下载,也可能是自己的知识存储不够,捣鼓了一天,终于下载下来了.这里记录一下,方便以后查阅. Harvard Dataverse ...
- 天文数据批量下载笔记
数据批量下载笔记 一.astroquery 很多大型巡天项目都提供了下载数据的API方法,因此利用python脚本批量下载数据成为可能.基于已有的API(或者SQL)方法,astroquery整合了多 ...
- ECMWF等大气数据批量下载(Python API)详细步骤
ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间 ...
- GPM数据批量下载教程
GPM数据批量下载教程 1. GPM数据产品简介 2 查找数据 3. 下载 3.1. 授权 3.1.1 通过 `.netrc` 文件授权 3.1.2 *通过浏览器授权(通过 `.netrc` 文件授权 ...
- MODIS冰雪数据批量下载
MODIS冰雪数据批量下载之Python Script 相信有很多的朋友在研究极地(南北两极)的冰雪吧,下数据可能对于某些大小同行来说是一个头疼的问题,本文在这里就介绍一种批量爬取数据的方法. 数据下 ...
- Sentinel-2 (哨兵2号) 数据批量下载教程 [python]
Sentinel-2 [哨兵2号] 数据批量下载教程 [python] 1. 选择数据 2. 数据下载 2.1 下载链接文件 2.2 安装Python及data_downloader包 2.3 创建. ...
- 1、EC气象数据批量下载
EC气象数据批量下载 前言 一.前期准备 1. 配置Python环境 2. 安装依赖库: 3. 注册EC账户并获得Key 3.1 注册账户 3.2 获取API信息 4. 选择数据 二.编写脚本开始下载 ...
- 使用Google Earth Engine (GEE)实现MODIS数据批量下载
使用Google Earth Engine GEE实现MODIS数据批量下载 前言 下载数据代码 批量执行run任务 关注公众号,分享GIS知识.ArcGIS教程.SCI论文与科研日常等 前言 上图是 ...
最新文章
- Android TextView 数字后面追加2个0 或者保留小数点后面2位
- 2020德勤面试开始了吗_2020下半年教师资格证面试时间已出!12月10日开始报名
- React后台管理系统-商品列表搜索框listSearch组件
- DataGridView新特色、常用操作
- Redis scan命令原理
- Sql Server 常用日期格式
- kali中wireshark打开后错误
- WPF 修改(优化)Menu菜单的样式
- 功放音量调节原理_玩汽车音响,功放和喇叭,应该如何做好匹配?
- Spring mvc4 + ActiveMQ 整合
- 【转】一个安全测试的CheckList
- Linux中mongodb定时远程备份
- An ac a day,keep wa away
- 教你怎么录制电脑内部发出的声音
- 列联表分析——独立性检验(卡方检验)
- 12306暴SQL注入漏洞?!这下乐大发了
- calc桌面计算机,Calc1(桌面计算器)
- INDEMIND:多传感器融合,机器人的必由之路
- 运用ARCGIS制作行政区划数据图表
- sed正则表达式替换字符方法