>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
3 G) o5 v+ F+ r3 {; b0 ?4 Y$ S=====================================================================
. r- U- E) E$ n1 Z1 {0 pimport time
, S p' i8 [* t% y4 Qimport os
6 |& I2 b; u, W/ A; Ifrom selenium import webdriver( G; F; s! l& i; S
from selenium.webdriver.support.select import Select
1 ~0 ?0 w" M6 v, ydriver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver'); A% F" T9 u. v" g7 L& `( }
driver.get('www.52ocean.cn')
1 t2 e1 s1 ?; E7 ]2 b" S#driver.get('www.52ocean.cn') y/ ]+ o6 l) t
driver.implicitly_wait(10)( y. D+ E& u+ F
# click ele
8 Z2 ]) f- f jdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()' Z2 F; K# k/ t* H1 c! v( f
# click S,T,U,V6 c- t( ~* ?2 D% l
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()# H& c1 q* ~5 O6 N& ~
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()5 g' i' E6 x( Y: l
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()& {5 p$ {% l; v, N7 y5 m* j& R! x1 M
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()) t B2 _+ ^5 ~
driver.implicitly_wait(5)
# L6 F! r, [, O# click Disable horizontal subsetting% B/ I* A; m5 ]
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click(). r" a7 d. C: _' u' M9 w
# input lat,lon; h/ j/ W0 G3 ~! {5 l/ F
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()2 G4 p+ Y' M, v7 L( W1 |
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()% I: t# x; _, Y+ \/ L
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
- A/ E0 `% P" y3 X" T. z2 s3 c7 g5 bdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()" F) a; |# y/ \# e: o# ?
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
* k! ^: Z# l. C. s' v2 @4 Qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')8 z$ x* v# g( e% V6 v. J
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()3 |2 Q3 v# M& a6 K
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()9 D8 D2 a* f7 `+ P @/ U4 l% a
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')* F7 y, \2 T" A5 u3 P) v
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
4 h, H" e2 \6 |* vdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
4 f. ?7 `5 M7 W: C; {* n- x2 v8 ^driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2') o. `+ ~( p4 \) o7 u, n3 z
driver.implicitly_wait(1)3 C2 J$ ?. r: e: N
# click vertical stride( [8 g5 l& O! B
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()& X9 R1 {# d8 N/ H* R' D) K
driver.implicitly_wait(1)8 c% x, Q+ D; L/ K/ @) H- Y0 A
# click to add lon/lat variables H: z ^: N$ I2 {. u7 O: l
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()
! E. L R. e- q2 A8 W5 _ T* U# choose output format
1 J& _8 ^% o3 H# i/ D bs = driver.find_element_by_name('accept')
1 f% ~% K1 U7 aSelect(s).select_by_value('netcdf')- {: s4 E7 E% r% Q. a; ~; ]! S
# click single time, and input data_time
5 U0 r; ?: K- l% G, }% ~8 b# 天' D+ m$ L& ?9 H( i' J! u
n = 0
2 G3 n# w+ {% v* F# Rfor m in range(3,12+1): #月份6 q) C: b( X( H3 B+ _7 D) E
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
R4 L" X4 v! ^% E! Q8 p month_num = 31 # 天数0 E3 E2 m3 w* \4 X \
elif m == 4 or m == 6 or m == 9 or m == 11:
9 o: w) d/ c" N F7 M8 z month_num = 30 # 天数
( v* ], O$ f+ Y& T! G- B. [" K elif m == 2:) o' S+ [7 B- ~
month_num == 28 # 天数
. V+ O8 p$ j5 T6 R1 x month = str(m).zfill(2)
) G0 I* `3 n! `; I& _ for i in range(1, month_num+1):
% b3 l! Q& s8 ~ Day = str(i).zfill(2)
1 j: F8 N- l' D: d7 O" s+ U, u keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
* [0 K& y3 z- S print(keys)
& d' i }" c" Y5 n& R7 k1 q driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
1 t( N$ P2 v2 V$ C" ?6 k9 O# H driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)4 W8 ~0 S, B; `7 m+ a% c4 o
driver.implicitly_wait(10)
* t) S9 \0 C) d5 {2 u5 E # click to submit
9 b( b$ Y& i* z1 o0 m% m driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()+ x5 `0 Y0 X; V/ w- H' A1 V
#time.sleep(3)) F, ]4 q3 l$ X" v7 H6 h& @
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
$ q8 s3 _' F( Z2 Q! C, ? time.sleep(20)2 ~' e" X9 {8 R7 X5 B- u: S! A& w1 \
dir = '/Users/qiujingyi/Downloads/'
# {# k; p Z _, `/ ~8 ~. S. O oldname = '2011' + '.nc'0 l ^! A3 w4 T. `2 m' K I
newname = '2011' + str(month) + str(Day) + '000000' + '.nc'7 b7 |5 z6 d. l& b) l, W9 { D. T4 \9 m
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
3 K/ X& q. b& b$ n |0 h'''
2 V6 b( u( i# [& p# y- @# 天+小时% V; Z8 q5 v" {( B
n = 0
+ K1 ?) j/ `7 ]( qfor i in range(1, 31):# ~8 e `! v0 A- e6 F* R
Day = str(i).zfill(2)! Y! m. {; b% l' m
for j in range(0,21,3):
. j+ D3 x- j V K Hour = str(j).zfill(2)
6 T# p5 e# X1 f) ^/ h) w9 P keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
" ?3 o; E6 X U+ |( ]) g- {' U3 U print(keys)
: \, z% Q% H" q driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
+ W+ Y& G1 @% L driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
. t0 P) L. Q0 ~3 \, s driver.implicitly_wait(10)
6 x) z7 _9 v4 U# t8 c$ c # click to submit# O; t c6 F8 d1 `' W6 |$ k# f
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()0 `# F8 f M: y
#time.sleep(3)
* h$ _% [0 c; h: a #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
+ G, e1 ]' i) |+ h time.sleep(10)" \6 b' Q: D& B) M/ K! \
dir = '/Users/qiujingyi/Downloads/'3 u3 Z) _% g; f" C
oldname = '2012' + '.nc'1 U, G. q4 V) `- J
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'
: O7 j9 x( o$ O4 I4 n2 _ os.rename(os.path.join(dir,oldname),os.path.join(dir,newname)). b8 ^- C+ k3 j- Q6 q5 w7 m
'''
- j4 f% e1 U: Q% ^' e+ Y
# d+ H6 Y2 S8 C9 C' s6 h. Z1 R) w5 U3 U
5 G: ^1 D1 n1 v+ P4 c0 ? X
) b% H. E: y0 |* ~8 g
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |