CMIP6数据(批量)下载【Linux/Windows系统分别实现】 | 您所在的位置:网站首页 › 用数据下载不了软件 › CMIP6数据(批量)下载【Linux/Windows系统分别实现】 |
引言 本文总结了目前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 实验室设备网 版权所有 |