>>>利用Python库实现HYCOM海洋数据批量下载(备注:Chromedriver要对应浏览器版本号!): N4 g, J$ U! K/ L! N# z
=====================================================================& \8 [8 _; y: G6 k
import time
5 r' S% M7 j: z! K6 q5 F! g, `import os
5 G) ^, H8 S* s1 K' L2 yfrom selenium import webdriver
^- u' r0 p- I1 U8 _) }from selenium.webdriver.support.select import Select- [ A" W$ V. U/ ^& M5 s
driver = webdriver.Chrome('/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
; V) N7 ~: F0 s8 Z- V \- T0 Mdriver.get('www.52ocean.cn')& `$ V- [0 {$ X+ u3 s% l2 `
#driver.get('www.52ocean.cn')
; k* K# U# D7 Z! _/ Z) c2 n8 X3 [driver.implicitly_wait(10)! B8 {4 s) k# @4 p- z
# click ele! g7 Q0 ^1 E! h+ w
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[1]').click()
' _% k+ u, E3 |8 z. `+ d L& C. d# click S,T,U,V! l& [2 l- y7 _3 |) I8 K' z# r
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[2]').click()
f' _; p. Y3 G" }4 \driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[3]').click()! R! ?* n m- ^! \( l
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[4]').click()
& R' Q. J6 V$ \1 n# gdriver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[1]/blockquote/input[5]').click()
l" {5 s( R8 c! y8 {driver.implicitly_wait(5)
' L) u; t0 e: @! G- t4 e# click Disable horizontal subsetting- M" H8 ]& q% X7 R
driver.find_element_by_xpath('//*[@id="disableLLSubset"]').click()$ R' _" q( I c2 j3 O( p
# input lat,lon
, l; z8 v* a1 Z# Vdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').click()
" J" ]& ` C4 J9 _0 qdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').clear()( E9 u; o7 [) I* y8 L4 h( A
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[1]/input[1]').send_keys('2')( \ y. y4 O3 g9 b9 F' w
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').click()
; J1 M h2 r- M0 [! ~- T& A! w! ddriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').clear()
# E F' ~0 n* cdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[1]').send_keys('84')9 G: E8 \0 k" v F$ v8 E
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').click()% J' L* o" H$ e' q) U
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').clear()
* k" d$ r$ i4 K ^, }driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[2]/input[3]').send_keys('94')- {' n( Q! A& D; e# R
driver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').click()
# r) I4 @4 h1 D; @* p1 \ j$ C1 pdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').clear()
1 s- g: _1 N3 @+ J+ s3 vdriver.find_element_by_xpath('//*[@id="latlonSubset"]/div[3]/input[1]').send_keys('-2')
3 c! I. M2 }2 `5 l$ d# K( Jdriver.implicitly_wait(1)& o: D9 v- b$ S* L6 r4 {) z
# click vertical stride
7 R! J7 f3 \! A o" f1 O' mdriver.find_element_by_xpath('//*[@id="inputVerticalStride"]/span').click()) s5 h5 K. ], I
driver.implicitly_wait(1)$ }' ?6 o& o1 N, `
# click to add lon/lat variables' @; J& L. L; D, c( X- ~& Q( x
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[1]/td[2]/div[12]/input').click()+ m: A6 v. F% R+ q3 _7 m
# choose output format R: J. z& G$ f3 r
s = driver.find_element_by_name('accept')
4 ?0 M6 c+ n9 }2 FSelect(s).select_by_value('netcdf'): O3 K. e6 E2 l* j p4 C% K5 K
# click single time, and input data_time
$ c+ V2 T+ ^& H" `+ u, l* L) z# 天4 V# b& J, H+ k) w* W
n = 0. T9 q$ L2 J. L0 {3 [* F/ z
for m in range(3,12+1): #月份. m4 L( ^# y, P
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
9 [7 \7 l: A! A: v3 r month_num = 31 # 天数
+ Q* w& K/ P9 m& L' P" i elif m == 4 or m == 6 or m == 9 or m == 11:
5 j) w+ g" Y/ \0 n month_num = 30 # 天数
2 P: I- Z% |% k# D elif m == 2:5 q( H( x3 Z& g' R7 y8 s
month_num == 28 # 天数& f/ Q, `/ z7 w9 ~
month = str(m).zfill(2)
( q1 q# D$ ?" L4 w* a9 \' v for i in range(1, month_num+1):
# H4 B# N: \- Q Day = str(i).zfill(2)1 i; v+ K6 t+ G% X1 v- s2 t
keys = '2011-' + month + '-' + Day + 'T00:00:00Z' # 日期
6 y4 O2 \0 X1 a. y, ]- T print(keys): U, j2 P6 Q( K# \/ K
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()7 {/ H/ m, X; p( @$ z
driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys) x, M2 P4 \3 h# u0 z3 A
driver.implicitly_wait(10)& S. l) g, B# j# u& M
# click to submit# l/ L+ Y+ j. r6 G
driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()- W, Q% ~8 ]3 I) d9 ^# t$ y
#time.sleep(3)
6 F. c2 h- p3 d7 J" {- o #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()' c- h$ ~8 a& s. A" y5 v
time.sleep(20)
, e8 C5 F- L+ j, z, O dir = '/Users/qiujingyi/Downloads/'
) C8 D- ^4 F& \ oldname = '2011' + '.nc'
. M; C! X) D# t" s newname = '2011' + str(month) + str(Day) + '000000' + '.nc'# k1 g- z b" R; N" u" ]: ^
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))7 F2 v# q8 ?& G* N8 I, l. E8 o: D
'''
- @# C* t% l, M& x, M" R# 天+小时
* s6 V9 {9 b' dn = 0
0 @$ @: B M0 ^7 H/ Vfor i in range(1, 31):
& @6 ?; |2 i1 L1 r: i' c Day = str(i).zfill(2)
3 U# j6 M0 F3 ?5 Z* j for j in range(0,21,3):
* w: ], R. \/ X7 _; N Hour = str(j).zfill(2)
( s0 k/ `2 R. h) n$ }6 W keys = '2012-01-' + Day + 'T' + Hour + ':00:00Z'
- O7 f* b+ E. n: `4 o& c print(keys)
5 N) L. B: ]% k7 |# W, K P7 C K driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').clear()
Q" s: g* N8 _% j driver.find_element_by_xpath('//*[@id="singleTimeSubset"]/input').send_keys(keys)
9 e! h1 D5 d4 L driver.implicitly_wait(10)
. `3 Y' {' K- U # click to submit
5 ], k' G; ]# m0 L driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()" f. [% L* y7 u3 b0 i0 |0 }
#time.sleep(3)
" _0 E \; b% h. _ #driver.find_element_by_xpath('//*[@id="form"]/table/tbody/tr[3]/td/input[1]').click()
$ O4 c& E! R- O J0 E* _3 o time.sleep(10)
& e1 ^3 B6 \4 R( y$ | dir = '/Users/qiujingyi/Downloads/'
- H3 |. {& M/ C% r9 e! l* u# v oldname = '2012' + '.nc'
* p' g& Q( i6 \1 z newname = '201201' + str(Day) + str(Hour) + '0000' + '.nc'8 [$ t( y* N, P" U2 y/ F
os.rename(os.path.join(dir,oldname),os.path.join(dir,newname))
5 a1 I' a, p3 B: K) `'''4 ~2 N4 [3 W+ E5 E# G" d2 y' e
- D( V2 F; l/ x# N
1 v1 q! b2 {% j' \7 q 0 n) \! K( Q0 z$ V) h3 f
2 d$ w9 w0 h4 f" B) i0 N) F: e
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |