Python教程

用Python下载hycom数据

本文主要是介绍用Python下载hycom数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文利用python的selenium对网页进行自动化操作,从而以循环的方式下载hycom官网NetcdfSubset中的数据

(1)在选择想要的hycom数据集之后,选择NetcdfSubset中的链接进入网页下载界面。比如下方图片:

  该网页只能选择零散的数据下载,如果想要下载一年或者多年的数据,总不可能一个一个点吧。
(2)所以我这里选择使用python的selenium进行多文件下载处理。关于对selenium的说明和相应的浏览器驱动下载在这个https://blog.csdn.net/shiaohan/article/details/108834770 帖子里说的很清楚了。在安装完相应的库之后,如下图,就可以开始编写:
 

(3)填上相应的网址,以防万一在后面添加了driver.implicitly_wait(time)进行一段时间的等待

driver = webdriver.Chrome('D:\\chromedriver\\chromedriver.exe')  # Optional argument, if not specified will search path.
driver.get('http://ncss.hycom.org/thredds/ncss/grid/GLBv0.08/expt_53.X/data/2008/dataset.html')
driver.implicitly_wait(20)


(4)接着就是网页中其它框框的选择,基本都不难。在选择输出格式时这里出现了下拉选择框,我是用了select的功能,这个功能在这个https://www.cnblogs.com/w770762632/p/8745261.html 里面有很好的说明。

# click ele
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
# click S,T,U,V
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[6]').click()
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[7]').click()
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[8]').click()
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[9]').click()
driver.implicitly_wait(5)
# click Disable horizontal subsetting
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()

# input lat,lon
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('18')
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('105')
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('115')
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('9')
driver.implicitly_wait(1)

# click vertical stride
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
driver.implicitly_wait(1)

#click to add lon/lat variables
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()

# choose output format
s = driver.find_element_by_name('accept')
Select(s).select_by_value('netcdf')

(5)在把基本的选项弄完之后,接着就是利用循环写入时间进行批量下载了。考虑到网络波动等因素,我这里是逐月下载的,

# click single time ,and input data_time
n = 0
for i in range(1, 31):
    N = str(i).zfill(2)
    keys = '2008-01-' + N + 'T12:00:00Z'
    print(keys)
    driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
    driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
    driver.implicitly_wait(10)
 
    # click to submit
    driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
    time.sleep(60)

(6) END
 

这篇关于用Python下载hycom数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!