как wget или curl с кнопки загрузки без прикрепленного URL-адреса содержимого?

#curl #wget

#curl #wget

Вопрос:

Я пытаюсь загрузить некоторые файлы из набора данных ICEWS по адресу https://dataverse.harvard.edu/dataverse/icews . Я пытаюсь сделать это на экземпляре виртуальной машины Google, потому что у меня медленное соединение с ограничениями данных, которые дорого нарушать. Я пробовал оба curl и wget безуспешно. Для любого файла, который я хотел бы загрузить, есть кнопка загрузки с прикрепленным к ней URL-адресом, например:

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

Но этот URL-адрес, по-видимому, является только ссылкой на местоположение кнопки на текущей странице. Использование этого URL-адреса с или wget или curl приводит к загрузке HTML текущей страницы, а не к загрузке содержимого файла. Я не могу найти прямой ссылки на сам контент, а также не могу найти способ распечатать цепочку перенаправлений, которая приводит к нажатию кнопки загрузки.

Каково хорошее решение этой проблемы? Предпочтительнее использовать командную строку, но если есть какой-то обходной путь, специфичный для GCP, это тоже было бы неплохо. Я немного новичок в обоих, так что проще лучше.

Комментарии:

1. Вам нужно будет использовать инструмент очистки веб-страниц. Они разработали свой сайт так, чтобы затруднить загрузку файлов с помощью автоматических инструментов.

2. На самом деле, они даже предлагают для этого открытую конечную точку API. Этот вопрос относится к программному обеспечению хранилища данных dataverse, а не к одноименному продукту Microsoft.

Ответ №1:

Взглянув на эту ссылку, вы узнаете, как использовать wget для загрузки пакета. Перейдя по ссылке, которую вы указали здесь, на вкладке «метаданные» я скопировал «URL-адрес загрузки»>> использовал wget для загрузки файла:

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

и смог увидеть данные просто отлично:

 :persistentId?persistentId=doi:10.7910/DVN/28075% 100%[======================================================================================================================>] 221.56M  4.02MB/s    in 84s     

2020-10-05 14:36:43 (2.62 MB/s) - ‘:persistentId?persistentId=doi:10.7910/DVN/28075/K7L9Y8.1’ saved [232325743/232325743]

th@instance-667:~$ ls
':persistentId?persistentId=doi:10.7910/DVN/28075/K7L9Y8'  ':persistentId?persistentId=doi:10.7910/DVN/28075/K7L9Y8.1'

th@instance-667:~$ cat ':persistentId?persistentId=doi:10.7910/DVN/28075/K7L9Y8.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. Вау. Я чувствую себя очень глупым и очень благодарным. Я не знаю, почему я не проверил вкладку метаданных. Слава.

2. Если вы хотите, чтобы загруженный файл не назывался по URL-адресу, вы можете использовать --output-document параметр для предоставления более удобного имени.

Ответ №2:

Вы также можете использовать API Dataverse для загрузки файла (или набора данных), если вам известен его PID. Взгляните на раздел «Базовый доступ к файлам» в документации API. Обратите внимание, что во вселенной данных Havard эта конечная точка 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. Вы можете увидеть это при запуске curl с -v параметром (и без -L):

 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 (см. Другое), а ввод местоположения указывает на фактическое местоположение файла. Передача -L параметра curl указывает ему перейти по ссылке на это местоположение.

Загрузка целых наборов данных

Обратите внимание, что в вашем случае вы загружаете один файл из набора данных. Чтобы загрузить весь набор данных, вам нужно использовать другую конечную точку API (в основном заменяя datafile на dataset в URL) и использовать правильный DOI. Для вашего набора данных DOI файла и набора данных:

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

Другими словами, файлы из набора данных получают дополнительный суффиксный элемент, который добавляется к DOI набора данных. Чтобы загрузить весь набор данных (осторожно, его 1,5 ГБ), вы должны использовать:

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