如何从网页下载netCDF4文件?

How to download netCDF4 file from webpage?

我想从网页下载 netCDF4 文件。我可以下载数据文件,但我使用以下代码下载的文件似乎有一些错误:

import requests
from netCDF4 import Dataset


def download_file(url):
    local_filename = url.split('/')[-1]
    with requests.get(url, stream=True) as r:
        with open(local_filename, 'wb') as f:
            shutil.copyfileobj(r.raw, f)

    return local_filename


url = 'https://smos-diss.eo.esa.int/oads/data/SMOS_Open_V7/SM_REPR_MIR_SMUDP2_20191222T183243_20191222T192549_700_300_1.nc'
local_filename = download_file(url)
sm_nc = Dataset(local_filename)

但最后我收到错误信息:

Traceback (most recent call last):

  File "<ipython-input-98-809c92d8bce8>", line 1, in <module>
    sm_nc = Dataset(local_filename)

  File "netCDF4/_netCDF4.pyx", line 2321, in netCDF4._netCDF4.Dataset.__init__

  File "netCDF4/_netCDF4.pyx", line 1885, in netCDF4._netCDF4._ensure_nc_success

OSError: [Errno -51] NetCDF: Unknown file format: b'SM_REPR_MIR_SMUDP2_20191222T183243_20191222T192549_700_300_1.nc'

我也简单地尝试了 urllib.request.urlretrieve(url, './1.nc'),然后 sm_nc = Dataset('./1.nc'),但只收到以下错误消息:

Traceback (most recent call last):

  File "<ipython-input-101-61d1f577421e>", line 1, in <module>
    sm_nc = Dataset('./1.nc')

  File "netCDF4/_netCDF4.pyx", line 2321, in netCDF4._netCDF4.Dataset.__init__

  File "netCDF4/_netCDF4.pyx", line 1885, in netCDF4._netCDF4._ensure_nc_success

OSError: [Errno -51] NetCDF: Unknown file format: b'./1.nc'

但问题是,如果我将 url 粘贴到我的 Safari 或 Chrome 的搜索框中,然后单击 download,我得到的文件是 netCDF4.Dataset。 (您也可以尝试这样做。)我尝试了许多其他解决方案但没有奏效。那么有没有人可以帮我一个忙?谢谢! 顺便说一句,我使用的requestsnetCDF42.26.01.5.3版本,urllib.request3.7.[=24版本=]

Tiy 可能想使用 urlretrieve。以下对 urllib 的调用应该有效:

import urllib
new_x = "/tmp/temp.nc"
x = "https://smos-diss.eo.esa.int/oads/data/SMOS_Open_V7/SM_REPR_MIR_SMUDP2_20191222T183243_20191222T192549_700_300_1.nc"
urllib.request.urlretrieve(x, new_x)

当我尝试 wget 时,它给了我 nc 文件,但我不确定它的大小是 19 KB。如果此文件适合您,您可以在 python 中使用 wget。

wget https://smos-diss.eo.esa.int/oads/data/SMOS_Open_V7/SM_REPR_MIR_SMUDP2_20191222T183243_20191222T192549_700_300_1.nc

但它不可读,因为如果您尝试在不登录站点的情况下访问,它会提供无意义的文件。只需将此 link 粘贴到您的浏览器,然后登录即可获得 6 MB 的文件,我确信它是可读的。不过,如果您想使用 python 脚本获取文件,请检查提供的 selenium 单击该网站,以便您可以登录,然后使用脚本下载您的文件。