一、气象台站数据网站分享
二、批量下载NCDC中的气象数据(也就是我分享的第一个网站)
三、通过网页批量下载数据
一、气象台站数据网站分享
- Maps and Geospatial Products | National Centers for Environmental Information (NCEI) (noaa.gov)
2. 温室数据共享平台 (sheshiyuanyi.com)
注意:目前这个气象数据的模块打开之后直接404,看看后续能不能修复吧
二、批量下载NCDC中的气象数据(也就是我分享的第一个网站)
以逐小时数据为例,我们来学习一下如何批量下载!!
- 单击这个小扳手
- 在右侧的Location这个选项中选择中国(China)
然后在左侧 Result 中勾选 select all
紧接着Add to cart
3. 然后在这个界面 What 一栏中选择所需要的变量就行了
然后点击 select all 之后 选择Quick Add
4. 填写邮箱然后坐等给你发邮件就好了
三、通过网页批量下载数据
在这我们分享一个简单的Python应用来批量下载台站数据
我们今天要下载的就是这个网站的数据:Index of /data/global-hourly/access
首先我们需要加载python相关库
from urllib.request import urlretrieve
import requests,os
import pandas as pd
from bs4 import BeautifulSoup
通过网站的URL和我们所选定的区域返回我们所需要下载的文件列表
def get_filename(url,select_zone):
# 获取文件名
f = pd.read_csv(r'D:\软件著作\滑动相关/stations.csv')
stations = f['STATION_ID'].tolist()
for i in range(len(stations)):
stations[i] = str(stations[i])
# print(stations)
filename_list = []
if select_zone == '中国':
text = requests.get(url).text
soup = BeautifulSoup(text, 'html.parser')
for i in soup.find_all('a'):
filename = i.get('href')
# print(filename)
if filename.split('.')[0] in stations :
filename_list.append(filename)
根据上一步所返回的文件列表来下载我们所需要的文件
def download_file(filename_list,url,save_path,year):
# 下载文件
print(url)
save_path = save_path + '/' + str(year)
if os.path.exists(save_path) == False:
os.mkdir(save_path)
for filename in filename_list:
if os.path.exists(save_path + '/' + filename)== False: #判定是否存在该文件,如果没有则下载
print(url + filename,save_path + '/' + filename)
urlretrieve(url + filename, save_path + '/' + filename)
if len(os.listdir(save_path)) == 0:
os.rmdir(save_path) # 删除空文件夹
判定区域选择,很遗憾目前仅能支持两个区域的选择,后续会继续改进代码
def select_zone_(select_zone):
# 选择区域
while select_zone not in ['全球','中国']:
select_zone = input('请输入全球或中国:')
return select_zone
主函数目录
if __name__ == '__main__':
year_start = input('请输入起始年份:')
year_end = input('请输入结束年份:')
select_zone = input('请输入要下载的区域:') # 区域选择
select_zone = select_zone_(select_zone)
save_path = input('请输入保存路径:') # 保存路径
years = range(int(year_start), int(year_end) + 1)
for year in years:
url = 'https://www.ncei.noaa.gov/data/global-hourly/access/'+ str(year) +'/'
filename_list = get_filename(url, select_zone)
download_file(filename_list,url,save_path,year)
完整代码如下:
from urllib.request import urlretrieve
import requests,os
import pandas as pd
from bs4 import BeautifulSoup
'''
批量下载NCDC数据
'''
def get_filename(url,select_zone):
# 获取文件名
f = pd.read_csv(r'D:\软件著作\滑动相关/stations.csv')
stations = f['STATION_ID'].tolist()
for i in range(len(stations)):
stations[i] = str(stations[i])
# print(stations)
filename_list = []
if select_zone == '中国':
text = requests.get(url).text
soup = BeautifulSoup(text, 'html.parser')
for i in soup.find_all('a'):
filename = i.get('href')
# print(filename)
if filename.split('.')[0] in stations :
filename_list.append(filename)
elif select_zone == '全球':
text = requests.get(url).text
soup = BeautifulSoup(text, 'html.parser')
for i in soup.find_all('a'):
filename = i.get('href')
if [filename[-4:] == '.csv']:
filename_list.append(filename)
print(filename_list)
return filename_list
def download_file(filename_list,url,save_path,year):
# 下载文件
print(url)
save_path = save_path + '/' + str(year)
if os.path.exists(save_path) == False:
os.mkdir(save_path)
for filename in filename_list:
if os.path.exists(save_path + '/' + filename)== False:
print(url + filename,save_path + '/' + filename)
urlretrieve(url + filename, save_path + '/' + filename)
if len(os.listdir(save_path)) == 0:
os.rmdir(save_path) # 删除空文件夹
def select_zone_(select_zone):
# 选择区域
while select_zone not in ['全球','中国']:
select_zone = input('请输入全球或中国:')
return select_zone
if __name__ == '__main__':
year_start = input('请输入起始年份:')
year_end = input('请输入结束年份:')
select_zone = input('请输入要下载的区域:') # 区域选择
select_zone = select_zone_(select_zone)
save_path = input('请输入保存路径:') # 保存路径
years = range(int(year_start), int(year_end) + 1)
for year in years:
url = 'https://www.ncei.noaa.gov/data/global-hourly/access/'+ str(year) +'/'
filename_list = get_filename(url, select_zone)
download_file(filename_list,url,save_path,year)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)