>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
! C d: X( d! y1 x8 F. K# Y" m=====================================================================
$ W0 z9 x# _$ Simport time: F: S* L/ H' R/ Y9 k" F2 E! ?
import os& v9 W, E0 a0 H' P9 h
from selenium import webdriver
9 J6 {4 }# d5 V) x9 ~, ^from selenium.webdriver.support.select import Select& y# S( G s; [5 H3 D( s
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')/ u9 s" @) O; u& I( L$ a) L( F
driver.get('www.52ocean.cn')
! Q8 q6 x% g. V- M0 z% ]* c#driver.get('www.52ocean.cn')3 m ^0 N" \ @
driver.implicitly_wait(10)% t' X4 t( b/ j7 I- o5 c
# click ele
) \$ u" \' ~; o; ?# sdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()
! Z5 e3 J8 x8 K& {- {/ _9 M9 i) g# click S,T,U,V
2 P" C3 ]% w0 n6 W2 ^driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
* X9 m: c) M% J3 E! M$ l' R: |driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()# g5 ]0 O3 H7 H7 J9 b; E3 p
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
+ F7 ~0 H' R( Vdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
. x) n, h( U* ^: Z- ]) q6 D/ Idriver.implicitly_wait(5)
- Q' U9 {, w' n! Y# click Disable horizontal subsetting7 P6 K; s: C; a6 r
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()* q+ G, T) V2 f: i) a! f
# input lat,lon
' N8 H; Y9 P: \2 mdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
! j9 P3 H, _0 m* S& Y% y& jdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
8 y3 j/ f; w8 {# X% ^8 O5 N3 Cdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')0 }$ p& d# I, ^2 N6 e9 F
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
6 _9 E. x! `: P5 M& i7 b; G* qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()( P! U+ J, C! ~1 @
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')4 b- p9 F/ r3 Y' `% i
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()# E8 K A1 ]7 U i9 z6 F% H
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
7 S2 C# q; E" w' L; l/ p8 u+ cdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
4 x* ^" C+ C0 p" L, d% N# G0 K6 Fdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
1 u3 O6 u1 T' z9 y2 @driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
& e* ?7 Y9 v! K* U' _driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
& }* h# T- L3 Tdriver.implicitly_wait(1)" D; L( n! _2 ~$ X) U% g
# click vertical stride1 X i8 k9 _# Y4 \" L, R% H, h" P
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()+ T$ F) t/ r8 P. L' ^; p
driver.implicitly_wait(1)
3 c0 V" z- C' ^# L' a' ~( W7 K# click to add lon/lat variables) Y% b5 Y& p) Z$ O5 k
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()* n6 l. T J% z4 b/ n- ^0 T, ]: a
# choose output format
W4 z& ?5 ]6 Gs = driver.find_element_by_name('accept')
0 t, `3 r( _. ]/ k, cSelect(s).select_by_value('netcdf')' C1 c! h! y' k5 m- J. ]
# click single time, and input data_time0 |2 U" L; t/ \9 u* r
# 天
- g. u m6 f- L0 vn = 07 l7 L n+ H- o
for m in range(3,12+1): #月份
5 O/ c8 Z/ f/ e4 v9 r) {* X if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:2 i2 H$ m! ]: o! c+ N. t. L
month_num = 31 # 天数: ?/ L7 \# ^* O$ M; B' ]5 q
elif m == 4 or m == 6 or m == 9 or m == 11:5 V6 g3 s$ |& y8 U
month_num = 30 # 天数
/ x. ^9 T: U* V# m elif m == 2:; X0 U3 o5 v i+ H! M: N
month_num == 28 # 天数$ I5 c z) d9 C& S8 x: k* G- j7 b: d( e. Y
month = str(m).zfill(2)
8 }5 z/ Z0 c+ |8 Z for i in range(1, month_num+1):
& i9 m: b' m. V$ H" ~0 ? Day = str(i).zfill(2)
. c3 k3 \2 n5 U$ |8 u keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期. B! r8 O* |! Y+ Q$ g
print(keys)- K( v- D( B( x1 X+ u
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
$ A+ i6 D* k; a: y driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys). }" D, U" r; A, w7 m5 a. A" z# q
driver.implicitly_wait(10)4 ?% ?" P) [4 u4 ]5 l) |, C
# click to submit
2 S# w* i o3 D- u+ D* f driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
* b: ?. z* S @* C/ ^: j" I #time.sleep(3)
+ Q2 i* t) _$ t6 X5 V #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click() }# l4 z- ~% X1 Y# {
time.sleep(20)2 m) D& P: p9 {& B
dir = '/Users/qiujingyi/Downloads/'
3 v: U, |, j R w, [) H oldname = '2011' + '.nc'
- w* _' Y5 X8 l" w+ s! X) ~ newname = '2011' + str(month) + str(Day) + '000000' + '.nc'
) K8 |$ ~3 h# N- j! K+ Q os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
8 @1 H2 C" D( Z% T'''
8 V. o" X% }5 x9 ?& J/ X7 R# 天+小时
, Y' R- i# Y6 d7 un = 09 F: {+ @+ ?, r# K
for i in range(1, 31):& M" Z6 J o& T- |8 `
Day = str(i).zfill(2)" ~2 y5 H* g0 w0 K& e: S5 A
for j in range(0,21,3):7 _2 R# C6 C7 m- C4 R* g; n1 a" e$ z5 U
Hour = str(j).zfill(2)% W& Z# z8 N- l3 c {+ B- W* {4 }
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
' u8 x A3 [ I6 B ?, |. G print(keys)
% @4 n5 B7 s6 V8 N& B& n driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
* v( D" b' V: |4 W9 z driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
+ [1 U! E6 W5 n- A, A& R driver.implicitly_wait(10)! ]3 F, G' P. J+ _) y
# click to submit% Z y3 E# n2 j) ]! Q
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
3 ~% B* [$ f* [1 f1 i( z; S& Z #time.sleep(3)
! U! d; `1 ?. b9 }( [5 Z' ` #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()4 ?$ h i$ @: ^5 x% u7 B$ _
time.sleep(10)
( q9 y: h( H& a3 ~2 Z dir = '/Users/qiujingyi/Downloads/'
1 E7 |+ P$ h) I+ @7 O7 w7 V2 p5 S oldname = '2012' + '.nc'2 A% o& a; u, Q
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'- ?' A. i. S7 `
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
+ {8 `$ h7 J" U4 B8 G3 K! c'''
. t2 d* S7 n9 t+ b4 v
+ s7 m- ]4 q! _( ^
# H- R, \5 f) _- C0 c
8 v3 r9 y1 J k6 j' e4 g
Q# A# F' Q+ W" Y- Y c) m 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |