#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