【问题标题】:how to wget or curl from a download button with no attached content URL?如何从没有附加内容 URL 的下载按钮获取或卷曲?
【发布时间】:2021-01-19 17:14:07
【问题描述】:

我正在尝试从https://dataverse.harvard.edu/dataverse/icews 的 ICEWS 数据集下载一些文件。我正在尝试在 Google VM 实例上执行此操作,因为我的连接速度很慢,数据限制的破坏成本很高。我试过curlwget 都没有成功。对于我要下载的任何给定文件,都有一个附有 URL 的下载按钮,例如:

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

但此 URL 似乎只是指向当前页面上按钮位置的链接。将此 URL 与 wgetcurl 一起使用会导致下载当前页面的 HTML,而不是下载文件内容。我找不到指向内容本身的直接链接,也找不到打印出导致单击下载按钮的重定向链的方法。

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

【问题讨论】:

  • 您需要使用网络抓取工具。他们设计的网站使使用自动化工具下载文件变得困难。
  • 并非如此,他们甚至为此提供了一个开放的 API 端点。本题指的是数据存储软件dataverse,不是微软的同名产品。

标签: curl wget


【解决方案1】:

看看this link,它将解释如何使用 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 

我认为这就是您所需要的?

【讨论】:

  • 哇。我感到非常愚蠢,非常感激。我不知道为什么我没有检查元数据选项卡。荣誉。
  • 如果您想避免下载的文件被命名为 url,您可以使用 --output-document 参数提供更友好的名称。
【解决方案2】:

您也可以使用 Dataverse API 下载文件(或数据集),只要您知道其 PID。查看API documentation 中的“基本文件访问”部分。 请注意,在哈佛的 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(请参阅其他),并且 location 条目指向文件的实际位置。将 -L 参数传递给 curl 会告诉它遵循此位置链接。

下载整个数据集

请注意,在您的情况下,您正在从数据集中下载单个文件。要下载整个数据集,您需要使用不同的 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

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2020-02-29
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多