>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
+ G! W' q3 l1 S% s, M=====================================================================( X2 |# f6 ~: i& e& v
import time9 o# Z$ x0 N( a' p: S0 _6 ?
import os
4 R6 w: u( V; k% s( _- ^/ afrom selenium import webdriver7 P; p4 @% q$ T% P3 F( `" o
from selenium.webdriver.support.select import Select
8 ~1 }3 [+ b! X, ndriver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')' K7 G4 c$ h) U
driver.get('www.52ocean.cn')
- g2 s( j- d3 K+ q5 f#driver.get('www.52ocean.cn')
+ I. }3 {5 g4 y7 D# D; D/ d9 }driver.implicitly_wait(10)' {# v; k/ [* f# m4 b
# click ele
0 M, V$ P) Y, M0 Pdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click(); i( c! [" d* a3 G3 Q/ b
# click S,T,U,V
$ @& |0 I) C% v# vdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
7 o; d$ f* N2 l0 F* w, Fdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
' X- `$ A! @9 jdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()7 {' I" k' w' \ k4 _4 Y+ p3 t
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
$ x1 J8 s2 \+ ]7 o* m) Qdriver.implicitly_wait(5)6 r: A7 e% c" ?- O, z/ S3 Y8 K
# click Disable horizontal subsetting
; z9 u" ~. l: D( J1 y! L Ydriver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()2 } X _4 L9 O
# input lat,lon; N0 R. c1 G' b5 h2 i+ {
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
, X y9 C0 c5 g) T: Kdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()+ E4 L/ D; v! U- j- \/ a
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
8 B) f/ F. }* H( m- jdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
" P0 r! y9 s5 S3 }! f9 n% a& a* Vdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()$ \! s5 m1 n V) A3 B9 p/ `4 D
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
H$ _; E4 \+ M" k% Z$ l1 E6 Sdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click(): H" G) b2 o n9 B; x" O/ z
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
/ n6 s+ j$ L9 t2 R, b% b& ndriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
' w t9 \+ n a8 q5 L5 T+ F3 |' \7 ndriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
9 D; {# U0 i- t8 r( B2 P3 Udriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
) w: `8 v/ C+ F8 D4 Udriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2'): l3 U; g' U# ^% U- f" g+ p L ~
driver.implicitly_wait(1)( u2 R0 S2 T2 \
# click vertical stride6 I4 h' J4 F$ x5 a) Y+ |" z
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
3 d& |6 H5 V0 qdriver.implicitly_wait(1)2 ]: H8 l0 K& Z4 a: P* ^2 R
# click to add lon/lat variables5 C O+ R! h5 q
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()8 o: [% S" F4 }1 @* o9 T
# choose output format8 X/ Y: l+ H3 t% M
s = driver.find_element_by_name('accept')
. e6 S; p# g) E/ q" JSelect(s).select_by_value('netcdf')% S$ {# \# u. z
# click single time, and input data_time
5 g& l5 u- W/ s# 天2 V$ W! D0 I, `0 R# V9 Y
n = 0+ A1 e1 a$ ^4 w& e2 h1 a1 p j
for m in range(3,12+1): #月份) j5 t9 z9 D: B0 B4 q+ N& z( m
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
& x: }: q, h" J7 B3 i( k month_num = 31 # 天数
, w3 t1 X: G$ x3 D1 l( p$ N3 X elif m == 4 or m == 6 or m == 9 or m == 11:
! T: T9 f( D# e# B6 t$ C month_num = 30 # 天数
/ w6 L2 r9 l' _0 G% Q- t elif m == 2:
7 i# p' g$ ?( r9 I/ o/ N. y: g month_num == 28 # 天数
% q6 h/ F c) i: p4 ^4 B- d5 B/ K. F month = str(m).zfill(2)* g3 Q" z9 d2 j* t9 k3 l. Y
for i in range(1, month_num+1):2 k G7 ?8 m0 d- O1 _' D* u" k; m
Day = str(i).zfill(2)$ Q2 }! M: B8 H% P8 p
keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期- T8 Z+ e* [, L) ]; q
print(keys)
! R% p" v$ c/ s6 c driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
% `8 k( W# B) e% N) I+ J9 v driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
, Y: P2 a: V: s driver.implicitly_wait(10)8 D/ u9 O0 T% Y/ b
# click to submit( b, M; A3 m0 s4 p+ A
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()& \9 \" O8 E; l7 [+ S; A
#time.sleep(3)
9 j1 R+ f6 d& K: b #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
8 A T( P, l7 g) e time.sleep(20)% k3 K s% G/ z5 y4 j
dir = '/Users/qiujingyi/Downloads/'
R0 B1 f7 Q- z( z+ P. @ oldname = '2011' + '.nc'
* o! H6 S2 S D7 b newname = '2011' + str(month) + str(Day) + '000000' + '.nc'2 ]+ @1 C; q0 Y
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))1 ^$ v$ r. N1 k: v9 d6 w
'''$ q+ N$ H3 E5 m' y- S
# 天+小时
6 J8 u! F W7 B3 Nn = 0
' [9 B# R6 ]! Kfor i in range(1, 31):+ |$ Z! H. z1 R) D+ i/ h- O7 q# _2 k
Day = str(i).zfill(2)- d4 k8 u0 X- s a' I- u1 \+ V3 x, G
for j in range(0,21,3):
' D2 A6 h& k/ a% G+ A0 D* G' T Hour = str(j).zfill(2)6 y1 j4 h; d7 S: u' A4 H
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z' b) D; |$ Q1 y* ^# y7 N4 q$ x9 _
print(keys)
# n( o$ U3 n! e1 r driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()8 x) F5 ^: o9 J
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)7 g6 k- k9 q; M( F3 r% p# A
driver.implicitly_wait(10)
, F0 k6 a4 q2 H& S* s; h# n # click to submit! Y+ v) P2 W/ [# m( }& I
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()1 ~3 A- t, }3 i, G' [; e
#time.sleep(3)
: i5 g+ _- [4 i8 ?+ U" `, q #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
4 w/ D# U* ]! Q D/ Z+ o time.sleep(10)
& H8 E' N% C5 U$ E4 \ dir = '/Users/qiujingyi/Downloads/'+ o4 v* A: t( [3 R7 \- b1 q8 r
oldname = '2012' + '.nc'
7 B3 g; N# M9 T7 I newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'* \ T" S- X: ]. I# z
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
0 Q! \2 s6 R5 t8 ?; e8 a'''+ P- ~$ V. E, ^
! x9 f) K/ N" f, X. A2 \6 T+ G4 H' _
- ~2 t' N& z( b/ p$ Q : ~# l% ?- t( L, E% c
" j" S6 n! W5 y1 Q+ C$ i9 _8 R
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |