请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 252|回复: 5

python如何批量下载NOAA数据

[复制链接]

新浪微博达人勋

发表于 2022-7-21 20:39:49 | 显示全部楼层 |阅读模式
10金钱
大佬们求助啊!
      我需要下载NOAA里面的数据,https://www.ncei.noaa.gov/data/o ... n5.3/L3C/1993/data/
要下好几年,但是它文件名是超级的怪,我真的佛了,他的文件名开头是日期,中间一长串固定字符,然后跟着一个年份加编号(编号是这年的第几天)再来一串固定字符,最后才是.nc,导致我不会爬这种格式的文件,我太菜了,只会爬固定字符加一个年月日的。求懂python大佬教教我,不胜感激!!!




33.png
球球了!!!
我本来有的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# urllib2_urlopen.py
import urllib.request
import urllib.error
import os

def getLegalUrl(year,mon):
    base_url="https://www.ncei.noaa.gov/pub/data/cmb/ersst/v5/netcdf/"
    url_preletter='ersst.v5.'
    try:
        url=base_url+url_preletter+str(year)+str(mon).zfill(2)+'.nc'
        f=urllib.request.urlopen(url)
        return url
    except urllib.request.URLError:
        return " "

def download(url,year,mon):
    f=urllib.request.urlopen(url)
    data=f.read()
    url_preletter = 'ersst.v5.'
    pathgz = "D:\\123\\P\\SST"
    with open(os.path.join(pathgz,url_preletter+str(year)+str(mon).zfill(2)+'.nc'),'wb') as file:
        file.write(data)

if __name__ == '__main__':
    for year in range(1982,2021):
        for mon in range(1,13):
            url=getLegalUrl(year,mon)
            if url=="":
                with open("download.log",'a') as log:
                    log.write(str(year)+str(mon).zfill(2)+'not found\n')
            else:
                download(url,year,mon)

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-7-21 21:33:06 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-21 22:27:49 | 显示全部楼层
推荐一个downthemall浏览器插件,直接全选下载
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-22 00:11:48 | 显示全部楼层
这你起码用request库吧,
可以试试requests +beatifulsoup,或者学习下xpath
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-23 00:22:09 | 显示全部楼层
自己搞了个笨笨的代码,目前解决了不用文件名也能下.nc的需求,就是速度不快
# -*- coding:utf-8 -*-
# this file is used to download tree_ring data massively from NOAA for paleoclimate
# 2022-03-06
# author: ming
# using BeautifulSoup

import re
from bs4 import BeautifulSoup
import urllib.request
import ssl

TR_url = 'https://www.ncei.noaa.gov/data/oceans/pathfinder/Version5.3/L3C/1993/data/'
# response = urllib.request.urlopen(TR_url)
my_url = urllib.request.urlopen(TR_url).read().decode('ascii')#请求获取链接响应,并以ASCII编码方式读取该链接的响应文件;

soup = BeautifulSoup(my_url, 'lxml')#使用Bs4解析所获取的响应文件
#查看网页源代码,搜寻网页源代码中所需的信息,例如本文需要获取所有的.nc文件的超链接,做如下搜寻:
url_list = soup.find_all(href=re.compile(".nc"))#
print('step1 has fininshed!')
#创建数组存储第五步所获取的所有超链接;
urls = []
for i in url_list[1:]:
    urls.append('https://www.ncei.noaa.gov/data/oceans/pathfinder/Version5.3/L3C/1993/data/' + i.get('href'))
print('step2 has finished!')
#将链接内容下载至本地,并存储在指定文件夹(注意:存储路径末尾以 / 结尾,否则下载文件会存储到上一级目录) ;
for i, url in enumerate(urls):
    file_name = "C://Users//16374//Desktop//123//yanyixia//0630//SST&SSS//NOAA_SST/" + url.split('/')[-1]
    urllib.request.urlretrieve(url, file_name)

print('congratulations! you got them all!')
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-27 10:49:47 | 显示全部楼层
downthemall浏览器插件,直接全选下载真的很方便,多谢楼主和大年糕的分享
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表