>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
! ?% ? b; c2 O=====================================================================
2 w* r0 h8 T3 F& yimport time
$ b- J7 r5 F" K5 m# @& mimport os- N# T: _$ H3 X/ W+ M
from selenium import webdriver2 r7 `' ]: ?$ { B, H
from selenium.webdriver.support.select import Select
" x; x( [5 C8 d, ddriver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
5 L: s5 _6 x, p6 b* r! G0 ]8 R8 [driver.get('www.52ocean.cn')
* v' a; x$ ~; W, k' b$ \& P#driver.get('www.52ocean.cn')
' J' l0 b& O+ W( W4 D/ `, h8 j& r8 R: }driver.implicitly_wait(10)2 u6 D, `: W$ _( d8 b9 |# |
# click ele
3 b& h5 O& I1 w7 F; idriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()9 c1 M- c* {6 Y1 Y y9 |
# click S,T,U,V P6 D, d: H! z' F8 J2 o. i2 N
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()' q; t* K) i G: v- B k
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
) l8 h4 \1 g0 @/ [3 j4 Edriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
( U2 { `8 s4 [/ U6 j/ N+ Q) Bdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()8 T, Q: V% P1 Z5 ^
driver.implicitly_wait(5)
' X- U) Q6 T _" C9 o# click Disable horizontal subsetting
4 V0 r3 b, T8 F0 W: f/ jdriver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()
- n5 k' u2 K6 _# a# input lat,lon
1 k* s7 K& T. [$ V) Q3 Ydriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
6 w" C1 t/ \/ [1 t+ _" qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
# S. P; \! \4 M! i4 r4 c/ adriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
$ X* L/ @/ a. S* ]5 O9 a; C9 R- J6 B0 Idriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
! ?/ }# Q* t$ ]: U7 Q8 xdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()* A+ e5 l c ?/ T2 u3 P/ v
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
2 F. p8 g, u2 |: ~: k. Sdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click(), F, r1 D/ m# L6 b
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()3 \8 F! h {( ~8 {8 t0 ?# @
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
, o7 P% Z2 |* Y6 h* Sdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()! M4 v- o, {2 I& O
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
* f. j+ o' D$ Q1 Jdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
5 Z& k* Q* ?: j1 xdriver.implicitly_wait(1)
2 j9 I, F+ H( d5 n9 n% d. ^ W7 b% s# click vertical stride
& q. S. O* t7 _' n% R" ]driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
" z3 R, k+ x" O% Ddriver.implicitly_wait(1)' L( _8 a( Y7 Z% ^8 i* J& f- ?
# click to add lon/lat variables# F% w0 k" x0 t' }* f4 w0 H5 }
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click(); J* W& G( J+ M. [' ^# t0 X
# choose output format
7 S# [9 A) j+ e+ a( vs = driver.find_element_by_name('accept')
; y3 S$ m' c9 U! U5 p/ bSelect(s).select_by_value('netcdf')0 ?; n# P* k$ }; n, {
# click single time, and input data_time
; ^, {( y7 v9 i/ L- V; u: S# z# 天
& ?* |' u2 K% z. j# Fn = 0
! ^. b* g- [$ b, xfor m in range(3,12+1): #月份
, e! \6 }7 k! A! } if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
8 ]1 }# U- N6 M* _) `1 k month_num = 31 # 天数
$ p* \$ K: L# X& X elif m == 4 or m == 6 or m == 9 or m == 11:
' e, M4 j# d0 X p6 t9 C month_num = 30 # 天数
7 {; S0 [& B% S% ~ elif m == 2:$ @ U/ b, O6 [% c' p- r1 B
month_num == 28 # 天数- p- K; z: P! T& y3 |
month = str(m).zfill(2)
% `! f& r. r$ R8 H* F: A; z for i in range(1, month_num+1):1 Z2 u5 G4 R& `% E: D; V% q
Day = str(i).zfill(2)
9 |- [! U! l* j; a, D keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期/ ~' i1 I4 ?$ P/ s
print(keys)7 P) V+ G4 {, S4 s( R0 i
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
# j. q, P& h; ]! | t& B; w driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
% w6 i% p" {& R) f1 h. [3 ^0 q0 e a driver.implicitly_wait(10)
6 @& I2 Q' T5 j0 d& n% ^ # click to submit
1 U# }) B0 `( Q0 k driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
: Q8 i' g+ t) i/ e- ?! J #time.sleep(3)
$ }+ P; J9 t8 X+ |7 R$ V. s #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()1 `4 p" y4 x: x
time.sleep(20); ?5 Z, s s& \. ]( R
dir = '/Users/qiujingyi/Downloads/'. p" p7 t |" {5 v% l
oldname = '2011' + '.nc'" U. f9 g% l6 @$ i6 c/ O: L
newname = '2011' + str(month) + str(Day) + '000000' + '.nc'
9 } Q) g0 e' d9 m3 k6 \ os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))9 Q/ C3 k/ P% ^$ C5 A9 u" Z& H
'''' j9 H1 I U M9 M, ]
# 天+小时6 B4 F: x" I3 D
n = 0
% \) K9 V J: i0 l5 L5 r3 F, efor i in range(1, 31):. @! i9 T2 K1 N0 P. B$ |
Day = str(i).zfill(2)* w# K r+ P ?, W
for j in range(0,21,3):; a3 R; P# n0 n9 Q
Hour = str(j).zfill(2)
/ q0 p9 Y0 d! j( i% z, j& c keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'6 L' H# q8 w/ B1 I/ |" U2 d
print(keys): Q/ W. C+ R5 A4 m- `( o# n1 h% c
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()4 f2 k8 e/ K% C m2 [) \
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys) v8 \9 N' L& R1 D6 q7 K& o
driver.implicitly_wait(10); K+ T* X) O9 V$ v% I, B6 s: Z4 y
# click to submit
: v/ [& f3 k* h, q4 j8 | driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()' H# C9 U" V# W5 m
#time.sleep(3)
$ E2 [; N1 y+ h8 |6 C #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
" { J& Y1 U( `4 v. l& [% T& a time.sleep(10): m0 ?+ ?; \1 R, y- t# V$ I: h
dir = '/Users/qiujingyi/Downloads/'
# o$ r2 j- f/ q6 Z; S) F' U) n$ T oldname = '2012' + '.nc'9 F2 i( g% b0 [( g, v
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'' U- s$ S- R; x. p9 a# r5 i# b
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
' g( i* K2 U% w. |" X' e+ S; o1 U'''4 i. `: D8 a s8 O& }# ?5 v
0 S6 R6 @ E2 G" f W I3 w% T& u g
3 K4 Y# T! N) U S+ s & i# N% A" w# k- ~
! f# O! p% |& C# N1 a
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |