01 说明

1.1 网站和GPP数据集的基本信息

中国科学院地球大数据科学数据中心-网址:https://data.casearth.cn

本博客下载VPM-GPP的网址:https://data.casearth.cn/dataset/5c19a5660600cf2a3c557ad3

2000-2016年全球0.05°基于VPM模型的GPP数据集-产品信息:

1.2 API说明

网站所给API如下:

本博客主要基于通过ID获取文件列表单文件下载进行VPM-GPP的批量下载,对于元数据信息没有进行获取,但代码可以作为参考。

1.2.1 通过ID获取文件列表

这个Url是不完整的,是相对路径,结合前面的网站地址https://data.casearth.cn和此处的/api/dataset/getAllFileListBySdoId?sdoId=5c19a5660600cf2a3c557ad3拼接得到的网址https://data.casearth.cn/api/dataset/getAllFileListBySdoId?sdoId=5c19a5660600cf2a3c557ad3(通过浏览器即可打开)就是一个文件列表。

结果如下:

但是这里我们不直接下载,我们通过Python直接读取成json文件对这个文件列表进一步处理.(如果想要直接下载直接复制放到文本文件里改个后缀的事情)。

1.2.2 单文件下载

对于单文件下载,这里需要使用到前面获取得到的文件列表的信息补全这里的Url/api/file/downloadOneFile?fileId=文件Id&username=用户名

例如取文件列表data中一个文件:{"size":18485479,"file_name":"GPP.VPM.2000321.v20.CMG.tif","id":2148752},需要将id2148752替换上面Url中的文件Id

此外还有一个关键点,将用户名替换为登录中国科学院地球大数据科学数据中心后(https://data.casearth.cn)的用户名,注意不是登录时输入的用户名账号,而是登录之后显示的用户名(如下)。



补全之后的Url和之前的网站网址拼接即可得到该文件的下载链接(所以网站为什么索性不直接给一个含下载txt文件让我们自己做,当然现在也还好只是对于不熟悉下载的同学不是很友好)。

最终就是,按照上述的拼接就可以得到指定文件的下载链接例如:https://data.casearth.cn/api/file/downloadOneFile?fileId=2148752&username=何泽煌,现在代码的目标就是一直重复上述操作执行下载。

02 代码说明

完整代码:

# @Author  : ChaoQiezi
# @Time : 2025/7/17 上午11:09
# @Email : chaoqiezi.one@qq.com
# @Wechat : GIS茄子
# @FileName: download_VPM_GPP """
This script is used to 批量下载VPM-GPP
""" import requests
import os
import time # 网站根地址
base_url = "https://data.casearth.cn"
# id_url, 网站中<API:通过ID获取文件列表>所显示的Url
id_url = "/api/dataset/getAllFileListBySdoId?sdoId=5c19a5660600cf2a3c557ad3"
# 用户名, 登录后网站显示的名字就是你的用户名, 一般不是登录时的输入账户名
user_name = "何泽煌"
# 输出文件夹
out_dir = r"I:\DataHub\VPM_GPP" def get_files_info(base_url, id_url):
"""
调用API获取所有文件的信息列表
:param base_url: 根网址
:param id_url: 网站中<API:通过ID获取文件列表>所显示的Url
:return: 以字典形式返回{file_name: file_id, ···}
"""
"""
调用API获取所有文件的信息列表 (文件名 -> 文件ID 的映射)
""" # 文件列表的url
file_info_url = f"{base_url}{id_url}" # 获取文件列表的基本信息
response = requests.get(file_info_url, timeout=30, verify=False) # timeout=30表示超时30s没有链接上报错, verify是因为该网站SSL证书过期了这里不验证
response.raise_for_status() # 查询请求状态,若请求状态异常说明无法下载直接弹出报错
files_info = response.json()['data'] # [{'size': xxx, 'file_name': xxx, 'id': xxx}, {}, {}, ···] # 获取文件名和id
files_info = {file['file_name']: file['id'] for file in files_info}
print(f"成功获取 {len(files_info)} 个文件的信息。") return files_info def download_file(base_url, filename, file_id, username, save_dir):
"""
下载单个文件
:param base_url: 根网址
:param filename: 文件名(非自定义的输出, 基于api读取)
:param file_id: 文件id
:param username: 用户名(登录后网站显示的名字就是你的用户名, 一般非登录的账户名)
:param save_dir: 输出文件夹路径
:return: 成功返回True, 下载失败返回False
"""
"""
下载单个文件
""" api_url = f"{base_url}/api/file/downloadOneFile?fileId={file_id}&username={username}"
out_path = os.path.join(save_dir, filename) # 如果文件已经存在,则跳过
if os.path.exists(out_path):
print(f"文件存在: 文件名-{filename}")
return True print(f"正在下载: 文件名-{filename}, ID-{file_id})") try: # 可能由于网络等问题下载容易断开,这里try一下
with requests.get(api_url, timeout=60, verify=False) as r:
r.raise_for_status() # 查询请求状态,若请求状态异常说明无法下载报错
with open(out_path, 'wb') as f:
# 下方代码表示分块写入为防止下载文件过大而内存爆满, 如果执行这种流式传输,get方法需要设置stream=True
# for chunk in r.iter_content(chunk_size=8192):
# f.write(chunk)
# 一次性写入(确保单个文件大小小于当前可用内存)
f.write(r.content) time.sleep(0.01) # 友好请求,在每次下载后暂停一小段时间,防止因请求过快被服务器屏蔽
return True except Exception as e:
print(f"下载失败: 文件名-{filename}, 失败原因-{e}")
time.sleep(0.05) return False if __name__ == "__main__":
# 获取文件基本信息
files_info = get_files_info(base_url, id_url) # 遍历下载
success_count = 0
for file_name, file_id in files_info.items():
success_count += download_file(base_url, file_name, file_id, user_name, out_dir) print("\n下载完成: 成功-{}, 失败-{}".format(success_count, len(files_info) - success_count))

2.1 get_files_info函数说明

简而言之,按照之前的下载链接的拼接方式,我们最关键的是需要所有文件的id,但是由于输出文件时需要指定输出的文件名称,所以这里我还将file_name提取出来与id一一对应。因此这个函数的作用时将从读取的json文件中将file_nameid以字典dict形式返回。形如{文件名_1: 文件的id_1, 文件名_2: 文件的id_2···}

2.2 download_file函数说明

这个函数就是将之前的拼接方式以代码形式呈现得到当前所要下载文件的下载链接,接着通过request库进行进行即可。这里没有具体的说明是因为代码中有较为详细的注释供参考,且函数的参数和使用并不复杂,这里不展开说明,自行研究即可。

本文由博客一文多发平台 OpenWrite 发布!

Python:如何从地球大数据科学服务中心批量下载VPM-GPP?的更多相关文章

  1. python、Java、大数据和Android的薪资如何?

    莫名其妙,从去年年底开始,Python这个东西在中国,突然一下子就火起来了,直至现在,他的热度更是超越了java,成为软件工程师最为关注的话题.Python之所以能火起来,很大一方面是因为大数据.人工 ...

  2. 【python】-- Socket接收大数据

    Socket接收大数据 上一篇博客中的简单ssh实例,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整 ...

  3. 大数据之路day01_1--Java下载、安装等配置

    从今天开始,我就正式的走上大数据的道路了,如果说我为啥要去学习大数据,可能我的初衷是以后可以接触到人工智能方面的技术,后来在自学的过程中发现,学习人工智能,需要扎实的算法,以及对大量数据的处理,再者, ...

  4. [python] 溜了,溜了,七牛云图片资源批量下载 && 自建图床服务器

    故事背景: 七牛云最近一波测试域名操作真是把我坑死了!这简直和百度赠送你2T网盘,之后再限速一样骚操作.于是,痛定思痛自己买个云主机.自己搭图床应用! 1.七牛图片批量下载到本地 1.1 曲折尝试 当 ...

  5. Python socket ssh接收大数据

    通过socket连续接收返回数据 Server服务端 import socket,os server = socket.socket() server.bind(('localhost',9999)) ...

  6. Python编程快速上手(七)Unsplash批量下载器

    首发于个人博客:http://rhinoc.top/post/python_7.html 程序描述 V1.0输入关键字搜索图片,模拟页面下拉获取更多图片,页面加载完成后获取图片链接并下载至指定文件夹. ...

  7. 大数据,why python

    大数据,why python ps, 2015-12-4 20:47:46 python" title="大数据,why python">http://www.op ...

  8. 干货!小白入门Python数据科学全教程

    前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...

  9. 9 个鲜为人知的 Python 数据科学库

    除了 pandas.scikit-learn 和 matplotlib,还要学习一些用 Python 进行数据科学的新技巧. Python 是一种令人惊叹的语言.事实上,它是世界上增长最快的编程语言之 ...

  10. 【Python开发】Python 适合大数据量的处理吗?

    Python 适合大数据量的处理吗? python 能处理数据库中百万行级的数据吗? 处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何? 需要澄清两点之后才可以比较全面的看这 ...

随机推荐

  1. 洛谷 P5066 [Ynoi2014] 人人本着正义之名

    洛谷 P5066 [Ynoi2014] 人人本着正义之名 Problem 对一个01序列进行以下\(m\)个操作: 区间覆盖为0 区间覆盖为1 将区间\([l,r-1]\)中的数\(a_i\)同时变为 ...

  2. 未来已来?vSphere 9 预览版部署体验

    最近看到不少技术爱好者开始分享 vSphere 9 的基础体验镜像,作为 VMware 的忠实粉丝,怎么能错过这波"尝鲜"机会呢? 趁着空闲时间,我也动手安装体验了一下.从初步使用 ...

  3. Python之multiprocessing.Pool(创建多个子进程)

    当需要创建的子进程数量不多的时候可以直接利用multiprocessing中的Process动态生成多个进程.但是,如果是成百上千个任务,手动创建显然不合适,此时就可以用multiprocessing ...

  4. Java源码分析系列笔记-1.JMM模型之先谈硬件

    目录 1. 冯诺依曼体系结构 2. 高速缓存 2.1. 工作原理 2.2. 存储器层次结构 2.3. 局部性原理 3. 缓存一致性/可见性问题 3.1. 如何解决 3.1.1. 总线加锁 3.1.2. ...

  5. DotTrace系列:4. 诊断窗体程序变卡之原因分析

    一:背景 1. 讲故事 写这一篇是因为昨天看 dottrace 官方文档时,在评论区看到了一条不友好的评论,截图如下: 虽然语气上带有些许愤怒,但说实话人家也不是无中生有,作为 dottrace 的忠 ...

  6. 利用POI插件导入excel 读取合并行数据(上)

    图为要导入的excel格式 分析一下: 前一部分数据是读取 合并行 存入一张 "会见" 表 ,后面蓝色的 非合并行 存入 "会见人信息" 表. 先说后台方法,( ...

  7. 1.Seismic Unix的安装教程

    安装SU(Seismic Unix)的基本步骤 Seismic Unix(SU)是科罗拉多矿业学院的波场研究中心(CWP)开发的一款开源地震数据处理软件,当前很多学者在Linux下用SU做地震数据的处 ...

  8. 使用openOffice将office文件转成pdf

    下载安装openoffice,下载地址:http://www.openoffice.org/download/ 我安装的目录: 输入cmd回车 在命令窗口输入 soffice -headless -a ...

  9. vs 运行的时候产生伴随cmd窗口

    简介 很多程序运行的时候,需要输出调试信息.如果没有伴随cmd窗口的话,输出的信息很难被看到 参考链接 https://blog.csdn.net/weixin_39278265/article/de ...

  10. 产品更新丨谷云科技 iPaaS 集成平台 V7.6 版本发布

    六月,谷云科技iPaaS集成平台更新了V7.6版本.这次更新中我们着重对API网关.API编排.组织管理权限.API监控等功能进行了增强以及优化,一起来看看有什么新变化吧! 网关.监控.编排.组织权限 ...