Перейти к основному содержимому

Wget: сохранить сайт в WARC

Этот гайд — набор готовых сценариев: как с помощью GNU wget сохранить сайт так, чтобы получился не только набор файлов для офлайн-просмотра, но и архивный файл WARC — стандартный формат веб-архивов (ISO 28500), который можно открыть в плеере, проиндексировать и передать в архив.

Справочник по установке, всем параметрам и ограничениям wget — на странице Wget — справочник по инструменту. Здесь — только то, что нужно для конкретных задач.

Когда wget подходит

wget хорошо работает со статическими сайтами: HTML, изображения, PDF, CSS. Он не выполняет JavaScript, поэтому для современных сайтов, где содержимое подгружается скриптами, используйте Browsertrix — см. Архивация динамических сайтов.

Подготовка​

  1. Установите wget (Linux: sudo apt install wget; macOS: brew install wget; Windows: choco install wget). Подробнее — в справочнике.
  2. Проверьте, что ваша сборка умеет писать WARC (поддержка появилась в wget 1.14):
wget --version | head -1
wget --help | grep -i warc

Если в выводе есть --warc-file, всё готово.

  1. Пройдите Preflight-чеклист: цель, охват, правовые ограничения, место на диске.

Сценарий 1. Сохранить сайт целиком в WARC​

Основной рецепт:

wget --mirror --page-requisites --adjust-extension --convert-links --no-parent \
--wait=1 --random-wait \
--warc-file=example-2026-10-12 --warc-cdx --warc-max-size=1G \
https://example.com/

Что делают параметры:

ПараметрЗачем
--mirrorРекурсивный обход без ограничения глубины (-r -l inf)
--page-requisitesСкачивать всё, что нужно для отображения страницы: CSS, изображения, скрипты
--adjust-extensionДобавлять .html к страницам без расширения (для офлайн-копии)
--convert-linksПереписать ссылки в локальных файлах для офлайн-просмотра
--no-parentНе подниматься выше стартового каталога
--wait=1 --random-waitПауза около секунды между запросами — щадящая нагрузка на сервер
--warc-file=ИМЯЗаписывать все запросы и ответы в ИМЯ.warc.gz
--warc-cdxДополнительно создать CDX-индекс ИМЯ.cdx
--warc-max-size=1GДелить WARC на части по ~1 ГБ

Что получится:

  • папка example.com/ — офлайн-копия для просмотра в браузере;
  • example-2026-10-12-00000.warc.gz, -00001.warc.gz и т. д. — WARC-файлы (при --warc-max-size; без него — один файл example-2026-10-12.warc.gz);
  • example-2026-10-12-meta.warc.gz — служебные записи (параметры запуска и журнал wget); без --warc-max-size они пишутся в тот же WARC-файл;
  • example-2026-10-12.cdx — индекс записей.

Важно знать:

  • --convert-links меняет только локальные файлы; в WARC сохраняются исходные ответы сервера.
  • При записи WARC wget сам отключает несовместимые режимы: проверку времени изменения файлов (-N, входит в --mirror), --no-clobber и --continue — и сообщает об этом в выводе. Поэтому каждый запуск скачивает сайт заново.
  • По умолчанию wget соблюдает robots.txt. Отключать это (-e robots=off) стоит только осознанно — см. позицию проекта в разделе Условия использования сервисов.

Сценарий 2. Только WARC, без офлайн-копии​

Если папка с файлами не нужна, а важен только архив:

wget --recursive --level=inf --page-requisites --no-parent \
--wait=1 --random-wait --delete-after \
--warc-file=example-2026-10-12 --warc-cdx \
https://example.com/

--delete-after удаляет локальные файлы после обработки, при этом ссылки из страниц успевают извлечься, а все ответы остаются в WARC.

Сценарий 3. Список отдельных страниц​

Когда нужно сохранить конкретные страницы (например, список публикаций или документов):

# urls.txt — по одному URL на строку
wget --input-file=urls.txt --page-requisites --adjust-extension \
--wait=1 --random-wait \
--warc-file=pages-2026-10-12 --warc-cdx

Сценарий 4. Ограничить глубину и объём​

Для очень большого сайта или когда нужна только часть:

wget --recursive --level=3 --page-requisites --no-parent \
--quota=5G --wait=1 --random-wait \
--reject-regex='\.(mp4|avi|mov|iso|zip)$' \
--warc-file=example-part-2026-10-12 --warc-cdx \
https://example.com/news/
  • --level=3 — не дальше трёх переходов от стартовой страницы;
  • --quota=5G — остановиться после ~5 ГБ (при рекурсивной загрузке);
  • --reject-regex — пропускать тяжёлые файлы по шаблону URL.

Сценарий 5. Сайт с отдельными доменами для статики​

Если изображения и файлы лежат на поддомене или CDN, разрешите переход на эти домены, но только на них:

wget --mirror --page-requisites --adjust-extension --convert-links --no-parent \
--span-hosts --domains=example.com,static.example.com \
--wait=1 --random-wait \
--warc-file=example-2026-10-12 --warc-cdx \
https://example.com/

Без --domains параметр --span-hosts уведёт обход на любые внешние сайты.

Сценарий 6. Повторный сбор с дедупликацией​

При регулярной архивации одного сайта можно не хранить повторно ресурсы, которые не изменились. Передайте CDX-индекс предыдущего сбора:

wget --mirror --page-requisites --no-parent --wait=1 --random-wait \
--warc-file=example-2026-11-12 --warc-cdx \
--warc-dedup=example-2026-10-12.cdx \
https://example.com/

Для ресурсов, совпадающих по дайджесту с записями из индекса, wget запишет короткие записи revisit со ссылкой на исходную запись (WARC-Refers-To) вместо полного содержимого. Храните предыдущие WARC вместе с новыми — без них такие записи не воспроизвести.

Сценарий 7. Сбор прервался​

При записи WARC продолжить загрузку (--continue) нельзя — wget отключит этот режим. Запустите сбор заново с новым именем WARC-файла, чтобы не перезаписать уже собранное, например --warc-file=example-2026-10-12-run2. Если первый запуск успел записать CDX, используйте его в --warc-dedup (сценарий 6), чтобы не дублировать данные.

Дополнительно: описание сбора внутри WARC​

В служебную запись warcinfo можно добавить сведения о сборе:

wget --mirror --page-requisites --no-parent \
--warc-file=example-2026-10-12 --warc-cdx \
--warc-header="operator: имя или проект" \
--warc-header="description: архив сайта example.com перед закрытием" \
https://example.com/

Проверка результата​

# Сколько ответов попало в WARC
gunzip -c example-2026-10-12-00000.warc.gz | grep -a -c '^WARC-Type: response'

# Проверка контрольных сумм записей (warcio)
pip install warcio
warcio check -v example-2026-10-12-00000.warc.gz

# Индекс в формате JSON (по строке на запись)
warcio index example-2026-10-12-00000.warc.gz | head

Затем откройте WARC в ReplayWeb.page и пролистайте несколько случайных страниц. Дальнейшие шаги — индексация, упаковка в WACZ, публикация — в гайде WARC: от архива до публикации.

Параметры сверены с wget --help версии 1.25.0 и с руководством GNU Wget; warcio — версии 1.8.1 (октябрь 2026).

Частые проблемы​

ПроблемаЧто сделать
Обход «уходит» на чужие сайтыУберите --span-hosts или ограничьте домены через --domains
Скачивается слишком многоОграничьте --level, --quota, добавьте --reject-regex или --exclude-directories
Не видны изображения и стилиДобавьте --page-requisites; если они на другом домене — сценарий 5
Сайт отвечает 429 или 503Увеличьте --wait, добавьте --limit-rate=200k
Сервер отклоняет запросы с User-Agent wgetУкажите собственный User-Agent с контактом, например --user-agent="archiver ([email protected])"
Капча, антибот-защита, требуется входНе пытайтесь обойти защиту — см. Правовые и этические вопросы
Страница пустая, содержимое грузится скриптамиwget не выполняет JavaScript — используйте Browsertrix

Альтернативы​

ИнструментКогда использоватьСтатус
wgetСтатические сайты, быстрые сборыПоддерживается
Wget-AT (ArchiveTeam)Сложная логика обхода через Lua, сжатие WARC в ZstandardПоддерживается, сборка из исходников
grab-siteКрупные обходы с панелью мониторингаРазвивается медленно
WpullИсторически — замена wget на Python с WARCНе развивается: последний релиз на PyPI — 2.0.1 (2016), на современных версиях Python не устанавливается без доработок
BrowsertrixСайты на JavaScript, сложные страницыПоддерживается
HeritrixОчень большие обходы, кластерПоддерживается

Связанные материалы​