>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)1 f$ q) ?$ a" N" n; ^" r
=====================================================================! V/ q& W: m4 p; i0 C n2 t: [" G) p$ Z
import time; ?+ c3 o' I' V
import os
! I' T1 W6 h3 Kfrom selenium import webdriver
# T, x* R4 [. q9 K9 @from selenium.webdriver.support.select import Select
2 M3 `! C. Q0 n* u* Zdriver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')$ B' D: ^8 Q/ s8 X( n/ P3 Y, _3 v
driver.get('www.52ocean.cn')
. F: Y A4 J1 ~2 z: |, i2 v. O9 d' D/ J#driver.get('www.52ocean.cn')
3 A) \; r! K: c9 x- [1 o0 L+ o3 Bdriver.implicitly_wait(10)
* |$ u8 k7 T4 T D# click ele- X9 {8 q$ w# R0 h: q
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()' V; i7 G A5 e0 I1 t' S3 M
# click S,T,U,V5 U! e4 w5 N, Q# X. u: X y
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()# ]% o. T) r( N( X4 j8 `7 @
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
4 _# j$ e* u7 v/ Hdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
' s8 i( Q/ Q$ xdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
7 z; o( H: n1 l$ `" f' k2 Ndriver.implicitly_wait(5)
% j- G \! F, s& N+ A( c) o# click Disable horizontal subsetting
; ^3 Y0 t( h* F* Xdriver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()
A+ e b* I/ `3 X# input lat,lon6 W" u# |- q% N" c1 ]
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
1 ^3 H+ U6 m- ?3 |7 i. j- `$ Ydriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
# T+ B6 G8 r, w6 G- r8 Gdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
2 U5 n& ]: B1 _2 d3 ^- bdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()) L _# I1 J( z2 j
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()+ @+ f! l4 U, j4 i
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
1 n$ o' h# I5 m, C6 t/ f pdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()
8 G# h1 w$ n8 d, ndriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
! u' i6 z( ^, w3 u- ddriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
" |1 M) E! S$ F+ D- u. u' Fdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
6 @+ c7 e! Q& r* Ndriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
8 e( Z: M. Z# sdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')/ [" B; D: w5 y
driver.implicitly_wait(1)* E4 }8 L0 L/ @( z4 u" g
# click vertical stride+ E" O4 u7 O( T
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()' b; V3 d( f0 A1 N
driver.implicitly_wait(1) w7 F' d$ t: t) g. K% ?. v
# click to add lon/lat variables
& C; d. T) j: f0 K5 x+ A3 f% Bdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()3 y' n4 x/ L7 b
# choose output format
8 `7 x9 k! \& T @0 s. p! F' V$ D1 ^s = driver.find_element_by_name('accept')
$ ~0 j# m3 W1 v" sSelect(s).select_by_value('netcdf')% F A1 p* K: D# j
# click single time, and input data_time
' K5 j0 e, u( n( |5 G, ?$ @& U% v# 天( `6 Z* ?% I: o: Z2 c9 P
n = 0
- I. r- k; a2 U$ X' lfor m in range(3,12+1): #月份" i( _/ Y* R. E2 @ w( ~
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
6 l. O; O; P# b" x, A month_num = 31 # 天数$ f* ]+ Z! H8 y) q( Z
elif m == 4 or m == 6 or m == 9 or m == 11: q5 T7 u' q6 d& ^/ j% O$ O
month_num = 30 # 天数7 h7 W% d1 V% p: U6 D
elif m == 2:- u: @/ m- n' z E9 Q* L
month_num == 28 # 天数. ?6 Q" W' H7 ]
month = str(m).zfill(2)
* P) n: Z* h, f8 G. b* s8 x6 K5 A1 o for i in range(1, month_num+1):
8 y" Q7 ?9 A& w* h3 S; b( H7 O Day = str(i).zfill(2)
% R0 Q X0 c O0 L. L5 x6 e. j keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
3 l' }" C& k: H/ q8 M) J) Y print(keys)
& y+ g; m% Y% j3 ~9 k ~$ V# { driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
2 z& r! G3 z! g/ H8 R driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)' h- T/ C/ o# V
driver.implicitly_wait(10)/ J+ n" W: [5 F y+ Q; S6 g$ H
# click to submit
! l, Y- Q% f1 i6 J+ S+ v' v a% q driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
. J- \% w" [6 \1 W9 S2 ^ #time.sleep(3)
9 @+ E# T, N+ h$ M# E #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
/ B& r! Z- z2 T! {7 {7 A, R1 c time.sleep(20)3 J, P, R- n ?) m2 m- N5 O
dir = '/Users/qiujingyi/Downloads/'% u2 t6 o3 I$ C2 ^# w, \
oldname = '2011' + '.nc'
3 k: E& k9 ^9 t+ L: u8 b# a newname = '2011' + str(month) + str(Day) + '000000' + '.nc'' @6 z6 a b4 u+ ]! i' _
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
1 J$ i& r9 I. D) p' |'''; X. f2 C9 ]3 O6 l5 Z! O
# 天+小时. _7 X5 g' G: v6 |# |
n = 0
+ Z/ T& v& P! }/ l4 @1 R0 V, c; ~1 @for i in range(1, 31):
, M6 n, D- S( [: r Day = str(i).zfill(2)
) H1 l d( i( U2 A7 v# d8 I for j in range(0,21,3):% h/ }* p; K! L& U) ?- B
Hour = str(j).zfill(2)
! p j* S' H+ g( o keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'# B. H/ k: x& |
print(keys)0 g0 Q& m* j$ y) d, I
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
9 C* ]9 Z( D* J/ h6 u driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)4 e5 O3 R1 g" U7 }9 J) F
driver.implicitly_wait(10)
0 O3 J& P* Y2 ~, H # click to submit/ A8 M& Q- u+ Z$ p2 h. M% E2 r8 I
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
! D1 V9 ^. a- B9 g1 \" v4 z( X #time.sleep(3)
( Z% j* e' m/ u+ c #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
+ U# G" [6 ?/ o- m8 ?- v6 n7 Q time.sleep(10)5 ^# d+ V L) J0 v/ f
dir = '/Users/qiujingyi/Downloads/'- \# ]( S; K ?9 n1 l
oldname = '2012' + '.nc'
7 n; Z4 u+ v3 x3 B newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'
: |* P% E: H1 x: ? os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
* Z1 P! R1 @9 b( v) z) A2 k'''
, t/ \& K# l, _1 x) i* u
1 \ j' k$ T5 m _9 M% D+ p& m- r
% D! f& ?# R$ O) Y5 g5 F- Q! O3 Y4 {( s( c: f# Z
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |