如何使用python下载nasa卫星OPeNDAP数据

如何使用python下载nasa卫星OPeNDAP数据,python,httprequest,netcdf,opendap,Python,Httprequest,Netcdf,Opendap,我尝试了requests、pydap、urllib和netcdf4,并在尝试下载以下NASA数据时不断出现重定向错误或权限错误: GLDAS_NOAH025第3H小节:GLDAS Noah陆地表面模型L4 3每小时0.25 x 0.25度子集V001() 我正在尝试下载大约50k个文件,下面是一个示例,粘贴到google chrome浏览器中(如果您有正确的用户名和密码)时可以使用: 有没有人有使用python从web获取OPeNDAP NASA数据的经验?如果需要,我很乐意提供更多信息 以下

我尝试了requests、pydap、urllib和netcdf4,并在尝试下载以下NASA数据时不断出现重定向错误或权限错误:

GLDAS_NOAH025第3H小节:GLDAS Noah陆地表面模型L4 3每小时0.25 x 0.25度子集V001()

我正在尝试下载大约50k个文件,下面是一个示例,粘贴到google chrome浏览器中(如果您有正确的用户名和密码)时可以使用:

有没有人有使用python从web获取OPeNDAP NASA数据的经验?如果需要,我很乐意提供更多信息

以下是导致401错误的请求尝试:

import requests

def httpdownload():
    '''loop through each line in the text file and open url'''
    httpfile = open(pathlist[0]+"NASAdownloadSample.txt", "r")
    for line in httpfile:
        print line 
        outname = line[-134:-122]+".hdf"
        print outname 
        username = ""
        password = "*"
        r = requests.get(line, auth=("username", "password"), stream=True)
        print r.text
        print r.status_code
        with open(pathlist[0]+outname, 'wb') as out:
             out.write(r.content)
        print outname, "finished" # keep track of progress
下面是pydap示例,它给出了重定向错误:

import install_cas_client
from pydap.client import open_url

def httpdownload():
    '''loop through each line in the text file and open url'''
    username = ""
    password = ""
    httpfile = open(pathlist[0]+"NASAdownloadSample.txt", "r")
    fileone = httpfile.readline()
    filetot = fileone[:7]+username+":"+password+"@"+fileone[7:]
    print filetot
    dataset = open_url(filetot)

我没有找到使用python的解决方案,但根据我现在掌握的信息,这应该是可能的。我将wget与.netrc文件和cookie文件一起使用,如下所示():

#/bin/bash
cd#输出文件的路径
touch.netrc
echo“machine urs.earthdata.nasa.gov登录密码”>>.netrc
chmod 0600.netrc
触摸,乌苏饼干
wget--内容处置--信任服务器名称--加载Cookie~/.urs\u Cookie--保存Cookie~/.urs\u Cookie--验证无挑战=打开--保留会话Cookie
-我

希望它能帮助其他使用NASA数据的人

我意识到为原始海报回答这个问题有点晚了,但我在尝试做同样的事情时偶然发现了这个问题,所以我将把我的解决方案留在这里。看来NASA服务器使用重定向和基本授权的方式是标准库所不期望的。当您从(例如)
https://hydro1.gesdisc.eosdis.nasa.gov
,您将被重定向到
https://urs.earthdata.nasa.gov
用于身份验证。该服务器将身份验证令牌设置为cookie,并将您重定向回下载文件。如果您没有正确处理cookies,您将陷入无限重定向循环。如果未正确处理身份验证和重定向,则会出现拒绝访问错误

要解决此问题,请将
HTTPRedirectHandler
HTTPCookieProcessor
HTTPPasswordMgrWithDefaultRealm
链接在一起,并将其设置为默认打开程序或直接使用该打开程序

from urllib import request

username = "<your username>"
password = "<your password>"
url = "<remote url of file>"
filename = "<local destination of file>"

redirectHandler = request.HTTPRedirectHandler()
cookieProcessor = request.HTTPCookieProcessor()
passwordManager = request.HTTPPasswordMgrWithDefaultRealm()
passwordManager.add_password(None, "https://urs.earthdata.nasa.gov", username, password)
authHandler = request.HTTPBasicAuthHandler(passwordManager)
opener = request.build_opener(redirectHandler,cookieProcessor,authHandler)
request.install_opener(opener)
request.urlretrieve(url,filename)
来自urllib导入请求
username=“”
password=“”
url=“”
filename=“”
redirectHandler=request.HTTPRedirectHandler()
cookieProcessor=request.HTTPCookieProcessor()
passwordManager=request.HTTPPasswordMgrWithDefaultRealm()
密码管理器。添加\u密码(无,“https://urs.earthdata.nasa.gov“、用户名、密码)
authHandler=request.HTTPBasicAuthHandler(密码管理器)
opener=request.build\u opener(重定向处理程序、cookieProcessor、authHandler)
请求。安装\u开启器(开启器)
request.urlretrieve(url,文件名)

该链接已过时。这里也有同样的信息:
from urllib import request

username = "<your username>"
password = "<your password>"
url = "<remote url of file>"
filename = "<local destination of file>"

redirectHandler = request.HTTPRedirectHandler()
cookieProcessor = request.HTTPCookieProcessor()
passwordManager = request.HTTPPasswordMgrWithDefaultRealm()
passwordManager.add_password(None, "https://urs.earthdata.nasa.gov", username, password)
authHandler = request.HTTPBasicAuthHandler(passwordManager)
opener = request.build_opener(redirectHandler,cookieProcessor,authHandler)
request.install_opener(opener)
request.urlretrieve(url,filename)