Harvard Dataverse 数据批量下载

article/2025/9/27 1:10:40

最近看论文,看到了自己需要的数据,就想着下载下来,结果发现这个东西并不好下载,也可能是自己的知识存储不够,捣鼓了一天,终于下载下来了。这里记录一下,方便以后查阅。

Harvard Dataverse 数据批量下载

  • Harvard Dataverse
  • 批量下载代码
  • 补充知识
    • URL
      • 协议标识符(schema)
        • http与https的区别
          • 基本概念
          • HTTP 与 HTTPS 区别
      • 域名/主机名(domain name)
      • 文件路径(File path)
      • 参数(parameter)
      • 锚点(Anchor)
    • curl
      • -H
      • tee
      • versions
      • API_TOKEN
    • jq
      • persistentId
    • paste
    • cat
    • xargs
    • bash -c
    • wget -O
    • $1 $0
  • 下载数据
  • 参考资料

Harvard Dataverse

Harvard Dataverse,一个包含了海量论文实验数据的网站,在这里你可以找到相当多的论文实验数据。我们要下载的数据就在这里。

在这里插入图片描述

首次使用,需要点击右上角Sign Up进行注册,之后点击Log In 进行登陆。想要下载数据一定要注册,注册后的信息,在之后也会用到。

我们可以随便找个数据看一下都有什么信息:

在这里插入图片描述

点开上图数据地址,就可以看到下图的信息:

在这里插入图片描述

接下来我们主要解决的是当数据超过20G,我们应该如何操作。首先我会给出下载代码,然后给出一些补充知识方便理解代码,最后记录一下下载过程。

批量下载代码

#!/bin/bash
API_TOKEN="YOUR-DATAVERSE-API-TOKEN"
PERSISTENT_ID=doi:10.7910/DVN/xxxxxx
output="/home/pytorch/LiangXiaohan/MI_Dataverse/MI_same_limb/MI"
curl -H "X-Dataverse-key: $API_TOKEN" https://dataverse.harvard.edu/api/datasets/:persistentId/versions/3/files?persistentId=$PERSISTENT_ID | tee >(jq '.data[].dataFile.persistentId' >persistentid) >(jq '.data[].dataFile.filename' >filenames)
paste persistentid filenames > arg
cat arg | xargs -L1 bash -c ' wget -O '$output'$1 -P '$output' https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=$0'
rm filenames persistentid arg

补充知识

URL

理解URL(Uniform Resource Locator)

Understanding URLs

URL 是Uniform Resource Locator的首字母缩写词,是 Internet 上资源的引用(地址)。

当我们在点击一个链接或在浏览器中输入网址时,就已经接触到URL了,只不过脑海没有这种术语罢了。 中文名是统一资源定位器。把它想象成一个街道地址,URL 的每个部分都是地址的不同部分,每个都会给你不同的信息。

协议标识符(schema)域名/主机名(domain name)文件路径(File path)参数(parameter)锚点(Anchor)以上这些元素组合在一起时,就构成了一个 URL,尽管并非所有 URL 都包含所有五个部分。
在这里插入图片描述

协议标识符(schema)

指示用于获取资源的协议名称。

Every URL begins with the scheme. This tells your browser what type of address it is so the browser connects to it correctly. There are many types of schemes, but for typical web browsing you will mostly see http and https.

schema通常不会在浏览器地址栏中显示,在输入网址时也不需要输入;相反,你可以直接输入域名。但这并不意味着它不是 URL 的一部分(可有可无);它只是没有被显示出来。

在这里插入图片描述

http与https的区别

http与https的区别

HTTP 与 HTTPS 的区别

之前就一直有这样的疑问,这两个有什么区别,正好今天整理一下。

基本概念

HTTP(HyperText Transfer Protocol:超文本传输协议) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。

HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。

HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议) 是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS 默认工作在 TCP 协议443端口

HTTP 与 HTTPS 区别
  • HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
  • 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

域名/主机名(domain name)

资源所在机器的名称。
这是整个URL最显眼的部位。通常,同一站点上的不同页面将继续使用相同的域名。例如,百度站点上的所有页面共享 baidu.com 域名。
在这里插入图片描述
以句点分隔的域名的每一段称为域。最右边的域称为一级域名(top-level domain),往左过来依次为二级域名(second-level domain),三级域名(third-level domain)。
在这里插入图片描述
我们可以从域中了解有关该站点的信息。一级域名更多一般可能会为您提供有关它是哪种站点类型的信息。比如以xx.gov或xx.org为域名后缀的URL,说明了它们的指向是政府机构或公益非营利性的站点。

在大多数 URL 中,可以省略 www 域。baidu.com 和 www.google.com 指向同一个页面。但是不能省略其他子域。例如,baike.baidu.com 下的所有页面都需要 URL 中的baike子域。

文件路径(File path)

机器上的文件路径名。
The file path—often just called the path—tells your browser to load a specific page. If you don’t specify a path and only enter a domain name, your browser is still loading a specific page; it’s just loading a default page, which usually will help you navigate to other pages.

在这里插入图片描述

参数(parameter)

某些 URL 在路径后包含一串字符以问号开头,叫参数字符串(parameter string)。

You have probably noticed this part of a URL appear in your address bar after performing a search on Google or YouTube. The parameter string can be clear or confusing to a human user, but it is critical information for the server.
在这里插入图片描述

锚点(Anchor)

锚点也出现在URL路径之后,它指示浏览器滚动到或加载至页面的特定部分。通常锚点以#号开头,用于引导到很长的页面特定部分,类似书签。不同的锚点不会加载不同的页面,它们只是告诉浏览器要显示的是页面的哪个部分而已。

常见的百度百科目录就是利用锚点实现跳转的。

在这里插入图片描述

curl

  1. curl是一个利用URL规则在命令行下工作的文件传输工具,
  2. 是一款很强大的http命令行工具。
  3. 它支持文件的上传和下载,是综合传输工具,习惯称url为下载工具

这一部分主要是针对这句代码:

curl -H "X-Dataverse-key: $API_TOKEN" https://dataverse.harvard.edu/api/datasets/:persistentId/versions/3/files?persistentId=$PERSISTENT_ID | tee >(jq '.data[].dataFile.persistentId' >persistentid) >(jq '.data[].dataFile.filename' >filenames)

其中有个-Htee不知道是干啥的,下面解释一下。

-H

Linux curl命令最全详解

-H “name: value”
–header “name: value” (HTTP)添加一个http header(http请求头);

在这里插入图片描述

tee

curl命令详解

tee : 从标准输入读取并写入标准输出和文件

下面这条命令的输出就是,下面这个网址中的信息。

curl -H "X-Dataverse-key: $API_TOKEN" https://dataverse.harvard.edu/api/datasets/:persistentId/versions/3/files?persistentId=$PERSISTENT_ID | tee

随便举个栗子看看:

https://dataverse.harvard.edu/api/datasets/:persistentId/versions/2/files?persistentId=doi:10.7910/DVN/CEFZLV

在这里插入图片描述

versions

在上面的网址中有个versions字样,这个有关这个的解释在Data Access API的Download By Dataset By Version中有解释。

这里就是按照数据的版本进行下载,我试过Data Access API中的Basic Download By Dataset方式,但是打不开网址。

这里的versions后面的数字是怎么来的呢?我们可以从数据详情页面看到:

在这里插入图片描述

API_TOKEN

curl -H "X-Dataverse-key: $API_TOKEN" https://dataverse.harvard.edu/api/datasets/:persistentId/versions/3/files?persistentId=$PERSISTENT_ID | tee >(jq '.data[].dataFile.persistentId' >persistentid) >(jq '.data[].dataFile.filename' >filenames)

上面的代码中还有一个值API_TOKEN,有关它的解释在下面的链接中有:

https://guides.dataverse.org/en/latest/user/account.html#api-token

In many cases, such as when depositing data, an API Token is required to interact with Dataverse Software APIs. The word “token” indicates a series of letters and numbers such as c6527048-5bdc-48b0-a1d5-ed1b62c8113b. Anyone who has your API Token can add and delete data as you so you should treat it with the same care as a password.

也就是说API_TOKEN就类似于你的一个令牌或者密码

按照下图进行操作即可得到自己的token值。

在这里插入图片描述

jq

curl -H "X-Dataverse-key: $API_TOKEN" https://dataverse.harvard.edu/api/datasets/:persistentId/versions/3/files?persistentId=$PERSISTENT_ID | tee >(jq '.data[].dataFile.persistentId' >persistentid) >(jq '.data[].dataFile.filename' >filenames)

再看一下完整的这段代码,还有一个关键词jq,我们再来看一下这是个什么东西:

给力的linux命令–jq简易教程

jq可以对json数据进行分片、过滤、映射和转换

我们可接接着从下面网站的内容来分析:

https://dataverse.harvard.edu/api/datasets/:persistentId/versions/2/files?persistentId=doi:10.7910/DVN/CEFZLV

我们截取一部分,并将其进行分段:

