>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
" a. \' K/ \3 I( ^; G=====================================================================0 @$ o s1 n4 M" O* r* G! K
import time( Z8 L% u [& t, M+ o9 R' d' Y
import os
" J# ^# j- _" `: v8 lfrom selenium import webdriver! {1 `; K" ]% k
from selenium.webdriver.support.select import Select# `, O+ f! _( J( B
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
- y* a/ A; t' y1 y; S) @driver.get('www.52ocean.cn')
; a5 d, e! ~1 s6 a, b#driver.get('www.52ocean.cn')6 M, X% M/ b/ s6 ?' P
driver.implicitly_wait(10)
3 j8 [' i0 N7 o5 Y% o# click ele5 ^% g: J! {/ s9 X% i
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()
. }) ~( M- o+ w' i2 k; d" H9 q# click S,T,U,V
9 R$ b2 }7 b7 W/ F. h. _driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
/ B/ u [6 F0 F* ~driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
3 L6 F/ C- |: e1 K9 edriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()/ h5 N- ^; Y& I
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()% U9 V8 B0 O- d/ M
driver.implicitly_wait(5)2 }, a( K% [ y. F- d0 }6 Y
# click Disable horizontal subsetting n& C7 z9 x: I3 z
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()& C+ K+ k0 U) u: Z* Z
# input lat,lon8 \: V7 M* u v; i8 h! l
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()) }7 C7 o( T$ V* l" Y
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
3 T; B0 h+ F2 o/ l/ Mdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')3 D) Y. ^' z- |( @- j: M
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
* C/ H9 D) R; m+ Q6 ldriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
* s8 Z `5 V5 \+ }driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')) n- z3 b; `: ^/ Y5 e
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()4 F1 |& T0 R* W& r% y
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
9 P2 B6 W" K% r, C q/ |) m6 wdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
: \; ~) i, B) l6 W0 T. m o; @driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
# ?5 z$ Y6 t4 o( a; qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
+ u* m, Q; H/ K7 w: xdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
* W& Q5 n- |0 @driver.implicitly_wait(1)1 M: g" U( J3 q4 t* ]7 ?
# click vertical stride
9 ~3 b! U# [3 p: D& vdriver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
6 {- {7 u; X0 B) k: g+ J8 z. Cdriver.implicitly_wait(1)- k( P' h) ?# \1 {) w
# click to add lon/lat variables
: j+ z& t- W3 odriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()2 C8 \" [( a7 a0 ~3 @0 M* F. n6 D
# choose output format
3 K+ P* K# ?* ?2 F$ e3 Ss = driver.find_element_by_name('accept')
9 y( o7 F3 M$ o( U+ _ m4 f1 ASelect(s).select_by_value('netcdf')
1 e4 ^; m$ ^' B# click single time, and input data_time
6 [; P2 j4 t; I* d# 天/ d8 N" b: ^" y1 C& C r- e: t/ n; X
n = 09 y! _: Q& ~6 @ C
for m in range(3,12+1): #月份
4 i- D% |4 g. M0 z/ U/ ^ if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
; W% u- a8 Y- z0 y month_num = 31 # 天数! c4 `4 f* [6 j+ {! ]
elif m == 4 or m == 6 or m == 9 or m == 11:
! N6 C A0 q# ?5 Z7 F4 J( V1 u month_num = 30 # 天数5 |* M' {4 [2 _7 G
elif m == 2:6 \3 D* B2 |+ m% J$ U& K5 }
month_num == 28 # 天数 c. h0 ^5 r* C. q' {. I0 Y+ S
month = str(m).zfill(2)
7 G7 u% V$ o- G3 `5 T for i in range(1, month_num+1):- N0 z' u' f _
Day = str(i).zfill(2)' x7 c( g9 @% A* C+ m) f5 J, {0 F
keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
% z2 B1 f r5 r$ H8 L- o print(keys)7 B, _" o! |4 {* m! ?
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
+ i) S9 l3 ^* P5 f1 c5 M driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
! S6 J1 x7 x8 Q7 i driver.implicitly_wait(10)
* M( z: i- V& F$ ~0 t- ^ # click to submit
) r s# V, d& P5 j% p4 g' r' e$ \ driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click(): v9 c* s: m$ ^6 b- w
#time.sleep(3) ?0 I+ t4 @7 h) h
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
2 p# \" K# T, w* P7 D: e time.sleep(20)
9 f7 r+ E( ?- B$ w dir = '/Users/qiujingyi/Downloads/', f! a% C' t4 O$ t7 z
oldname = '2011' + '.nc'
/ B: K% q5 X( ]3 _& e newname = '2011' + str(month) + str(Day) + '000000' + '.nc' N9 r* h* k8 A) _; O
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))0 [$ g# J8 @1 S
'''- [. Z/ \- C7 l/ ]! y0 z
# 天+小时) k: E r, y5 e2 ]
n = 09 h$ w2 @& F$ x; q' }
for i in range(1, 31):4 V6 n; E+ K! {8 D. B6 G9 a
Day = str(i).zfill(2)7 B+ d% x1 Z; {6 i, {, j9 a( y& i
for j in range(0,21,3):
s/ {$ _4 K7 g: H Hour = str(j).zfill(2)
5 ^/ E- R( D( Q. O6 S$ l keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
! K. ~. c8 F- r& z0 P* D print(keys)4 X6 o- J+ y: W- y, B) J) O
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()2 w0 a" X4 W2 a( W
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
5 J0 r8 z* k2 i L( E driver.implicitly_wait(10)
# [- D' v: T( A/ e) T # click to submit
2 y, J/ X T2 }( O% A7 P; ~- }( a6 z driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()* S# R# H' ]/ r# p1 D3 m
#time.sleep(3)
: ~& M* L: g4 c0 V* u6 h #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click() D d4 }* b4 f
time.sleep(10)6 W: C4 y+ \$ I( ]7 Q2 {5 x
dir = '/Users/qiujingyi/Downloads/'
' ~- K0 G% L5 z, x. ?- s# Y oldname = '2012' + '.nc'! K0 N7 z" A# N1 O% m
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc' r4 i8 G- G/ ?% L
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
9 v* x% S9 C2 h2 I'''
, T, n, @+ W7 A
3 c2 x4 `+ J. s
Y g! w# u2 L" {
- y9 l' y, L8 ` N# Q. x8 \. O) c4 v" ^" U9 x$ _
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |