>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
) @# l1 l% {, _=====================================================================( q( O* h8 w6 B) @7 c
import time4 S' ^# B+ P! a( d5 c8 ~4 F
import os
! O. p/ N: L" W, vfrom selenium import webdriver
$ ?% `' b( {1 x6 p8 G0 j- kfrom selenium.webdriver.support.select import Select
' J3 \, N2 c* h+ c4 Jdriver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')! m* a' @+ H% C
driver.get('www.52ocean.cn')
7 A+ ]9 p( H/ N) y( E: J#driver.get('www.52ocean.cn')9 E' q( C |9 I: l3 C+ s
driver.implicitly_wait(10)
/ C! f f1 u5 \: k8 J# click ele- i+ x+ y& B! |! V3 x
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()$ L" C! }4 T& F- _) E
# click S,T,U,V
' i6 B9 i9 _% r4 |; udriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
5 O( [* [) ?/ W3 Hdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()8 n" n' v6 K8 [" X; f
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
/ ^5 p; R# ]+ L9 V/ [driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
% F: C; k5 u; Adriver.implicitly_wait(5), M" k) h# F" m1 B
# click Disable horizontal subsetting
" @8 P" x0 ~. Udriver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()
( I1 Z' N9 Q* L- }' u& X) i# input lat,lon q1 Q0 U% K1 @& j, X% Q; Q
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()/ F! U4 I+ U9 K1 a+ s5 k; e( p
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()6 J& N# [) y1 m8 k
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
! s- c. Y; N3 Y& r( _" C; mdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
2 \: X" X: }/ t- ]7 c3 r' \" Q3 idriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()" j; l4 V/ U' Z$ i% [& g9 a# R9 ]# E
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')8 D3 ?# [' x+ _+ E8 E* W0 Y2 q5 @
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()
& X3 ^5 Z5 ]( E4 d) V/ ^8 Mdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
! b& w1 b/ _6 a3 @4 Qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
4 m3 p2 H( H9 y5 p4 ~2 D1 odriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
, y' Y4 d L9 k2 n0 u" W4 t) t, udriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()7 `% k% q$ z4 L* C
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
3 E, y- n+ K5 h8 Zdriver.implicitly_wait(1)9 @5 O& I9 \9 Q
# click vertical stride' X" U; g" {0 p& k6 V) f- N
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()' @" Z: y9 [* i, Z8 d
driver.implicitly_wait(1): x7 `- @6 N: v6 z6 v5 v- ]' G
# click to add lon/lat variables" a7 i: h' E) U2 g4 K
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()5 B8 P. x# L& ~3 E. f( Q
# choose output format
, ?" {% T* w* c6 P$ vs = driver.find_element_by_name('accept')7 h& m5 X3 m* f& R* i
Select(s).select_by_value('netcdf')' D% W& w+ [8 f
# click single time, and input data_time# | \9 P, Z+ w& c
# 天" T1 ?7 u$ @& U+ F* B0 C0 C+ B+ z# e
n = 0. i: P0 [4 f$ G% W
for m in range(3,12+1): #月份
- H8 U( P( \, ^$ x% ?; S if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
" s( [ U% a& l8 | month_num = 31 # 天数
0 @8 V* M- {7 [6 A% ~5 k elif m == 4 or m == 6 or m == 9 or m == 11:
Y( O, z8 `3 o month_num = 30 # 天数
% i; E; o( J. ]: ]3 M" |+ M elif m == 2:, O y( t$ {6 N4 w* I; [
month_num == 28 # 天数
* t X4 b5 p; b# o# S% g- X month = str(m).zfill(2)
B9 M4 S% T5 G; Q! H, t) D for i in range(1, month_num+1):
/ X6 P. U* g6 s Day = str(i).zfill(2)
0 c8 k% ?4 Y" ]% O2 B! c+ J3 s keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期$ }9 E7 j0 {+ m7 Y
print(keys)
! y) l2 q' x, l driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()+ ?% n I+ @2 b- m6 G$ u' O; H$ k
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
4 V/ D( C4 G* w J) @. {& ` driver.implicitly_wait(10). f# r8 H" h2 y! O0 a9 g
# click to submit9 l* k' x! f7 n% \% c0 I
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()9 G& r: S) T0 M( k" e
#time.sleep(3)
) d% x- }- V5 a) H8 y/ Y" \ #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()4 E2 x. `: ]/ A- I9 H
time.sleep(20)
3 e2 d! ~: M! B# q dir = '/Users/qiujingyi/Downloads/'
' D7 C9 i' S5 l' k8 m' ~! v oldname = '2011' + '.nc' w* t8 P& V, k' b- A% I
newname = '2011' + str(month) + str(Day) + '000000' + '.nc'" ~& {$ T3 C. U5 q/ `8 C$ t8 y
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))) m2 h1 j9 }1 t' K+ D
'''
: U3 v' m: `3 T* G# 天+小时
2 a, C/ H, A+ G" Q2 F0 l( Ln = 08 S6 z. S8 k8 g
for i in range(1, 31):
L# Y4 C9 ?6 \/ L$ w$ b1 F Day = str(i).zfill(2)
9 q) g6 S# N: m8 {3 [ for j in range(0,21,3):
4 s1 [2 N, q+ |0 y4 O8 L Hour = str(j).zfill(2)& L" t+ R1 Y6 Z
keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'% Z6 d0 ? L- ]
print(keys)) `% F- ^" e$ K6 S
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()0 x2 K- e; y* g; V! m
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)( h- E0 t1 P( G( Y* j1 f5 H% b
driver.implicitly_wait(10)* |) v) F8 {2 x8 |5 G: g1 x u; d9 d" q
# click to submit
! x. `/ @: k( S3 J3 b! T driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
& p; X) G7 P; ?0 Q8 _ #time.sleep(3)5 z- f3 _9 Z3 A5 S
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
* E- |; o8 z. n. H5 G time.sleep(10)
; j; B' ]$ R4 z1 h dir = '/Users/qiujingyi/Downloads/'6 f9 E; _# n* t
oldname = '2012' + '.nc'
2 l, c* G8 {5 p newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'" ~7 ?! M; ^/ j
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
4 b5 J: s& s( v) E. u7 w& M'''
- F/ v- E: q; T; V4 U+ ~ J/ k/ {& Z
, N. C3 y8 @5 p
* y' D3 v9 b; f6 Q& b
* \9 f0 X4 ^+ c1 w7 }( Q
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |