>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!)
) _! ?/ ]( e2 k: B=====================================================================8 p; {8 q! c% R$ R0 i4 j% x
import time* C( q4 g- W% d6 D. \
import os
; O8 F% d$ S; p$ s/ ?' Dfrom selenium import webdriver
0 s- R% n9 ^9 K% z' t0 Z8 ^from selenium.webdriver.support.select import Select9 J4 ^0 b' R7 \1 f" {9 p6 X
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')- y+ |, N. q8 W6 A) Y% _2 t
driver.get('www.52ocean.cn')8 D4 w4 ?7 [2 Z6 r5 A
#driver.get('www.52ocean.cn')$ m7 Y3 c! Z) h5 W8 z. Z4 X1 l
driver.implicitly_wait(10), J1 o2 J- w7 p& H
# click ele) u0 w# F( M6 g$ o1 {
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()% ]0 {! Q! G m6 e6 H
# click S,T,U,V% l$ G1 m9 j, |) {* W* d! L
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
5 E) G6 B+ w& ]) g7 R4 Cdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()! I6 l/ ]5 u) m$ Y" b
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click() T: T1 j6 w6 o Z
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
" O% }; A# f- [* Ddriver.implicitly_wait(5); k2 \& P! H& E
# click Disable horizontal subsetting
! v1 h2 I- O0 u- e3 k+ Q3 C* ndriver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()
% R& T' N% Z, r; E# input lat,lon& I' M) j; o* O# h L
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
* [8 Z( a6 `1 ?; Y# M' jdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()
; H7 j8 f$ |$ V4 w. q% gdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')
9 |4 r) c5 g3 P( Z% b1 qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()0 t4 Z% u. a( V) E* R8 \
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
, P: m1 I2 G) J; W& Tdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')
# I. V0 O1 k+ j. W& h6 X8 Gdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()
9 d/ }; K9 M* ?5 T% Ydriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
# d* [* j7 T2 f* o/ P) ^driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')
) {9 z+ k$ M7 q8 s# Xdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
& w% [; S9 e4 ?0 _2 g! tdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
! o1 V3 G+ F. S* F& v. v$ k. Vdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
' g" ?2 J7 f: \driver.implicitly_wait(1)' C4 x+ j, z, A5 V( ]8 v
# click vertical stride8 v K" O/ P- f5 W
driver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()' M7 g$ e; w6 |7 u9 p3 R8 U! D
driver.implicitly_wait(1): o0 F& h# `1 p( o$ l$ s: l
# click to add lon/lat variables
2 E- q0 |" @, d! }9 u1 gdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()" K/ {# P5 K. O% ^' Y a
# choose output format% f$ k2 n7 {/ _% a$ H/ ?. H
s = driver.find_element_by_name('accept')) a0 c3 ?% i o) K
Select(s).select_by_value('netcdf')
3 \3 q& \% w& J! B# click single time, and input data_time- Y9 V2 ~; O; T: a; n0 u
# 天
' R+ \6 ~9 S9 n$ {) V/ Z, D+ L$ gn = 0! ]% _/ e: c3 Q; A5 a- e( }& O: ?
for m in range(3,12+1): #月份
3 u, Y0 g* e2 K9 M1 P, Y if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:) c" Y9 B* d4 Z# D& W
month_num = 31 # 天数
+ b9 W- @2 U7 _6 c2 }' q' S elif m == 4 or m == 6 or m == 9 or m == 11:
4 d# F: H' h4 C B month_num = 30 # 天数* d5 ]1 B7 F# b) ]
elif m == 2:# O2 w6 e5 h8 B* v: L1 q
month_num == 28 # 天数
; b9 T. ~8 G$ F, I month = str(m).zfill(2): `1 p z4 L$ {# R
for i in range(1, month_num+1):
; [, m5 }! ~0 W4 ? Day = str(i).zfill(2)
: N- e) M3 l+ C( x: ?6 _+ l6 V keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
" ~& o6 g; a3 w( T- [) {- U print(keys)6 O) u7 A/ l( V1 v* ^
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()( O2 k8 Q8 N0 a! ]: w6 P9 }$ r0 P
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)4 W& w* G* N: m0 ^! N0 J! O2 p
driver.implicitly_wait(10): T( q# [( G& d: o; w# d- w2 d
# click to submit
8 B: g) J6 x7 X6 v& N driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
0 @4 c3 D A% `! [1 W #time.sleep(3)/ O" J: `. |! j& k+ `+ W8 j
#driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
6 H9 V% r0 t7 X5 A. ` time.sleep(20)
* q( {- k0 M: Q' v dir = '/Users/qiujingyi/Downloads/'
- n( p7 N2 i7 u! n1 f9 I9 | oldname = '2011' + '.nc'( q& F( ?5 G" r! Z* M
newname = '2011' + str(month) + str(Day) + '000000' + '.nc'4 x3 k7 h3 Q A& d5 N; _
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
" D/ I U* N: }: V# S'''$ V. E6 d; G9 P3 Q# ~
# 天+小时
. s1 T1 I* @" @' A; e# Y& k& {3 Wn = 0
0 x3 r8 o7 |; `# L+ S& s0 h+ ~2 Nfor i in range(1, 31):
2 g* ?7 ^! q% F+ c% n! @ Day = str(i).zfill(2)
6 @9 X9 Q# L, L* ?5 N for j in range(0,21,3):
# a, d# t; `3 G/ ` Hour = str(j).zfill(2)
! J L7 a i6 o keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
2 E: V+ W" p# h) O) a- d1 O print(keys)
6 Q8 e; p, k" a. G driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
* _1 J$ ]4 }: r$ ^9 m driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)" d. N5 ^& R3 a+ ^4 E) t$ o
driver.implicitly_wait(10)
, {1 B) Y1 P, S4 C) G # click to submit4 s# w" B: M' ?3 x. g5 | U
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
! G( l, k2 }+ S9 W" S. O #time.sleep(3)
9 p( e: N6 ]4 I% y6 c$ j i #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()4 }8 ?' j* f" a& z( E2 F- E4 _2 s
time.sleep(10)& c* z2 R3 C0 M6 t% \
dir = '/Users/qiujingyi/Downloads/', T5 }2 Y4 x- }) [
oldname = '2012' + '.nc'
& b0 v4 _1 W& d: ]3 e9 { newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'
+ H. i+ _7 |' S; g5 x) t os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))0 I! h4 ]3 g" R# i4 d8 d& [
'''# D8 j- k- v2 w. G* o" z, S T3 q
" o& f+ t" t/ i) w& `7 d* ^8 X; d+ R, Y3 R$ _% K
' v' p# N# v5 f7 c4 I
& J7 L9 X d7 R/ u 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |