CMIP6数据(批量)下载【Linux/Windows系统分别实现】 您所在的位置:网站首页 用数据下载不了软件 CMIP6数据(批量)下载【Linux/Windows系统分别实现】

CMIP6数据(批量)下载【Linux/Windows系统分别实现】

2024-07-06 12:24| 来源: 网络整理| 查看: 265

引言

本文总结了目前cmip6数据下载的几种方式。

目前主流的下载方式大多基于Unix/Linux系统,对于没有学习和使用过相关系统的朋友不太友好。本文提供了基于Windows系统的下载思路。

因此本文将CMIP6数据下载方法分为【使用Linux系统】和【纯Windows系统】两个版本,分别分享。

由于基于Liunx系统的下载方法比较普遍、资料较多,因此本文会将重点放在介绍【纯Windows系统】的下载方法上。

使用的工具主要包括:Google Chrome,Python(Win/Linux),selenium库,R,CDO(Linux),Shell。

CMIP6介绍参考:

https://mp.weixin.qq.com/s?__biz=Mzg5NjA2MjAyOQ==&mid=2247483994&idx=1&sn=cafec8a8f9875bde4cd08f53a40dc9ec&chksm=c0078578f7700c6e695037e18744088779c990ae4da67813114aa20a853be52121d929e41582&scene=21#wechat_redirect

https://blog.csdn.net/qq_49433404/article/details/109967634

官网链接:

CMIP6数据官方下载地址1:https://esgf-node.llnl.gov/search/cmip6/

CMIP6数据官方下载地址2:https://aims2.llnl.gov/search

 💡  文章撰写时间是2022年12月23日,文中涉及的网址、软件等可能会失效或更新。 💡  声明:本人非计算机相关专业,没有任何计算机基础,以下内容均为个人自学并总结自百度/Google和个人实践,如有错误或更好方法还请不吝赐教!

0 准备工作

在正式下载前,首先要确定所需要的数据的信息。

CMIP6中的变量有1000多个,因此要找准所需气象要素的变量是关键。

可以在这个网站利用网页查找功能查找相关变量:

https://clipc-services.ceda.ac.uk/dreq/index/var.html

例如,搜索”temperature”,会得到:

CMIP6中与气温(temperature)相关的变量

在找准变量名(Variable ID)后,还至少需要确定所需的时间尺度(Frequency)、空间分辨率(Nominal Resolution)、实验(Experiment ID)和模式(Source ID)。使用较多的实验是historical(数据范围1850-2014年)和ssp(数据范围2015-2100年)。模式(model,也称模型)的选择则可以根据变量来定,因为不是每个模式都提供你想要的变量。

在数据下载网站可以直接在左侧下拉框进行选择:

官方下载地址1:左侧下拉框选择,右侧Search和下载

选择完成后可以直接在右侧进行搜索和下载。

