如何从没有附加内容 URL 的下载按钮获取或卷曲?

问题描述 投票:0回答:3

我正在尝试从 ICEWS 数据集下载一些文件,网址为 https://dataverse.harvard.edu/dataverse/icews。我正在尝试在 Google VM 实例上执行此操作,因为我的连接速度很慢,并且数据限制的打破成本很高。我已经尝试了

curl
wget
,但都没有成功。对于我想要下载的任何给定文件,都有一个带有 URL 的下载按钮,例如:

http://dataverse.harvard.edu/file.xhtml?persistentId=doi:10.7910/DVN/28075/K7L9Y8#

但是这个URL似乎只是当前页面上按钮位置的链接。将此 URL 与

wget
curl
一起使用会导致下载当前页面的 HTML,而不是下载文件内容。我找不到内容本身的直接链接,也找不到打印出导致单击下载按钮的重定向链的方法。

这个问题有什么好的解决办法吗?命令行是首选,但如果有一些 GCP 特定的解决方法,那也很好。我在这两方面都有点新手,所以简单更好。

curl wget
3个回答
1
投票

查看此链接,它将解释如何使用 wget 下载包。转到您提供的链接here,在“元数据选项卡”中,我复制了“下载 URL”>> 使用 wget 下载文件:

wget https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=doi:10.7910/DVN/28075/K7L9Y8

并且能够很好地看到数据:

:persistentId?persistentId=doi:10.7910%2FDVN%2F28075% 100%[======================================================================================================================>] 221.56M  4.02MB/s    in 84s     

2020-10-05 14:36:43 (2.62 MB/s) - ‘:persistentId?persistentId=doi:10.7910%2FDVN%2F28075%2FK7L9Y8.1’ saved [232325743/232325743]

th@instance-667:~$ ls
':persistentId?persistentId=doi:10.7910%2FDVN%2F28075%2FK7L9Y8'  ':persistentId?persistentId=doi:10.7910%2FDVN%2F28075%2FK7L9Y8.1'

th@instance-667:~$ cat ':persistentId?persistentId=doi:10.7910%2FDVN%2F28075%2FK7L9Y8.1'
Event ID        Event Date      Source Name    Source Sectors   Source Country  Event Text      CAMEO Code      Intensity       Target Name     Target Sectors  Target Country  Story ID        Sentence Number Publisher    City    District        Province       Country  Latitude        Longitude
20718170        2014-01-01      Police (Australia)      Police,Government       Australia 

我想这就是您所需要的?


1
投票

您还可以使用 Dataverse API 下载文件(或数据集),只要您知道其 PID。查看 API 文档 中的“基本文件访问”部分。 请注意,在哈佛的 Dataverse 中,此 API 端点是开放的,无需身份验证即可使用。

如何获取您的文件

使用curl,您可以提供持久标识符(在本例中为DOI)来访问文件。您的文件具有 DOI

10.7910/DVN/28075/K7L9Y8
,因此使用

curl -L https://dataverse.harvard.edu/api/access/datafile/:persistentId/\?persistentId\=doi:10.7910/DVN/28075/K7L9Y8 --output events.2014.20160121105408.tab

下载您想要的文件。

有关文件位置的一些有趣的细节

上面的链接(以及网站的下载链接)并不直接指向数据文件。文件本身存储在某些 Amazon S3 云存储中。当使用

-v
参数(并且不带 -L)运行curl 时,您可以看到这一点:

curl -v https://dataverse.harvard.edu/api/access/datafile/:persistentId/\?persistentId\=doi:10.7910/DVN/28075/K7L9Y8
< HTTP/2 303 
< date: Fri, 19 Nov 2021 16:50:00 GMT
< content-length: 0
< location: https://dvn-cloud.s3.amazonaws.com/10.7910/DVN/28075/15264f0277f-8738b46ba751[...very long URL that I shortened]

来自 Dataverse 的初始回复是 HTTP 303(请参阅其他),位置条目指向文件的实际位置。向curl传递

-L
参数告诉它遵循这个位置链接。

下载整个数据集

请注意,在您的情况下,您正在从数据集中下载单个文件。要下载整个数据集,您需要使用不同的 API 端点(基本上将 URL 中的

datafile
替换为
dataset
)并使用正确的 DOI。对于您的数据集,文件和数据集 DOI 为:

10.7910/DVN/28075/K7L9Y8  File DOI
10.7910/DVN/28075         Dataset DOI

换句话说,数据集中的文件会获得附加到数据集 DOI 的附加后缀元素。要下载整个数据集(小心,它有 1.5 GB),您可以使用:

curl -L https://dataverse.harvard.edu/api/access/dataset/:persistentId\?persistentId\=doi:10.7910/DVN/4OYCQK -v --output ICEWS_Coded_Event_Data.zip

0
投票

不幸的是,前面提到的两个解决方案对我不起作用。我没有使用持久标识符

persistentId
,而是使用数据集 JSON 元数据中找到的文件 ID 来创建下载链接。

例如,我正在使用 Wake Vision 数据集。在数据集的 JSON 元数据文件 中,数据集中的每个文件在

data
中都有自己的条目。在每个条目下都有一个
dataFile
条目,最终为每个文件存储一个
id

使用此 ID,我可以使用以下配方为我的所有文件创建下载 URL:

https://dataverse.harvard.edu/api/access/datafile/{id}

其中

{id}
替换为 JSON 元数据中找到的 id。

© www.soinside.com 2019 - 2024. All rights reserved.