{"status":"OK","data":[
{"label":"cfs_2011041800.pkl","restricted":false,"version":1,"datasetVersionId":155639,"dataFile":
{"id":3348953,"persistentId":"doi:10.7910/DVN/CEFZLV/J8QKGW","pidURL":"https://doi.org/10.7910/DVN/CEFZLV/J8QKGW","filename":"cfs_2011041800.pkl","contentType":"application/octet-stream","filesize":64961961,"storageIdentifier":"s3://dvn-cloud:1689ba85f50-eda996245980","rootDataFileId":-1,"md5":"2980a7ee05580ddb1e3727541e8ee484","checksum":{"type":"MD5","value":"2980a7ee05580ddb1e3727541e8ee484"},"creationDate":"2019-01-29"}},{"label":"cfs_2011050200.pkl","restricted":false,"version":1,"datasetVersionId":155639,"dataFile":
{"id":3348921,"persistentId":"doi:10.7910/DVN/CEFZLV/HUV1PO","pidURL":"https://doi.org/10.7910/DVN/CEFZLV/HUV1PO","filename":"cfs_2011050200.pkl","contentType":"application/octet-stream","filesize":64961961,"storageIdentifier":"s3://dvn-cloud:1689ba8701d-bda3d154192d","rootDataFileId":-1,"md5":"ec6fdac0f018cc3400cab123ac703d6c","checksum":{"type":"MD5","value":"ec6fdac0f018cc3400cab123ac703d6c"},"creationDate":"2019-01-29"}},{"label":"cfs_2011051600.pkl","restricted":false,"version":1,"datasetVersionId":155639,"dataFile":
{"id":3348879,"persistentId":"doi:10.7910/DVN/CEFZLV/EAHO02","pidURL":"https://doi.org/10.7910/DVN/CEFZLV/EAHO02","filename":"cfs_2011051600.pkl","contentType":"application/octet-stream","filesize":64961961,"storageIdentifier":"s3://dvn-cloud:1689ba88182-7fc4f94f5b72","rootDataFileId":-1,"md5":"285f2859512c27b046594fae50e9ee47","checksum":{"type":"MD5","value":"285f2859512c27b046594fae50e9ee47"},"creationDate":"2019-01-29"}},

从上面的数据我们就可以知道下面这段代码实现的功能是什么了:

(jq '.data[].dataFile.persistentId' >persistentid)

这段代码截取的是每条数据的persistentId字段,这个字段很重要,主要是用来现在数据的。

persistentId

cat arg | xargs -L1 bash -c ' wget -O '$output'$1 -P '$output' https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=$0'

这段代码中,后面有个网址,当我们吧网址后面的$0persistentId替换后,就会发现神奇的东西:

https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=doi:10.7910/DVN/CEFZLV/J8QKGW

在浏览器中输入上述网址,就会发现,浏览器下载了一个文件,而这个文件就是下面这段代码获得的文件名对应的文件。

(jq '.data[].dataFile.filename' >filenames)

到这里,们已经可以通过网址来下载数据了,只要能拿到数据,我们就完成了一大半的的工作了!

paste

paste persistentid filenames > arg

这段代码主要是一个paste 命令:

Linux 文件管理 : paste 命令详解

paste命令用于合并文件的列。

paste指令会把每个文件以列对列的方式,一列列地加以合并。

这个就很好理解了,通过下面这张图就可以明白这段代码是干了什么了:

在这里插入图片描述

cat

cat arg | xargs -L1 bash -c ' wget -O '$output'$1 -P '$output' https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=$0'

Linux中cat命令的使用方式

cat("concatenate"的缩写)命令是 Linux/Unix 操作系统中最常用的命令之一。cat命令允许我们创建单个或多个文件,查看文件的内容,连接文件并在终端或文件中重定向输出。cat 命令将文件内容显示到屏幕上。Cat 命令将标准输入连接到标准输出。

xargs

Linux xargs 命令

命令格式:

somecommand |xargs -item  command

-L num 从标准输入一次读取 num 行送给 command 命令。

bash -c

bash -c (shell)

-c 的意思是 command,所以 bash -c 后面应该跟一个 command。

用法:

bash -c “cmd string”

通常使用shell去运行脚本,两种方法

  1. bash xxx.sh

  2. bash -c “cmd string”

wget -O

Linux —— wget -qO- 命令详解

-O:下载并以指定的文件名保存;

这里对应代码中的下面这一部分

' wget -O '$output

其中需要注意的是,$output这个应该是个文件名,而不是路径,也就是下面这个意思:

如果output我这样赋值,运行代码就会报错:

output="/home/pytorch/LiangXiaohan/MI_Dataverse/MI_same_limb/"

如果我改成下面这样的就不报错了,但是这样下载的文件,会在原文件名的基础上加上MI

output="/home/pytorch/LiangXiaohan/MI_Dataverse/MI_same_limb/MI"

$1 $0

cat arg | xargs -L1 bash -c ' wget -O '$output'$1 -P '$output' https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=$0'

上面这段代码中还有$1$0两个参数,这个也不是倒是个啥啊!

Linux—— 1 、 1、 1#、$@、$0、$1、$2

$1在shell中称为“位置参数”,表示传入的第1个参数(第1个入参)。

注:
这句代码里的参数我也没太搞懂,初步猜测:$1arg文件中的第二列,代表着文件名$0arg文件中的第一列,代表着persistentId

下载数据

首先创建文件,并把上述下载代码拷贝到文件中:

vim test.sh

然后给文件权限:

sudo chmod +x test.sh

运行文件:

bash ./test.sh

出现了如下问题

在这里插入图片描述

下载地址不对,看一下代码生成的三个文件:

在这里插入图片描述
在这里插入图片描述

发现arg内容不对,然后运行下面的代码,重新生成arg文件:

paste persistentid filenames > arg

生成如下的arg即为正确的,第一列是persistentId,第二列是文件名。

在这里插入图片描述

然后在test.sh中注释掉刚才执行的代码,并重新运行该文件:

在这里插入图片描述

我们可以看到数据已经开始下载了:

在这里插入图片描述

参考资料

9、Harvard Dataverse 数据批量下载

Data Access API

理解URL(Uniform Resource Locator)

Understanding URLs

http与https的区别

HTTP 与 HTTPS 的区别

Linux curl命令最全详解

curl命令详解

https://guides.dataverse.org/en/latest/user/account.html#api-token

给力的linux命令–jq简易教程

https://dataverse.harvard.edu/api/datasets/:persistentId/versions/2/files?persistentId=doi:10.7910/DVN/CEFZLV

Linux 文件管理 : paste 命令详解

Linux中cat命令的使用方式

Linux xargs 命令

bash -c (shell)

Linux —— wget -qO- 命令详解

Linux—— 1 、 1、 1#、$@、$0、$1、$2


http://chatgpt.dhexx.cn/article/FbpbDRKv.shtml

相关文章

NASA全球GPM免费降雨数据下载(2021年11月更新)

文章目录 前言一、申请注册NASA Earth Data账户二、查找数据三、开始下载0.下载前言1.站点管理2.添加Edge浏览器代理 总结 前言 NASA提供的免费地学数据简直是造福社会和广大科研工作者,不得不说这些方面我们仍需努力。 回归正题,提到高精度的历史降水数…

Landsat数据下载(批量下载)

隶属于美国地质调查局(USGS)的Landsat卫星,从20世纪70年代开始,提供了大量的卫星遥感数据。目前仍然在轨运行的Landsat系列卫星为Landsat-8和Landsat-9。 数据下载网站为:https://earthexplorer.usgs.gov/ 在该网站&a…

气象数据下载网站(存档)

https://www.cnblogs.com/icydengyw/p/12664027.html 1、http://weather.uwyo.edu/upperair/seasia.html 需要提前查明站点ID 2、https://rp5.ru/ 3、http://www.meteomanz.com/ 2005年至今,包含原始报文,数据十分详细 4、http://data.cma.cn/ 中…

全球地震数据下载方法

美国地质调查局地震数据 这份数据是美国 1977 年设立USGS 地震灾害计划,由美国地质调查局及其合作伙伴监测和报告地震,评估地震影响和危害,并对地震的成因和影响进行研究。 数据下载网址如下,访问该网站需要魔法 https://earthqua…

GEO数据下载方法

方法一:直接从官网下载,手动 GEO(GENE EXPRESSION OMNIBUS),https://www.ncbi.nlm.nih.gov/geo/,由美国国立生物技术信息中心NCBI创建维护的,是个公开的基因数据库,包含了测序和芯片…

Landsat数据下载

Landsat数据下载步骤 0 Landsat数据介绍1 下载地址2 下载步骤2.1 检索数据2.1.1 设置地点,有多种方法2.1.2 选择时间范围2.1.3 在Data Sets界面选择传感器(卫星或者传感器的名称) 2.2 限定云量2.3 下载数据 这是个老生常谈的话题了&#xff0…

Earthdata(NASA)网站数据使用IDM(Internet Download Manager)下载器批量下载方法(MERRA-2为例)

最近给亲近的人写了教程,想着也给大家分享一下。 MERRA-2 网址: GES DISC 这个网址是下载MERRA-2 instM_3d_asm_Np类型的数据文件,具体各部分字母代表什么,看下载列表中的MERRA2.README.pdf。 1. 打开网址,注册账号。…

下载数据

下载数据 如今的社会的信息已经不能用氢弹大爆炸来形容了,信息的海量,多的难以置信,且大多未经过仔细检查,所以就需要对信息进行分析。 接下来我们将可视化两种常见格式存储的数据:CSV和JSON。 将使用Python模块csv来…

常见目标跟踪数据集下载链接整理(更新中)

搜罗一下,感觉没人把常见的目标跟踪数据集下载链接汇总整理的,这里就整理一下,因为有些网址很难打开,这里也是想方便之后大家获取,来看看吧!我就从大佬图中来找几个吧!因为不是全接触过&#xf…

数据集下载

1、直接下载pytorch官方现成的数据集: #数据集下载,训练集 trainset torchvision.datasets.name(root./data,trainTrue,downloadTrue,transformtransformer) #数据集导入 trainloader torch.utils.data.DataLoader(trainset,batch_size36,shuffleTrue,num_worker…

NHANES数据库数据下载

今天跟大家分享一下如何用R包nhanesA下载NHANES数据 以一个简单的研究目的为例:使用NHANES数据库中的数据构建一个舒张压的预测模型。 根据该研究目的,整理纳入分析的周期和变量: ①研究周期:2013-2014年; ②因变量…

常用数据下载网站汇总

AI最重要的几大要素:数据、算法、算力。其中最基础也是很重要的一个内容就是数据,一个数据的好坏往往决定了你的模型的性能、效果、泛化能力。但是准备、完善、标注数据的过程往往是耗时耗力,所以如何知道更多的经典数据集,能够快…

SRA数据下载方法总结

SRA数据常用的下载方法 研究生了,对以往的知识进行一个复习和总结吧。 SRA数据库存储了现在主要高通量测序平台的原始测序数据和和比对信息,包括了SRA、EBI、DDBJ、JGI等数据库的信息。(这里分享一个小的知识点,现在可以不只依赖…

maxcompute-入门-数据下载

maxcompute数据下载的三种方式 maxcoumpute下载数据有三种方式: 1、直接通过dataworks云端下载,但是这个只能下载小于1万行的数据; 2、通过odpscmd客户端下载,有两种方式:分区下载只能下一天数据;或者先运行…

IBM Websphere MQ 基础4:Channel通道与MQ间消息传输

概念 WebSphere MQ uses two different types of channels: A message channel, which is a unidirectional communications link between two queue managers. WebSphere MQ uses message channels to transfer messages between the queue managers. To send messages in b…

MQ - 如何保证消息不丢失?处理重复消息?消息堆积处理?

什么是消息队列 在百度百科中,消息队列是这么解释的:“消息队列”是在消息的传输过程中保存消息的容器。 消息队列全称为英文 Message Queue 简称(MQ)是一种应用程序对应用程序的通信方法。MQ 是消费-生产者模型的一个典型的代表…

IBM MQ通道常用知识列举(一)

MQ的几个基本组件: 1. 什么是通道 通道是分布式队列管理器在IBM MQ MQI 客户端和IBM MQ服务器之间或两个IBM MQ服务器之间使用的逻辑通信链路。通道用于将消息从一个队列管理器移动到另一个队列管理器。 2, 启动通道 对发送方、服务器和请求方通道使用 MQSC 命令…

微服务 消息中间件MQ

微服务 消息中间件MQ 1. MQ的定义2. MQ的作用3. MQ的特点4. MQ消费方式5. 常用MQ对比分析 1. MQ的定义 MQ就是消息中间件。面向消息的中间件(message-oriented middleware)MOM能够很好的解决以上问题。是指利用高效可靠的消息传递机制与平台无关的数据交…

MQ消息队列

MQ MQ全称Message Queue(消息队列), 实在消息传输过程中保存消息的容器。多用于分布式系统之间进行通信两种 通信方式: MQ优势 消息到达MQ后直接给出响应,然后服务去消费相应的消息,用户体验极好 应用解耦:提高系…

IBMMQ linux版命令创建队列管理器、队列、通道、window连接(六)

1. 队列、通道介绍 1.1 本地队列 本地队列又分为普通本地队列和传输队列,普通本地队列是应用程序通过API对其进行读写操作的队列;传输队列可以理解为存储-转发队列,比如:我们将某个消 息交给MQ系统发送到远程主机,而此…