>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)5 w& D$ H' B7 S
=====================================================================
7 w& m8 L- j4 J$ ximport time
/ b' _& E1 E9 v+ Wimport os2 @0 ~. D4 }4 b; o
from selenium import webdriver
: Z* c! N( z. gfrom selenium.webdriver.support.select import Select9 F( r- }, q/ r# d
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
7 G) I$ s5 Y$ z9 idriver.get('www.52ocean.cn')' h& d C" q' ?: c$ K( L; y
#driver.get('www.52ocean.cn')
1 J1 `' G: z9 F; @driver.implicitly_wait(10)# N. S" F" W! U
# click ele
6 ~. _2 L# j3 Z+ j2 _driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()- R& {2 y6 o" }# f
# click S,T,U,V6 I4 Q% p2 E, S% o5 R3 _/ F8 y
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()3 m$ x7 s' U# t3 `
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
: Q0 w/ P8 ?8 b# Adriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
! G/ @0 Y3 H1 j, X- ~! R" xdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
" n1 {# O; H; G/ d, Kdriver.implicitly_wait(5)4 Z# d( E( X" }/ F8 `
# click Disable horizontal subsetting$ }) \. Z( h4 y$ Y. G; v( d* g" p
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()/ r: C) X. P U" G
# input lat,lon1 {( |$ M- H6 {! @) |) d- H
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click(), R5 n% ^1 e/ }; I- W9 M
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
3 E! y& k6 U+ G" X: \driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')0 V# ?( d! D4 {7 o
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
- n2 b& `; \) \0 e' i+ }driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
9 G. U* F6 {" m: r T( | bdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')- M4 ]( o. K5 Z+ C, [
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()1 P! e! J# G; A! ]. {
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
: p# c" ~! G8 \& `, wdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
A* d2 X4 H+ q* k/ gdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click() }9 g& F# ]" C7 }9 J4 y
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
# ]) P$ R! ]) m X7 _driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2'). E. y" |2 t+ d- E% [) N
driver.implicitly_wait(1)
" n- B9 c! s: a9 G* k; `# click vertical stride, |- L0 _& ?( }4 w
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click(), j( {1 \8 _$ K2 m
driver.implicitly_wait(1)3 p6 p6 Z2 e* c9 M9 M' u
# click to add lon/lat variables
7 }* m7 q+ C8 L2 Q- [) L- A1 O3 fdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()" q% u8 R Y" _/ B( f& d$ j c
# choose output format0 l) S4 P- d% K& K4 ^' ^# w
s = driver.find_element_by_name('accept')
5 `; m' l1 q7 `0 |" q ?) [* USelect(s).select_by_value('netcdf')6 g, b1 ~4 w8 ~& ~( s( t" e
# click single time, and input data_time
6 ~4 p$ P' ~8 h! g6 A% a9 |6 i: c+ S# 天 n) \& b2 W3 S6 v
n = 0
# ?5 w) T! ?# R) ]# Lfor m in range(3,12+1): #月份5 y% _1 i9 U9 F0 G7 ^& P% M
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
! W+ `4 h' _: o. u/ L5 r month_num = 31 # 天数5 K/ A$ Y$ U. ?$ c' F$ }9 }! v! W; `
elif m == 4 or m == 6 or m == 9 or m == 11:
( M7 W. \; R+ A4 W' n& C month_num = 30 # 天数* E& \) ^# L8 g7 @( }
elif m == 2:
% S! _+ U* i, \" k: A& ?9 j month_num == 28 # 天数 X* z5 u4 ]( V
month = str(m).zfill(2)) y9 W( k# ]2 a2 _8 z# E: B4 O
for i in range(1, month_num+1):& A# F1 }% c. ?3 E2 v! B- p
Day = str(i).zfill(2)% m1 p6 E) o b. K$ p
keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
% p. ^8 j2 j' S7 [, g# z' e2 Y print(keys)
2 Q6 f7 v; m) e @' q driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()6 i; a5 f6 Y$ o3 F0 |1 a1 f4 X+ B
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)- x5 s, W" `/ I# [; U9 t
driver.implicitly_wait(10)
7 o2 J0 R7 U+ V # click to submit
" I8 m, Y' b+ T driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()+ Z3 @; t! [0 @ u, W
#time.sleep(3)
f. L8 M% r( q. p* Z #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
# Q$ x* e2 P. C9 z5 c& P3 D time.sleep(20)3 [5 R, g4 K' [
dir = '/Users/qiujingyi/Downloads/'
# e1 R3 B* ?; A. J- [) Z! U& P oldname = '2011' + '.nc'
+ |4 v; D) s! W4 l) B newname = '2011' + str(month) + str(Day) + '000000' + '.nc'
( K. p% r" J5 B- v4 P2 j! p os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))' b( d0 i) d: e+ `+ V* l
'''
' G: i$ b) ]6 ~5 {# 天+小时
2 S5 j- h) ?4 L0 k5 Mn = 0% z, ~9 J0 `9 u1 d8 }: P
for i in range(1, 31):$ G. U- x9 e; d( C% p% Z* k
Day = str(i).zfill(2)4 d2 o8 t& K. V9 f; F
for j in range(0,21,3):
( c3 [* O j' Q5 {' d, ^+ G Hour = str(j).zfill(2)5 `7 C. J) U! v: F) @ _
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'$ r4 k3 T/ G0 x, ]) k& V6 ? ^9 ^
print(keys) i! P0 l# z! o8 B1 @! ~ T5 {5 q
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
( t4 ^& W$ U# I8 ^ driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)* U9 {3 L1 D! Z0 ?( j( O9 w' Y
driver.implicitly_wait(10)
r; B A8 N' ^: [ # click to submit$ P: p- }0 H/ r6 b8 p9 W
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
+ x. n- P) W$ P5 i/ N' o4 q. c #time.sleep(3)
7 s- q/ f) A' m+ d. Z5 W# K% Z) U #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
$ s7 H; ^% g: a& e9 O time.sleep(10)
- ~2 U' B2 }& ?" | dir = '/Users/qiujingyi/Downloads/': P/ E( m8 d2 [- X+ T6 D/ y' C
oldname = '2012' + '.nc'( v: S- R6 t( S! E
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc': X r2 J7 H- E- q
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
8 Z) L) Q5 c2 Z0 V'''
" o( C4 B& o3 `1 y- l0 `9 \5 r$ I/ @0 i2 X) Q. c$ E4 h
- L3 E( a D+ @( d6 P6 p3 w* {5 U * ]2 t# A6 {0 Q. b- U" N$ |
) r% ^# B: t. U. T$ l 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |