>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
* D) G8 i5 H' z=====================================================================
9 F8 ]! N: ~8 Qimport time
% p) }* D$ \* }( g" T9 L$ T! {* X3 Nimport os3 \( D7 ^% f5 \4 e1 L; B
from selenium import webdriver
2 o6 D. s2 h* P1 e; G. l: Y! I4 Nfrom selenium.webdriver.support.select import Select; N/ L2 H7 l. L7 p7 L
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')- y+ x f& a6 }& O/ F6 n. U
driver.get('www.52ocean.cn'): C2 g' f( ` D1 V- {
#driver.get('www.52ocean.cn')
& o( h2 r/ P& ^driver.implicitly_wait(10)
# `2 o/ H2 o2 o" b, F9 \# click ele6 F2 N$ x7 n" v* s" D) S6 Q, y
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()
$ V( U# @0 C" v( l0 G8 B# click S,T,U,V
: T1 r# J+ J! `+ gdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
/ H% w3 }( |0 K. Kdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
0 [4 W z) G/ \driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()2 d/ x% x: J$ w3 n0 [
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
, i" a( m$ F: J4 Zdriver.implicitly_wait(5)- R, P. P$ P% C$ p, k2 I* W: `
# click Disable horizontal subsetting
. c0 W$ I9 h( Q4 p. Sdriver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()$ K# \9 Z1 r+ W) P' i; ~7 l+ l
# input lat,lon9 ^5 j1 N6 Q$ C7 o
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
3 j# F- W% ]$ r& Zdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()7 F* i0 g& A3 x) W; d. T
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')9 Z' g0 s$ Z$ _5 a- |% m4 S+ s
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()& X- D$ \9 w9 Z c9 R( ~3 p; z
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()1 `, n/ E+ o4 a' ` O! L
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
! I. [& b; w/ C- o: ?& I, |driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()
- @2 T, i5 ]# Q7 [0 c. Ydriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
3 t& U* `% ~+ F Adriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')$ h" s k" Q; ]6 P5 ~
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()! N5 L. o9 `5 a* g
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()* R% }( U) X% P, n( E, _ n' `
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
; X' o, L$ } p, z" Ddriver.implicitly_wait(1)
* d! q: J1 U+ h( ]# Z" Y# click vertical stride6 R8 D; q7 f2 n" R" O
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
) _- X) `: h9 l8 Z( \driver.implicitly_wait(1)0 A% |9 F1 U( a; C3 \
# click to add lon/lat variables. T0 Z; u8 b* r4 O8 S {8 E
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()
2 |2 n6 W% d3 v9 M6 O3 C# choose output format
) x' [) q3 P+ r- I% ~8 ss = driver.find_element_by_name('accept')9 n a: H' A9 H; t
Select(s).select_by_value('netcdf')
3 S2 Q% e/ _4 y( R* ^# click single time, and input data_time
* b, M' k/ k' l# D# 天
! n; v3 b: K+ V9 k0 e( In = 0
8 U* M. U2 |* Q2 d2 nfor m in range(3,12+1): #月份
- A1 U9 L! F9 k7 g2 ^0 _ if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:. z" J+ w2 @+ Z/ ~
month_num = 31 # 天数
( z- P" {" c) y6 ^: ? elif m == 4 or m == 6 or m == 9 or m == 11:
" a* H4 ]( ? d* @( F6 y month_num = 30 # 天数
+ o* t# P: J }/ i' o* n# t( U elif m == 2:
6 F% x% y+ ]9 U" O month_num == 28 # 天数# V* e: h2 `& T9 z
month = str(m).zfill(2). J' L3 j8 I7 C2 s8 l
for i in range(1, month_num+1):& B4 w/ K* {+ P% _- H
Day = str(i).zfill(2)
9 \, J! t0 J$ v0 o* o7 f+ |0 z9 N- y keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
) N: g. X! I! _5 u0 O4 b print(keys)
. a$ x* r& [" n# p% K% d5 f5 H driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear(), O8 g: l4 \# G2 A& H, p" X
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
- v$ W2 D5 Y, ~3 c( o- O driver.implicitly_wait(10)
1 ~, G4 g! M5 n O: a( U # click to submit4 S+ \& I7 `$ W }4 V% }
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()6 k- l( D; E, E* e6 y
#time.sleep(3), L& h. S% K5 A! R( O, {" R" K
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
( R: K# B4 U7 L: P* v# L% x time.sleep(20)
/ f" n0 Z% c: S dir = '/Users/qiujingyi/Downloads/'
$ }$ H8 X3 Z2 L" G9 E) s! } r oldname = '2011' + '.nc'
; u- s6 d B* u% J7 _6 L$ | newname = '2011' + str(month) + str(Day) + '000000' + '.nc'
) a3 ?2 Q9 s( C4 q os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
* `$ p2 W8 @2 Z9 d2 W/ Y''': C+ K- j8 X( |0 `# f. L: t* c& S! {
# 天+小时% R% j6 I9 U) F8 F
n = 0, p5 U g# r" T( [, U4 d) Z
for i in range(1, 31):0 P; C* {& _ `; X! d
Day = str(i).zfill(2)% E5 v8 ]0 H1 |7 P: v' J) |2 k6 _
for j in range(0,21,3):& p0 D+ v9 l+ ?9 I3 j/ q* ~6 L
Hour = str(j).zfill(2)3 ^% V8 D6 d X4 V. Z* D; [" C: W
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
4 D+ Z! V5 Z, V& j% | print(keys)
3 U: q$ L0 d; _% D+ f4 K$ ^ driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()' \/ [/ C4 v: `4 F2 u( @- q/ P
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)# Y0 i+ \5 K+ K
driver.implicitly_wait(10)
: j$ k: B2 I: I" Z; Q # click to submit" }9 x5 E# g: f& ?9 o
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()8 }3 w3 @. ]' T$ ]3 T* w: N- Q) g
#time.sleep(3)
2 v9 f6 O" G1 ]9 M9 r #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
& M+ I; {0 d' p6 S time.sleep(10)
+ C$ i1 i( e! k' X dir = '/Users/qiujingyi/Downloads/': l7 x" t% X0 s3 w
oldname = '2012' + '.nc'
# B6 g9 ]6 e `* z1 o4 m. ~ newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'/ r4 C7 {8 X. Q$ V+ x
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))$ S9 |4 d& V: q$ I+ d1 S
'''2 G/ J/ x8 R* k) v3 P T9 o
" P k# e8 `4 W% U# R0 z- K
* U9 V e* u, W p
8 X& u- n, A$ A6 y6 T- i. o
! l8 f! {& T" u, R7 o 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |