>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)1 u+ {: E x* |# \% y0 D9 z0 K) Y
=====================================================================5 ]2 g3 L$ N$ m7 O
import time. g2 k" G. J9 m6 x0 i/ }
import os
+ w2 H! @8 f2 S4 ]) N6 P# |* `( Mfrom selenium import webdriver
$ Y" t% c) m5 o8 xfrom selenium.webdriver.support.select import Select M# ~( q! z3 H) q6 j# V0 Q
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
3 E6 C. k0 H6 R, U8 m& Zdriver.get('www.52ocean.cn')! ?6 b& l: A% v* t4 a
#driver.get('www.52ocean.cn')
+ x) t4 p4 W, [' P+ C$ Y; K) `/ _driver.implicitly_wait(10)
% _ n% N; k8 W& x1 T2 X, u9 P# click ele
9 e m6 ^! U0 q0 Tdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()9 f1 P# h+ k6 ]& N7 j( {( y
# click S,T,U,V. p. f: G. g: c4 e. z: U: v
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
( A2 U- E7 o( r* h( a# _1 Zdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()3 W7 C6 D8 k! ^2 `+ [2 q7 D! R
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click() C3 b2 Z9 y: v6 h' _
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
{5 j' i v& z8 G# C8 Ldriver.implicitly_wait(5)4 o$ H; J* X: l# T w3 c2 o
# click Disable horizontal subsetting6 \$ i4 _+ A( s/ j* d$ G
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()
5 S6 f4 K: V$ ~ B7 G5 N# input lat,lon
6 g0 z; [9 c# S. k! Gdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
4 @2 u2 ~5 y) f( l% X; Xdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()4 t+ H& [' r# r, h. L
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')0 A* o r0 m% [ `7 l
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
7 _" S2 A4 Y& M. e9 q+ qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()' J/ m$ V s- X
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')3 T9 d" }- k: V- [" u0 e
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()
/ [+ K8 k1 T+ n. o' }2 |9 ~driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
+ L, Y1 A! N0 t; U- bdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94'). @4 x- L' ~1 U5 r7 {
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()- D; _- @! z5 z3 s
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
) r# z5 _/ G" J! O. L1 Vdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')$ i8 N6 i0 ^5 t9 s$ z4 E+ ?/ O
driver.implicitly_wait(1)" R3 C* x" F; d8 l2 D
# click vertical stride* ~( c1 ^2 i& \& [. |! V; s0 J
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
+ _, v# l. \3 a& D5 Qdriver.implicitly_wait(1)6 L" H+ B1 O. y) z$ V( P( F$ [
# click to add lon/lat variables, M8 I; i( d' ]7 R
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()# ]) g! `" m. P( ~* d- p6 S
# choose output format0 z( n; U+ f: K5 `3 h% ~# I
s = driver.find_element_by_name('accept')3 X0 M! W3 p2 B t0 S E
Select(s).select_by_value('netcdf')
" [, b9 N: c6 D6 P8 g+ M8 _# click single time, and input data_time! S8 v' O, K3 s& R
# 天
/ ^# \2 u0 g" i1 r! _8 f4 dn = 0
2 ?# a6 j3 V3 ~- l. {# j x! Jfor m in range(3,12+1): #月份# q" g1 {6 Y7 U b e( r2 k) e
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
- O+ |+ q6 |- f2 h ?3 n month_num = 31 # 天数* j* L8 `& b; k( ~# J# G, |* A7 O
elif m == 4 or m == 6 or m == 9 or m == 11:
; {0 m9 F. `! H month_num = 30 # 天数
0 i) X/ _ O$ j* } elif m == 2:" E2 s3 P& h$ |, q! x
month_num == 28 # 天数
) }( v7 Z" \' n: b month = str(m).zfill(2)
* Y8 p5 q/ P# R9 r; i K for i in range(1, month_num+1):
; l3 x4 p5 l8 O) ?5 V) Q Day = str(i).zfill(2)
' M; H, y0 c% |/ C0 x5 u keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期7 z/ E4 F+ @, ?
print(keys)
' @+ ?$ L- m& u/ m! e driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
2 n, [) W, }6 P' K driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)7 o( g, J1 M% j/ l$ p" W4 f
driver.implicitly_wait(10)# R% ^5 e. \7 n
# click to submit
5 H* N" H$ b# S: h' {% A1 d8 R driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
1 r* j+ Q. W/ S; y) C #time.sleep(3)7 ` J6 i" [. y" L. b9 h( t) [. \
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
& e+ G4 P% K: R& o E$ L* `+ | time.sleep(20)
$ b6 q9 O7 F& t t% j dir = '/Users/qiujingyi/Downloads/'" T" o* E$ `+ |/ D' Q3 v5 @
oldname = '2011' + '.nc'9 _( R M) Q( h% R) y
newname = '2011' + str(month) + str(Day) + '000000' + '.nc') x/ v4 J8 I, ]5 A2 g1 R, k" f8 Y
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
- S" r: q, d5 R2 W1 D: P1 o" g'''; V8 x! R0 W9 E6 k* q9 i
# 天+小时
3 O3 z1 `# u) O gn = 0
6 g6 p/ i" N5 n8 F; y8 W6 m% _for i in range(1, 31):7 W; e, c; N4 T% e) ?( f
Day = str(i).zfill(2)/ Y- V$ p- i8 m) }! l( J
for j in range(0,21,3):
& n* p6 H# x1 N9 Y Hour = str(j).zfill(2)3 S# }: W: k& G' K, [. X6 u [
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'! g( f+ ^. W6 @6 q/ d7 b
print(keys)9 j& K5 m$ L7 ?* R: r( J& g1 N
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
$ k0 }% ]* K- X+ V1 w. O driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
( G5 _& m; l' m" Z0 I driver.implicitly_wait(10)) M% j* u2 f) C
# click to submit4 p4 x% }+ P# q" t
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click() T. `8 y. C! R. c7 s
#time.sleep(3), g; ]5 ?) ~7 h) e
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
1 e# B0 e" e1 [) o5 L5 t# N* K: V time.sleep(10)9 c; v5 C2 E/ {8 F
dir = '/Users/qiujingyi/Downloads/'# e- ?5 Q8 t0 o
oldname = '2012' + '.nc' [* C9 n. v8 @; }- l. S8 e
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'
) V4 w7 Q9 l0 G# f os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))6 K! c7 U8 H3 e, Y. j
''', v+ i( d- w: ~6 b
. ^' |% e) E) `" s5 ]2 s3 D3 l+ ^
3 {( o4 {5 @$ f
. D4 @% K& c s4 f
I7 w* w& a: \* M9 P 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |