>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
! M4 c* O9 t% m2 ?/ ]=====================================================================" [# Y- T* ?4 r' Y0 K: p. N# p* ^
import time
& ] J* Q1 e+ Jimport os
. Q& X( W% N2 t. Q6 m5 Ifrom selenium import webdriver ^5 X7 z* d4 D/ u$ D4 R' T; F
from selenium.webdriver.support.select import Select- n4 i$ T% {- i2 ~' G% }
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
: O* ^5 K/ t, ?0 ddriver.get('www.52ocean.cn')9 A- G: t% c j6 F6 [* J
#driver.get('www.52ocean.cn')
) x- C, w8 s- `% I Vdriver.implicitly_wait(10)5 p% d$ k4 A5 Q' s) l
# click ele
4 j v/ c9 O7 y& C& s/ sdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()
& l3 k0 |) l( m' N; a9 K# click S,T,U,V
2 A0 i& h, ^+ I5 R$ @& X3 Mdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()4 u* `* M# K9 o* b7 n3 t$ J3 s
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()
6 i. I# A0 \% m6 B4 S- Mdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click() _' h4 X S S' |
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()$ W' W) T3 f4 m+ q" x
driver.implicitly_wait(5)
- D ^, }* d+ P# }* o$ N, \# click Disable horizontal subsetting
: E% L# q- w( Hdriver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()
0 y0 R. x; s, e* s( ?5 o8 O4 o# input lat,lon( ^! p- ~, `3 L3 [0 a
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()1 r( @% I g2 ?8 @* W
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()! f( V7 M! p( f2 E# G: t
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2'); W* S9 v- s+ {4 A: v
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
$ Q1 C; o" z( C/ x+ N, \driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()/ w0 h$ U' N( B1 X; u! C6 c
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
, {$ F) F$ z8 L8 edriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()
$ W h6 N( U4 X0 Z0 m" l7 Xdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear(), l5 F, d0 y6 b4 s$ V- a
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
3 u; ~) e& |9 Y \5 \. Kdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
: _, S# s, Z) Y0 ?! F$ l4 Bdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
5 Z/ v4 P. N9 E. @6 \% |# Qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
5 r3 j" P2 _* c( t; w: p& v" ^- fdriver.implicitly_wait(1)
+ _$ ?) N& X: f; Y- W# click vertical stride4 U c R( O8 n" c
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()
O5 }' s! y8 X: Idriver.implicitly_wait(1)2 ?( E$ x* r. A2 Z5 q; P4 G. i' R
# click to add lon/lat variables
+ F7 n0 i: X( Qdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()3 }* P2 W/ [# y
# choose output format
/ ^2 M8 R' @. _s = driver.find_element_by_name('accept')
. e; `: D; v1 o# rSelect(s).select_by_value('netcdf')
) ^" [0 d! i5 M2 V# M( B# click single time, and input data_time
4 G3 I& K$ {5 `* w$ ~# 天
, a' e$ _$ c2 m# k. F+ Cn = 0
/ G0 Z! |: a% x# g: f9 vfor m in range(3,12+1): #月份3 T: ]5 b' x' t/ R
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:; m! a. j$ H* V1 D- r6 g
month_num = 31 # 天数
& s) [5 k; k+ i& K3 [" D, M# j elif m == 4 or m == 6 or m == 9 or m == 11:+ r) J2 f3 ?9 I
month_num = 30 # 天数# V. @& M" _3 D. ^ x
elif m == 2:3 e$ E. b) |, ~9 r8 S
month_num == 28 # 天数9 `( H+ Z( g6 \( l L! v
month = str(m).zfill(2)
, O4 V4 k# y4 L3 O, N" d# r6 C for i in range(1, month_num+1):
4 e( o; S5 J) ]6 r. n+ e2 x Day = str(i).zfill(2)
& G% ?) y! @1 p% i keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
6 O+ x1 g; J; }% }6 O print(keys), ~0 j. R U; l; P. }
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
/ O4 _% B8 |$ \5 f, R driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
1 z1 ~& {* L" N6 p* z7 Y driver.implicitly_wait(10); W9 g: `* O- v3 L
# click to submit
6 x: H: l9 {, W) x5 r: r driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
5 K6 A J4 W( c #time.sleep(3)5 y2 Z( h; d4 z
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()+ j7 a: ~: u2 S6 ^
time.sleep(20): a6 p( o. i& O3 `1 M8 l$ _1 V
dir = '/Users/qiujingyi/Downloads/'
# K. P- L9 J/ }6 ]2 Z) t/ }" { oldname = '2011' + '.nc'4 A T; D( i x* U" x, B
newname = '2011' + str(month) + str(Day) + '000000' + '.nc'
7 ?1 i7 E! R9 z: ^$ q os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
9 q5 h7 l8 N* T* b1 s% L$ K'''
9 [4 H0 `+ b' f# h# 天+小时- ]9 w' x; R# D% Y: e0 @$ e1 m
n = 0: w& i( A! Y$ D5 _4 y
for i in range(1, 31):; a) \$ K2 }" U8 Y0 o# @# p
Day = str(i).zfill(2)
8 G Z! Y3 \9 {& A for j in range(0,21,3):/ V( C& g( ?- @* k! e3 Z
Hour = str(j).zfill(2)
( R: O/ U$ b2 z( Y9 l- W3 ]! L6 h" q keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
+ M* {, Y2 Y2 [4 p2 \ ?3 q. _ print(keys)
. L- v- {: x% R8 u H) }9 } driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
! q4 `' Z E8 x. _# k driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)8 ?5 V& k% b% w3 J; Y
driver.implicitly_wait(10)) Q8 m6 k' V v; }) I. U
# click to submit
( A/ d0 v. L0 J9 @0 s8 T# ^# z3 @ driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()& U6 w8 q3 l- u; X( m; l z8 }) W
#time.sleep(3)
$ v1 R3 `; c/ ? #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
, R$ W- r* ` K& F- [- d( V5 x2 n time.sleep(10)& m" c* w+ H6 {# M5 N+ Z
dir = '/Users/qiujingyi/Downloads/'3 T9 M% N4 ]) i4 Z3 \- S" Q% Q$ Y
oldname = '2012' + '.nc'2 ^; L" ?) m, W5 C3 X4 w3 Q4 ^6 Y
newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'
( O- y. B6 `" j( [/ k) K u os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))4 f7 d- ^# O+ R$ y1 @ e8 e
'''' H+ c c1 k0 z
7 a2 N3 E0 c9 I- z* f
. F2 f1 v* a& k8 _0 | 1 C. X9 N F- F' u
( w5 e4 i) C" k 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |