Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Когда-то давно передо мной стояла задача по поиску файлов на ресурсах, которые могли уже не работать или определённые данные с них были удалены. Тогда для этой цели я использовал веб архивы Common Crawl и самопальный инструмент для автоматизации взаимодействия с ним.
Сейчас мне понадобилось решить схожую задачу, но Common Crawl упал и пока не встаёт... Поэтому было принято решение допилить свой инструмент до уровня скоростного велосипеда с использованием Wayback Machine и поделиться небольшим опытом извлечения архивных данных.
Не погружаясь сильно в детали, далее, в общих чертах я опишу что используют сервисы для архивации, как мы можем этим пользоваться через API, а в конце мы сертифицируемся по-ЦРУшному используя инструмент GoGetCrawl.
Общие моменты
Для начала стоит упомянуть про общие моменты сервисов веб архивирования. Архивы хранятся в файлах WARC/ARC формата, затем с помощью CDX сервера мы можем исследовать данные файлы используя различные фильтры. Популярным инструментом, с помощью которого это осуществляется являться pywb.
Например, на скриншоте ниже можно увидеть результат запроса http://<server_addr>/cdx?url=https://twitter.com/internetarchive/
к CDX серверу:
Как видим в результате будут получены данные содержащие оригинальный URL (original
), статус при его запросе (status code
) на момент сбора данных (timestamp
), тип файла (mimetype
) и другие интересные параметры. Более детальное описание CDX сервера и используемых при запросах параметрах можно найти тут.
Помимо сервисов Wayback Machine и Common Crawl, которые мы рассмотрим далее существуют множество других. Но их архивы менее обширны и скорее носят локальный характер по стране или тематике. Некоторые из них можно посмотреть тут.
Извлекаем файлы из архивов
Думаю многие пользовались web-архивами через удобные интерфейсы. Сейчас я покажу как это сделать неудобно используя API на примере 2 популярных сервисов. К примеру мы хотим получить все JPEG файлы на cia.gov
и его поддоменах, а затем скачать интересующий нас файл.
Wayback Machine
Работаем ручками с Wayback machine
Для осуществления нашей задачи на данном ресурсе мы используем следующий запрос:
https://web.archive.org/cdx/search/cdx?url=*.cia.gov/*&output=json&limit=10&filter=mimetype:image/jpeg&collapse=urlkey
Где:
/cdx/search/cdx
- endpoint CDX сервера,url=*.cia.gov/*
- исследуемый URL,filter=mimetype:image/jpeg
- фильтрация по MIME типу JPEG файла,output=json
- требуем результат в формате JSON,limit=10
- ограничиваемся 10 результатами,collapse=urlkey
- получаем уникальные URL (без этого много дубликатов).
В результате мы получаем 10 найденных изображений в архиве. Из интересного, помимо URLов, ответ содержит MIME тип файлов (полезно если не используется фильтрация), и статус код при доступе к объекту на момент составления архива:
[["urlkey","timestamp","original","mimetype","statuscode","digest","length"],
["gov,cia)/++theme++contextual.agencytheme/images/aerial-analysis-btn.jpg", "20150324125120", "https://www.cia.gov/++theme++contextual.agencytheme/images/aerial-analysis-btn.jpg", "image/jpeg", "200", "OJRFXPWOPZQGPRIZZQZOTRSZKAVLQLKZ", "3845"],
["gov,cia)/++theme++contextual.agencytheme/images/aerial_cropped.jpg", "20160804222651", "https://www.cia.gov/++theme++contextual.agencytheme/images/Aerial_Cropped.jpg", "image/jpeg", "200", "3WII7DZKLXM4KSQ5UTEKO5EL7H5VTB35", "196685"],
["gov,cia)/++theme++contextual.agencytheme/images/background-launch.jpg", "20140121032437", "https://www.cia.gov/++theme++contextual.agencytheme/images/background-launch.jpg", "image/jpeg", "200", "3C4G73473VYPOWDNA4VJUV4Q7EC3IXN4", "44501"],
["gov,cia)/++theme++contextual.agencytheme/images/background-video-panel.jpg", "20150629034524", "https://www.cia.gov/++theme++contextual.agencytheme/images/background-video-panel.jpg", "image/jpeg", "200", "CQCUYUN5VTVJVN4LGKUZ3BHWSIXPSCKC", "71813"],
["gov,cia)/++theme++contextual.agencytheme/images/bannerheads/an-1.jpg", "20130801151047", "https://www.cia.gov/++theme++contextual.agencytheme/images/bannerheads/an-1.jpg", "image/jpeg", "200", "GPSEAEE23C53TRGHLMBXHWQYNB3EGBCZ", "14858"],
["gov,cia)/++theme++contextual.agencytheme/images/bannerheads/an-2.jpg", "20130801150245", "https://www.cia.gov/++theme++contextual.agencytheme/images/bannerheads/an-2.jpg", "image/jpeg", "200", "L6P2MNAAMZUMHUEHJFGXWEUQCHHMK2HP", "15136"],
["gov,cia)/++theme++contextual.agencytheme/images/bannerheads/an-3.jpg", "20130801151656", "https://www.cia.gov/++theme++contextual.agencytheme/images/bannerheads/an-3.jpg", "image/jpeg", "200", "ODNXI3HZETXVVSEJ5I2KTI7KXKNT5WSV", "19717"],
["gov,cia)/++theme++contextual.agencytheme/images/bannerheads/an-4.jpg", "20130801150219", "https://www.cia.gov/++theme++contextual.agencytheme/images/bannerheads/an-4.jpg", "image/jpeg", "200", "X7N2EIYUDAYWMX7464LNTHBVMTEMZUVN", "20757"],
["gov,cia)/++theme++contextual.agencytheme/images/bannerheads/banner-benefits-background.jpg", "20150510022313", "https://www.cia.gov/++theme++contextual.agencytheme/images/bannerheads/banner-benefits-background.jpg", "image/jpeg", "200", "VZJE5XSAQWBD6QF6742BH2N3HOTSCZ4A", "12534"],
["gov,cia)/++theme++contextual.agencytheme/images/bannerheads/chi-diversity.jpg", "20130801150532", "https://www.cia.gov/++theme++contextual.agencytheme/images/bannerheads/CHI-diversity.jpg", "image/jpeg", "200", "WJQOQPYJTPL2Y2KZBVJ44MVDMI7TZ7VL", "6458"]]
Далее, чтобы получить доступ к архивированному файлу, мы берем один из результатов выше и используем следующий запрос:
https://web.archive.org/web/20150324125120id_/https://www.cia.gov/++theme++contextual.agencytheme/images/aerial-analysis-btn.jpg
Где:
/web
- endpoint сервера с файлами,20230502061729id_
- timestamp полученный в предыдущем запросе + id_,https://company.habr.com/images/lanit.jpg
- url файла из предыдущего запроса.
Common Crawl
Работаем ручками с Common Crawl
В случае с данным сервисом задача немного отяжеляется тем, что он перегружен, и сейчас пользоваться CDX сервером Common Crawl крайне затруднительно. Тем не менее я опишу как это делается.
Для начала нам необходимо выбрать версию архива (Common Crawl обновляет архивы раз в месяц или два). К примеру мы выбрали версию за Март\Апрель 2023, в этом случае аналогичный запрос будет выглядеть следующим образом:
https://index.commoncrawl.org/CC-MAIN-2023-14-index?url=*.cia.gov/*&output=json&limit=10&filter=mimetype:image/jpeg&collapse=urlkey
Как и ожидалось, сервера Common Crawl на момент написания статьи всё ещё перегружены и 504 Gateway Time-out
-ают меня