气象台站数据分享及下载

气象台站数据分享及下载,第1张

文章目录

    • 一、气象台站数据网站分享


    • 二、批量下载NCDC中的气象数据(也就是我分享的第一个网站)


    • 三、通过网页批量下载数据


一、气象台站数据网站分享

  1. Maps and Geospatial Products | National Centers for Environmental Information (NCEI) (noaa.gov)


2. 温室数据共享平台 (sheshiyuanyi.com)


注意:目前这个气象数据的模块打开之后直接404,看看后续能不能修复吧


二、批量下载NCDC中的气象数据(也就是我分享的第一个网站)

以逐小时数据为例,我们来学习一下如何批量下载!!

  1. 单击这个小扳手
  2. 在右侧的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)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/567756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存