>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
% E+ ^$ h7 [/ p$ Y- x! ]=====================================================================
/ ~; W/ b2 p1 c4 ^; O4 T- Zimport time5 B7 S0 _5 F {
import os
3 a" |8 V/ w: i# {% k$ ufrom selenium import webdriver
8 d3 d; ~$ L. |8 |2 r+ ffrom selenium.webdriver.support.select import Select7 A7 \7 r6 V* h: L% P- C
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
$ N& v& @7 m+ Q- ]9 Y& ^4 w1 f3 }1 zdriver.get('www.52ocean.cn')
0 j% j! N+ P4 {#driver.get('www.52ocean.cn')! l# I' X c) E a( r) r; v
driver.implicitly_wait(10)% l2 w7 p7 E+ r4 N: G; `
# click ele `4 v' r& J `6 c) L
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()0 x- B& A& n; I+ x- T
# click S,T,U,V
3 x! q; G+ \" zdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()2 o! m4 w+ W" x4 }
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
) i8 V: y3 y, G, T Edriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
+ G; U0 ~) y0 f5 |driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
/ |* D4 z _, J3 k1 X2 n) Gdriver.implicitly_wait(5)
+ v+ S" N' B$ ]3 O+ v# click Disable horizontal subsetting: X; w4 K) h9 l( v$ A6 K! d+ `
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()
1 }' [% |6 I( P6 U& r' }# input lat,lon8 a/ t9 g* Y3 g4 V& v% b
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
0 B) ?6 j: P3 f* t& g& U/ ndriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
! J1 i; x- a- |$ Ddriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
3 f9 d3 F/ i. B# k. Q" udriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()* b5 J4 J5 y8 s$ G1 I
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
6 |0 H/ e- `) Q( g# Hdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')$ E1 q+ S/ T H! E) M& l( V. m a0 \
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()
6 q% K! y# @# z6 Y1 gdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
3 J4 x8 h C6 }2 [driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
! a# o/ N, a6 {0 P/ qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
# b$ |9 l3 d) Idriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()$ @$ }% K9 d' v& T) |6 y1 c' a
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')! G, C+ M9 p$ Y/ ?6 K: p8 h, M- ]1 M
driver.implicitly_wait(1)
; J7 I% ~& c0 [3 t# click vertical stride
$ d7 A5 C. u) w+ Y6 Gdriver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
5 b$ f2 c# ~, H9 x! E9 |5 M* \driver.implicitly_wait(1)
: ]4 [! r _8 Q4 C3 G3 C$ a6 {! J# click to add lon/lat variables
+ n3 H$ H2 t1 Z+ e, K3 r4 Hdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()
1 S8 I2 I0 p; B. ~; t, K# choose output format
, K9 d$ |. H3 O+ E! b# Os = driver.find_element_by_name('accept')2 ~, g* n) n+ M2 P/ w
Select(s).select_by_value('netcdf')* N: H4 `) P9 F# J- d. X; z4 l4 [
# click single time, and input data_time
/ U& K+ C8 ^$ G: a/ t/ }8 m& i! g4 n$ l# 天7 }/ A( x+ w+ f& ]4 |8 U, E# R
n = 0
$ L. k9 s7 u4 i. @for m in range(3,12+1): #月份" V/ [( p. j+ p. y" [3 d* ^
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:2 a9 ?; a2 M2 x/ `& L( L/ H
month_num = 31 # 天数
% D. j+ ]+ R$ {, {" h5 }$ ~( U elif m == 4 or m == 6 or m == 9 or m == 11:+ \7 I/ |4 W% b1 J# c/ q: T$ D2 l5 Q/ C
month_num = 30 # 天数
0 ]1 @1 q/ D; h" j4 |. z, T: g: b elif m == 2:
9 W; ?1 n! G) \4 ]; d" E% R4 r! Y month_num == 28 # 天数4 Y* {3 ?1 I3 X# q9 C' U1 J" [
month = str(m).zfill(2)
- ~# D$ B, F" G" r9 f for i in range(1, month_num+1):
& Y& A5 c8 u2 ~6 V, L Day = str(i).zfill(2)
4 W% h# a# Q; T) E' g1 L6 g keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期& ?/ z; x* {6 w2 D9 F( A2 R( k. z
print(keys)
! @& E! f0 G; v driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
" j) S. U" ~* p5 D+ s% ] driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)$ G) ~1 q5 S/ F; T, A
driver.implicitly_wait(10); t1 ?: T0 k6 B4 ` b7 B* P
# click to submit- _6 @ i7 U& d5 S/ Z
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
x8 R. I' \* i% N #time.sleep(3) K2 R7 r) A! a4 ?$ m" D8 D Y; g* C/ M
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()0 R( @, o8 e1 D0 N3 u8 t
time.sleep(20)
. o# H( j: y! q R& Z7 ` dir = '/Users/qiujingyi/Downloads/'0 f) g6 F- w9 D# n
oldname = '2011' + '.nc'
1 v4 @: e$ M; f8 P! Y7 b% S4 d newname = '2011' + str(month) + str(Day) + '000000' + '.nc'
9 G9 v$ ~0 H l0 j8 @/ d os.rename(os.path.join(dir,oldname),os.path.join(dir,newname)); H2 `1 A8 B) F. @) `$ \
'''3 o5 @! v* I& p. q% _1 n' O
# 天+小时
8 }- x9 J5 q* c P0 k+ O: L) Zn = 0
# F6 I, K/ L3 R) p2 }7 lfor i in range(1, 31):* ~, } D2 r3 H0 m1 v
Day = str(i).zfill(2)' ?" S3 h- }6 u' e; V9 v% `$ I
for j in range(0,21,3):
( R3 r( F& R6 A2 y! G- W$ \3 o D$ ]; b Hour = str(j).zfill(2)* ^& ]/ a) Y5 @4 w- v/ ]
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'; X- q8 L. E- D/ q+ }( ^* c
print(keys)" H h8 w# E. \, g* A# e f8 ~
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
/ w) e7 ~2 @+ Q+ `* E8 [ driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)0 @; Z* \& i2 M7 k5 j
driver.implicitly_wait(10)4 ~6 d* R8 {/ O! t ~ ?$ d( P
# click to submit" s+ ~0 O# V0 i- v- B5 B
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click(): U" t, o) ~& b. Q0 b% w3 H
#time.sleep(3), L( c t5 y( ^5 N
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()4 Z d* K* ^" {9 T
time.sleep(10)
4 Q5 X- o- r% d( Q, m dir = '/Users/qiujingyi/Downloads/'6 H% b* ~, U7 v4 A
oldname = '2012' + '.nc') p6 N+ k/ @" J; E8 C
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'4 }+ b$ N: ~$ j' t
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
3 G l4 h. H3 V1 y$ b'''
" \1 w/ `+ v( K6 d% l
$ |7 C5 o# E( H( i
5 }; j" ]# h5 Y
P2 r' w, X5 Q$ {7 r
- E3 U0 ] D6 N9 }0 ` [0 y 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |