>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)1 t5 h/ Y# k$ Z5 \- v& G0 _4 Y% V+ h
=====================================================================
1 q5 y, }0 `% T% A5 M- {2 Ximport time
! X" Q5 _. s. ^$ M( {* p fimport os( G2 Q# B3 Z8 `3 ~
from selenium import webdriver9 I2 c9 \ Z) ]$ R2 ]
from selenium.webdriver.support.select import Select/ H1 j7 ^6 f% D) ]7 |
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')$ H1 R4 r# a \: c
driver.get('www.52ocean.cn')
4 s! @7 b( E) B4 B6 s#driver.get('www.52ocean.cn')/ U3 }- F" |1 O! F1 E& ]7 W
driver.implicitly_wait(10)
. [- C; Q- v* p3 o- R# ~7 q# click ele7 R& ` v7 F: `* V
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()& k+ m& k$ J) W9 f
# click S,T,U,V
' X. B8 o; H# Y! sdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()2 M5 }% N! O. }" r2 x
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()+ _3 x4 n) Z8 L4 H8 K. v& C
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()) R% n# Y5 O! o/ w# r& Z3 T
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()0 U) i0 P- v3 @. L7 G! j
driver.implicitly_wait(5)
# H* J3 s8 H9 Q# click Disable horizontal subsetting) w( K- ]* a) u( F) e6 A c
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click() G7 I6 d7 y+ P& ^6 \
# input lat,lon5 A: k4 X9 _; T: {6 o0 {
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
3 x6 g5 z# V3 N) _driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()# w5 E7 ^7 |& m- \) W/ I$ ]: \ b% d
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')7 e) `& U% R- V" V
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()2 \* q9 i$ ` i$ g3 y% q( ]) ~! M; L
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
6 B* K7 R. P+ W! r* r6 n0 rdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
; _/ _4 ~% s( l+ {driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()% \* {6 l, f% t6 W" s' R
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()* e0 v( p! ^4 f% J- |$ @5 z6 F I
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')2 C- y, H8 z3 M, }
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
4 v, a. s1 N& o ^driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()- |) v8 D7 t ~6 E' u7 ~. Z, |' U
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
1 h0 a: x. t) Rdriver.implicitly_wait(1)( U }) O! u# `* d, `' X* C9 p
# click vertical stride
6 D& C8 f% t* x1 Z7 zdriver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
2 J$ {3 r) c7 M4 K) E) `5 Hdriver.implicitly_wait(1): T5 B g5 f9 d X
# click to add lon/lat variables
9 c) D4 H5 K6 q9 b3 u$ adriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()
% Y; y- x1 `4 C/ f# choose output format
3 _, e% ^6 y7 Is = driver.find_element_by_name('accept')
% [; G+ e ~! ESelect(s).select_by_value('netcdf')
# T3 \& S+ j( c4 ~( M# click single time, and input data_time) h+ w# r i, z2 A$ Z* t0 e
# 天
3 V* l# V9 D" d& O* G: l* jn = 09 K, A! {0 [1 {. }. {0 o+ K) g
for m in range(3,12+1): #月份
4 i1 a- g/ I. w$ s6 ^# v! [* I; ^ if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:; b0 Q s% b/ U) P
month_num = 31 # 天数
6 n( K6 @, ^. o5 ~$ C, R8 E elif m == 4 or m == 6 or m == 9 or m == 11:
! O* N9 G% \) M2 d4 w& f month_num = 30 # 天数# ?; j4 `% g7 ^2 x, C
elif m == 2:% Q% R+ i$ ^2 z% j" H. L& H
month_num == 28 # 天数
" M$ M+ p5 Q( f0 ~1 \5 p/ m5 i% S month = str(m).zfill(2)
% ?! ~! ~2 g1 e4 z5 D# b7 C& S for i in range(1, month_num+1):7 U% t" E' w B+ ~! l2 E" z
Day = str(i).zfill(2)8 |9 p e9 [3 _) i
keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
, m7 |$ _2 y8 x- v+ T print(keys)9 x: a: _9 u& o+ [
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()1 h; g$ ^6 T+ r, s: W
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
, J( @1 l' U! m: e3 r driver.implicitly_wait(10)
5 `+ q0 |1 R( ^& } # click to submit1 q P) G2 C7 q* E2 ?+ g, `$ ^& T
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
2 @: [* [! y4 c$ t #time.sleep(3)9 v, \$ R! k0 C" A. d
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
, A4 G4 p3 v) `# b% a) B) z) | time.sleep(20)+ ?! D. X8 X. c4 y4 t
dir = '/Users/qiujingyi/Downloads/'" p+ H. K5 s1 L
oldname = '2011' + '.nc'
9 `2 `: x# r' e( [ newname = '2011' + str(month) + str(Day) + '000000' + '.nc': k4 A( d: \$ ]$ j- w( W
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))5 ]+ ~/ A6 s8 `# n, m B6 E
'''
2 k8 }' f, r1 ?7 G, l# 天+小时+ H W& B$ N+ V0 F1 S
n = 0! J* k/ Y3 {9 H5 h4 C, t
for i in range(1, 31):
5 w9 U* S8 p- W. o5 @8 `- V- B Day = str(i).zfill(2)
5 w: z8 S1 v4 ~ for j in range(0,21,3):
+ D9 b% p1 G+ E1 ~ Hour = str(j).zfill(2)
( l1 q& Q( _9 K5 _4 M2 P keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
+ i0 s# {) Y' v+ s# s1 z% L print(keys)9 X% Q& \7 k9 U" t' y2 ]# W% S
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()) S V6 n2 |, o, I
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
& T: K" B$ c; ?' M" _6 m3 W# z driver.implicitly_wait(10)6 j e0 x/ i, q% ?1 F- ~
# click to submit5 r! l8 s3 w4 i! q
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click(): K/ ~* O# a3 M1 z6 ^2 F
#time.sleep(3)
2 p5 D5 d- ~, F0 d* T: L #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()" I" T3 {/ B" M: `1 X$ ]- |2 c- s7 P
time.sleep(10)9 J* j ~/ U; p7 V6 F3 b
dir = '/Users/qiujingyi/Downloads/'! u! G- w$ U5 b6 U: G" |( V
oldname = '2012' + '.nc'
9 i, p; M4 D- j; C* I newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'
* f" F9 {" j: H/ X9 G os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))8 ~! d: h; Z6 P' n( A
'''
+ X" U7 {- q- M M; X5 e
; s4 S3 _3 `4 k2 a: h/ m
% D5 \# m$ O% a 7 I k( c8 W) x6 J2 d
& H3 _/ }- o% K1 Q, u) l8 F' c
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |