Веб-архивация и её ограничения
"Достоинство архивов в том, что они приводят нас в соприкосновение с чистой историчностью" - Клод Леви-Строс
На фоне срочной архивации многих данных в США и ранее схожих ситуаций в других странах, в России, в Армении (сайты организаций в Арцахе) и тд, не могу не вернуться к размышлениям вслух о том что веб-краулинг для веб архивации и веб-краулинг для многих других задач очень сильно расходятся и это, скорее печально, чем хорошо.
Веб-архивация много лет существует как набор различных проектов, глобальных вроде Интернет-архива, национальных в виде проектов национальных архивов и библиотек и немногих частных. Почти вся она построена вокруг экосистемы WARC.
Экосистема WARC
WARC - это стандарт хранения и публикации веб-архивов изначально разработанный внутри веб-архива и в 2017 году ставший стандартом ISO 28500:2017.
Во многих смыслах WARC - это хороший формат позволяющий сохранять собираемые материалы веб-сайтов в форме позволяющей последующую переработку. Но важно помнить что его предшественних, формат ARC_IA появился ещё в 1996 году и WARC существует с 2009 года без серьёзных ревизий структуры, авторы стандарта лишь расширяли его сохраняя совместимость.
У экосистемы WARC есть много достоинств которые начинаются, как раз, со стандартизации, продолжаются большими накопленными архивами (фактически весь веб-архив Archive.org) и наличием хоть и слегка устаревшей, но зрелой экосистемы продуктов с открытым кодом.
Например, WARC файлы умеют создавать специальные краулеры такие как:
Apache Nutch - создан и используется Common Crawl
Heritrix3 - создан в Интернет Архиве и им же применяется
Brozzler - другой краулер от Интернет Архива, использует headless браузер для индексации, хорош для интерактивных сайтов
Zeno - ещё один веб краулер от Интернет Архива, написан полностью на языке Go, с небольшим объёмом документации
Browsertrix crawler - краулер с использованием headless версии Chrome, создан компанией Webrecorder и распространяется под AGPL лицензией
Другие инструменты включают такие утилиты для командной строки как wget и совместимый с ним wpull у которых есть режим сохранения содержимого в WARC архивы.
Экосистема довольно обширная, но можно обратить внимание что большая часть инструментов разрабатывалис довольно давно, а новые, кроме того что делают в Webrecorder, не то чтобы хорошо документированы
Одна из причин в том что эти инструменты все заточены под WARC экосистему и у WARC есть набор серьёзных недостатков которые, по мере их накопления, стали более чувствительными:
Необходимость существенных ресурсов для просмотра WARC файлов. Если, например, есть потребность изучить содержание заархивированного сайта, то надо, или разворачивать специальное серверное ПО, или копировать WARC файлы целиком к себе локально. Частично это решается сейчас созданием стандарта WACZ, но пока с ним работают только инструменты созданные компанией Webrecorder
Неэффективная структура. WARC файлы устроены как двоичные файлы с разметкой доступа к конкретным ресурсам через файлы CDX (подвид CSV). Для того чтобы собрать метаданные за пределами этого CDX файла, необходимо просканировать WARC файлы целиком что очень небыстрый процесс. Некоторые задачи, например, анализ архива для понимания контента по типам mime являются весьма трудозатратными. В этом смысле WARC файлы и метаданные в CDX далеки не только от форматов вроде JSON, но уж точно от современных вроде Parquet
Неэффективное сжатие. Стандарт WARC и инструменты его применяющие допускают сжатие содержимого, но только целиком и только сжатием GZip. В результате сжатие довольно неэффективно, и из-за алгоритма, и из-за того что содержимое сжимается вперемешку. Здесь бы интереснее было бы колоночное сжатие и разделение WARC файлов по видам контента (в одном HTML файлы, в другом изображения, в третьем документы и тд), но пока так не делают.
Не WARC, но LLM
Второе дыхание для веб-краулинга началось с расцветом сбора данных для обучения LLM, а далее вместе с использованием LLM для сбора онлайн контента. При этом, если для обучения LLM разработчики использовали продукты из WARC экосистемы, но как пользователи, а на сборщики поскольку поглощали контент из проектов Archive.org и Common Crawl, но новые продукты веб-краулеров WARC уже игнорировали.
Можно обратить внимание, например, на такие продукты как:
firecrawl - в продукте фокус на превращении контента в структурированные данные, есть интеграция с LLM и множеством языков разработки, и ничего нет про использование/применение спецификаций или инструментов из экосистемы WARC. Открытый код там только у клиентских библиотек, а вся работа идёт через онлайн сервис
crawl4ai - практически аналогичный по функционалу что и firecrawl, но с открытым кодом под лицензией Apache 2.0. Позволяет извлекать структурированный контент с помощью LLM. Довольно зрелый и активно используемый продукт.
Elastic Open Web Crawler - часть продукта Elastic частично выделенная в отдельный код. Позволяет управлять индексацией сайтов в Elastic и, опять же, с игнорированием стандартов вроде WARC и прямым погружением контента сразу в поисковый индекс .
Кроме этих краулеров есть ещё множество других используемых в задачах скрейпинга, OSINT и иного сбора контента. Важно то что WARC и относящиеся к нему стандарты они игнорируют, при этом очень быстро развиваются, и с точки зрения качества кода, и с точки зрения удобства пользователя.
Почему это важно
Новые краулеры набирают бешеную популярность за очень короткий срок.
Если посмотреть на графики активности и востребованности краулеров, например, heritrix3 и crawl4ai или heritrix3 и firecrawl то можно увидеть как это происходит.
При этом в них нет новых стандартов или спецификаций, они развиваются без оглядки на существовавшие ранее краулеры. В то время как классические инструменты сбора контента для веб-архивов через веб краулинг развиваются очень медленно. Хорошо что вообще развиваются конечно.
Ключевое, конечно, в областях применения и решаемых задачах. С одной стороны, классическая веб архивация максимально приближенная к сохранению контента “как есть”, с другой стороны краулинг контента сразу с извлечением данных и игнорирование всего что не является необходимым и обязательным.
Но в современной веб архивации необходимы оба подхода. Быстрая архивация контента и превращение его в базу данных может потребовать срочной сделать краулер под конкретный сайт и тогда это точно не классические краулеры из экосистемы WARC. И наоборот, архивация большого числа разных сайтов это скорее про классическую архивацию чем создание краулера под каждый из них.
Хочется надеятся что в будущем ограничения экосистемы WARC будут преодолены и в классическую веб архивацию добавят новые инструменты и возможности, пока же важно знать что есть два параллельных подхода к сбору веб контента и важно знать и применять оба.