官方下载地址1提供http([List Files])、wget(WGET Script;基于Linux)等多种方式,但其中win系统常用的http下载方式只能【逐个文件】地点击链接下载,比较麻烦。虽然可以通过浏览器集锦功能、IDM中用通配符等方法(参考:https://zhuanlan.zhihu.com/p/164812122)解决,但一次点击也只能下【一个数据】,效率较低。

官方下载地址2(ESGF MetaGrid)只提供wget script的下载方式。将多个数据加入Cart,可以在Cart中将多个数据并入一个wget script。

官方下载地址2(ESGF MetaGrid 但是目前还是beta):可以在cart中把多个数据并入一个wget script

对于少量的数据下载可以手动完成,到这一步也就结束了。

当想要下载的变量、模式等都很多时,手动下载太花费时间,下面就介绍批量下载的方法。

1 基于Linux系统1.1 acccmip6 (Python)

已经有现成的Python库,即acccmip6,可以调用,直接进行cmip6数据的搜索和下载工作。

现成的资料较多,这里直接引用,不再赘述。

官方链接:

https://github.com/TaufiqHassan/acccmip6

参考资料:

https://cloud.tencent.com/developer/article/1744076

https://blog.csdn.net/weixin_43693143/article/details/118253689

 💡 个人实际使用时,acccmip6存在以下的问题:

搜索功能很实用,但搜索的速度很慢,差强人意。

下载速度有时很慢,有时干脆完全下不动,玄学。

1.2 wget下载

在数据搜索页面,可以直接得到WGET Script。文件名格式是例如”wget-20220601141842.sh”。

推荐使用官方下载地址2(ESGF MetaGrid)生成wget script,因为可以把多个数据加入购物车后合并成一组。

否则在地址1中,每个数据都有一个wget文件,整理和下载都更加麻烦(下右图)。

我一般把同一实验、空间分辨率、时间分辨率、变量的不同模式数据组为一组,生成一个wget文件。

cd下载好的wget文件所在位置,命令行直接运行:

bash wget-20220601141842.sh

即可成功下载一个脚本中包含的全部数据文件。

注意,wget还有很多选项可使用,例如-H, -s 等,对应不同功能,可参考:https://blog.csdn.net/weixin_44237337/article/details/128115206。具体问题请百度。

如果不加特殊选项,每下载一个文件,这个脚本都会要求Enter your openid和Enter password(在官方下载地址1右上角Create Account即可获得)。

但是守在电脑前挨个手动输入是不现实的。

这里提供一种比较暴力的思路:直接修改wget的下载脚本。

打开获取的每一个wget script,可以发现万恶之源就是read -p,要求从屏幕键入读取值并赋给变量。

万恶之源

那么我们把这两句话修改为,直接赋值账号密码给变量,就不需要再从键盘输入了。

用Python就可以轻松批量修改所有的wget文件:

修改好后的wget文件,再结合shell脚本,写一个简单的循环,就可以批量下载了:

💡 个人实际使用时,wget存在以下的问题:

有时候完全下载不动

wget数量太多时,一旦下不动,需要重新下载很麻烦

2 基于Windows系统

上文提到的wget下载也有windows的实现方式。

但是本文仅介绍selenium这个Python工具。这种数据下载方式和之前的思路完全不同。

Selenium是一个自动化测试工具,可以模拟鼠标和键盘的操作,自动控制浏览器。

我们在手动下载数据时,所做的其实也就是在浏览器中点击各种按钮,或键盘输入内容。这些动作Selenium都可以帮我们做到。

Selenium的环境搭建和查找网页元素比较复杂,但是一旦熟练使用,会发现除了cmip6之外的任何数据的批量下载都是一种套路。

2.1 Selenium使用环境部署

包含两步(前提是已经装好Python):

安装Selenium库。直接 pip install selenium 就好。

安装浏览器驱动。我使用的是google chrome,所以对应的安装chromedriver。 查看当前的谷歌浏览器版本号,下载对应版本的chromedriver:CNPM Binaries Mirror下载完成后解压,将解压出的 chromedriver.exe文件放到python.exe所在目录下。

参考:

https://blog.csdn.net/qq_65898266/article/details/124824703

2.2 Selenium的基本使用

网页控制的核心是网页元素。

打开浏览器,按F12(或Ctrl+Shift+X)可以打开浏览器控制台,此时进入开发模式,网页中的一切都变成了元素。鼠标停留在任一个元素的位置,点击,可以在下方控制台中的Elements栏获取到对应的元素信息行。对该行右键,可以复制元素的XPath等信息。

有了元素的XPath,就可以对该元素进行控制了。

浏览器控制台,图中控制台里的蓝色部分即对应鼠标停留位置元素复制元素的XPath

几个主要的命令:

2.3 Selenium控制自动获取下载脚本

通过查找网页上不同元素的XPath,我们就可以轻松控制CMIP6的下载页面了。

例如,对于Source ID这个框的加号,可以获取它的XPath,是’//*[@id="search-form"]/div[1]/div/div[4]/div/div[3]/a’

下面的这句话就可以实现点击这个加号:

driver.find_element(by=By.XPATH,value = '//*[@id="search-form"]/div[1]/div/div[4]/div/div[3]/a').click()

将下载数据的一系列流程组合起来,再进行一些细调,就可以成功实现任意要求的自动化下载!

“Talk is cheap. Show me the code.”

上面的代码是在官方下载地址1下载wget脚本。以同一实验、空间分辨率、时间分辨率、变量的5个模式数据组为一个文件夹,内有多个wget文件。

同样还是更推荐在官方下载地址2的Cart内去生成wget脚本,避免脚本文件数量过多。不过就是得重新定位网页元素啦~

到这里,其实还是没有避开wget文件在Windows系统的下载问题。

其实我们可以直接把wget脚本内的http下载链接提取出来,就可以在win系统下用IDM等工具下载啦!

打开任意一个wget script,会发现其中其实包含了http下载链接

提取http下载链接同样可以用python实现:

这样将http链接作为txt文件提取出来,再导入到IDM中,就可以批量下载啦!

除了下载数据,我还写了一份比较实用的代码,功能是查询多个不同变量共有的共同模式:

查找结果

💡 总结,利用Selenium的优点:

灵活性很高,适用于任何数据的下载,一劳永逸

wget中提取http链接放到IDM中下载,下载速度很快,且整个过程在前台,方便随时查看下载进度

缺点:

提取网页元素XPath的过程较繁琐,且有些网页元素结构复杂,需要百度学习Selenium的用法

即使是IDM下载,也会有文件下不动的情况,此时一般是数据源的问题,建议更换节点

综合以上,我目前最喜欢的还是Selenium的下载方式,因为还可以用来批量下载ERA5、CMA...的数据。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有