>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
* P- ^# U& k- c9 i1 R5 e=====================================================================5 _- H, d. {8 u) d# y
import time
" j2 c4 a% c: E. a" S8 |2 @import os
( t Z' Z" k* s! W3 y5 R/ R s! Tfrom selenium import webdriver
: k$ Q+ ~6 a$ T' Efrom selenium.webdriver.support.select import Select& T7 S$ Q- V/ w
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
& G8 B2 R- V" c) f0 c. M( Vdriver.get('www.52ocean.cn')
$ i2 ^" r: L5 K' S* i" T! A#driver.get('www.52ocean.cn')2 G" ?0 ^) H2 d* X2 O
driver.implicitly_wait(10): P, y1 C: S: s' d J% C8 Q8 _
# click ele
# Z# ?' ^+ `4 vdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()
1 T* H1 A6 E, g$ a# click S,T,U,V
; j2 i: L2 n2 n* V* @driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
4 l; y K& f$ d4 Y+ A. fdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()+ E" ]6 b8 f$ \- R
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
' F J2 O* Z' D9 `3 zdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()! C7 s+ Z" C$ C. v( N* n
driver.implicitly_wait(5)
; Z9 C8 N N+ G% A0 N4 J# click Disable horizontal subsetting+ f, j: J9 o9 v4 E, [/ W
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()2 R' T( t- h' v. p- a' N. L
# input lat,lon: K, p/ P3 d. Y3 c
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
# }( `2 S8 q1 n" x+ }driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
/ ~, y( |) K, U! s, ]( M' j% udriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
; S5 X* S3 y4 W+ T' V0 jdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()0 j$ d8 [: b% ?* D
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
8 f1 ^+ v d; s( v% `0 vdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
& z) X% |; o/ [driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()2 }1 Z1 u0 k) |, Z! {
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
; L' {7 {# `4 ^0 T) o# ]. q4 idriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
# Q" G9 o Y' w v0 K) c/ Fdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
$ A$ i8 [& N. z a1 K$ `& _2 Ddriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()0 S- y* O c9 E s# M- Q3 q
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')* h. l3 z+ G, \# ~, g. M' q1 [: l5 p
driver.implicitly_wait(1)6 f9 y5 t5 @3 B9 p; w4 J
# click vertical stride
* a% k1 `& B/ }- g% Ydriver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
! b5 ~2 I4 q* [driver.implicitly_wait(1)- l; _9 I( l9 U: G( B7 x
# click to add lon/lat variables
" F5 A# R/ s9 i4 }$ x; Wdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click(), B0 H5 J) a3 N$ M
# choose output format3 N9 j+ S0 w& Q! s# y' n. |1 a
s = driver.find_element_by_name('accept')
! K, x& Z5 e# Z6 p G$ h8 |Select(s).select_by_value('netcdf')( D5 I+ M6 T0 e) H$ ], n& l
# click single time, and input data_time
* y. u; G: T: y) x# 天' R2 n# V8 o& ~
n = 0
}1 j& @9 F4 E, b! s4 Q- Ofor m in range(3,12+1): #月份1 u* r) `/ } b
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:+ p( k( M b: y9 s$ Z% V( n7 D
month_num = 31 # 天数
/ f5 S; c8 u; g- p0 } elif m == 4 or m == 6 or m == 9 or m == 11:) {: D8 D, }! Y
month_num = 30 # 天数1 f. E7 b! A% w/ e
elif m == 2:/ c& _) }7 j/ W7 d
month_num == 28 # 天数: [, t& B7 z) u+ n9 D) ? |
month = str(m).zfill(2)
+ P9 j: ?4 L; x: m5 o& v! W for i in range(1, month_num+1):) @8 _/ C/ A3 ^0 O- h8 z1 r) A
Day = str(i).zfill(2)
% G9 I7 ~: z7 f3 v( Z& i keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
' C% J, V6 ]; R. b2 I, l Q- ` print(keys)
, Z+ I1 ~ b4 X. L; `5 t5 ~& C' V driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()1 j) T! K9 K$ }6 b' B0 B( Z# U- w
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
7 W% [5 \2 B C; d driver.implicitly_wait(10)8 i7 ], Q- I/ R9 H" H
# click to submit
. M @. ?5 |' ?3 s& B driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
! w+ w3 @0 y2 i$ p #time.sleep(3)
" l" f! m) e; @# G5 X7 N" I #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()' b! k' u$ d2 ?
time.sleep(20)/ `4 n; J6 |2 i6 {% z0 u
dir = '/Users/qiujingyi/Downloads/'0 X" K% s2 F$ _# |; D# f8 k
oldname = '2011' + '.nc'
4 Q7 V. m/ A# `6 g newname = '2011' + str(month) + str(Day) + '000000' + '.nc'9 j/ i9 O9 N3 U7 C, L; m" G% }
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
- M& n& Z# a/ Q8 F'''
7 Y# R- C1 [' |' r2 ]0 k# 天+小时# g* ~1 _- C$ L; g( s3 R
n = 0
: o) J* ~* i' Afor i in range(1, 31):' ~0 g: E+ K. ~9 f$ k- ]
Day = str(i).zfill(2); C. H$ s: e7 w$ g5 I% M
for j in range(0,21,3):
7 c: O& [; g% u/ f& u, X- S$ f8 z Hour = str(j).zfill(2)2 R* ^: A3 a$ H5 B/ p$ | F! t
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
* o1 s( J' O1 h$ B* |" u9 g print(keys)
0 Z0 Q- T) q n5 c3 c! N driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()/ ?! v# l, j. O' V: v2 u: t! R) v
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)2 O7 ~7 L# e6 t6 B8 I5 w
driver.implicitly_wait(10): L% B9 E, q* E' P
# click to submit
8 a/ F/ p0 X& j driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()1 I* G# H# T5 c
#time.sleep(3)5 N/ k. L9 y2 t
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
1 c" o s% I9 o |! H: O time.sleep(10)
/ I6 D' j; \5 I: ]5 N6 q dir = '/Users/qiujingyi/Downloads/'
5 i: ?3 ?; q, A1 h1 |$ y2 ~2 ^3 M oldname = '2012' + '.nc'
7 h" Q( ]4 q; a newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'
3 V7 Z, f' R0 J4 _ os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
. V: l" m, |0 k; Z'''3 C! x, k) P3 {" E6 M: q3 Z
% b- Y, |9 c7 H1 K" v/ V0 ~
^" L) h. Y. d; w, O0 ?, f; C ; K3 u7 B- W, u
% F* _7 S1 I+ |, Q! R1 g0 ~, d
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |