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

Wget

GNU Wget — неинтерактивный консольный загрузчик файлов по HTTP, HTTPS и FTP. Предустановлен почти в каждом дистрибутиве Linux, доступен для macOS и Windows. С версии 1.14 умеет писать результат сразу в WARC, что делает его самым доступным инструментом для базовой веб-архивации.

Сайт: www.gnu.org/software/wget

Зачем нужен​

Wget — это первый инструмент, к которому обращаются при необходимости быстро скачать сайт целиком, отдельную страницу с ресурсами или набор ссылок из списка. Он не требует Docker, Python, JVM или Node.js — работает везде, где есть bash.

Типичные сценарии:

  • Разовое скачивание сайта для офлайн-копии.
  • Регулярный сбор фиксированного списка URL (например, ежедневная выгрузка ленты).
  • Запись WARC без дополнительных зависимостей (с версии 1.14+).
  • Базовый скрапинг для последующей обработки в Python.

Возможности​

  • Рекурсивная загрузка с настраиваемой глубиной и ограничениями.
  • Конвертация ссылок для офлайн-просмотра (--convert-links).
  • Докачка прерванных загрузок (-c).
  • Зеркалирование с удалением лишнего (--mirror).
  • WARC-вывод (--warc-file=archive.warc) — стандарт архивирования.
  • Фильтрация по расширению, домену, регулярному выражению.
  • Поддержка прокси, cookies, HTTP Basic Auth.
  • Возобновление работы после обрыва без потери прогресса.
  • Толерантность к нестабильной сети: автоматические повторы.

Когда использовать​

✅ Подходит для:

  • Простых статических сайтов (HTML + CSS + изображения, без JS).
  • Списка URL из файла или stdin.
  • Быстрого прототипирования — синтаксис минимальный.
  • Сред без Python/Docker (только bash и базовая утилита).
  • WARC-вывода без установки дополнительных библиотек.

❌ Не подходит для:

  • Современных SPA (React, Vue, Angular) — Wget не выполняет JS.
  • Сайтов с авторизацией — поддержка ограничена.
  • Сложных сценариев (ротация, очереди, мониторинг) — используйте Browsertrix, Heritrix.
  • Больших краулингов без чёткого списка URL.

Установка​

Linux​

# Debian/Ubuntu
sudo apt-get install wget

# Fedora
sudo dnf install wget

# Arch
sudo pacman -S wget

macOS​

# Уже установлен, либо:
brew install wget

Windows​

Доступен через:

  • Chocolatey: choco install wget
  • MSYS2 / Cygwin
  • WSL (рекомендуется — нативная среда Linux)

Проверка версии​

wget --version

[!IMPORTANT] Для WARC-вывода нужна версия ≥ 1.14. В большинстве современных дистрибутивов это так по умолчанию, но в старых системах может быть 1.13.x без поддержки WARC.

Использование​

Скачать одну страницу со всеми ресурсами​

wget --page-requisites --adjust-extension --convert-links \
--no-clobber --no-parent \
https://example.com/article/
ФлагЧто делает
--page-requisitesСкачивает CSS, изображения, JS
--adjust-extensionДобавляет .html, .css и т.д. по MIME-типу
--convert-linksПереписывает ссылки для офлайн-просмотра
--no-clobberНе перезаписывает уже скачанные файлы
--no-parentНе поднимается выше указанного пути

Зеркалирование сайта целиком​

wget --mirror \
--convert-links \
--adjust-extension \
--page-requisites \
--no-parent \
--restrict-file-names=windows \
--domains example.com \
--no-clobber \
-P ./archive \
https://example.com/

Запись WARC​

wget --warc-file=archive \
--recursive --level=2 \
--page-requisites --adjust-extension \
--warc-cdx \
--no-parent \
https://example.com/

После выполнения рядом появится archive.warc.gz и archive.cdx (CDX-индекс).

Скачивание списка URL из файла​

# urls.txt: один URL на строку
wget --input-file=urls.txt \
--directory-prefix=./archive \
--wait=1 --random-wait

Докачка после обрыва​

wget --continue --timestamping --no-clobber \
--directory-prefix=./archive \
--input-file=urls.txt

Ограничение по типу файлов​

# Только HTML и CSS
wget --recursive --level=3 \
--accept='*.html,*.css' \
--reject='*.jpg,*.png,*.gif' \
https://example.com/

Конфигурация​

.wgetrc (домашний каталог)​

# User agent (помогает избежать блокировок)
user_agent = Mozilla/5.0 (compatible; ArchiveBot/1.0; +https://example.com/bot)

# Задержка между запросами
wait = 1
random_wait = on

# Таймауты
connect_timeout = 30
read_timeout = 60

# Повторы
tries = 5
retry_connrefused = on

Переменные окружения​

# Прокси
export http_proxy=http://proxy:8080
export https_proxy=http://proxy:8080

# Cookies
export WGETRC=/path/to/wgetrc

Сравнение с другими инструментами​

ИнструментWARCJSСложностьЛучший для
Wget✅ (1.14+)❌Очень низкаяБыстрые разовые загрузки
Wpull✅⚠️НизкаяWARC + HTTP/2 + плагины
HTTrack⚠️ через конвертацию❌НизкаяGUI, офлайн-копия
Heritrix✅❌ВысокаяБольшие проекты архивирования
Browsertrix✅ WACZ✅СредняяСовременные сайты с JS
SingleFile❌⚠️НизкаяОдна страница в HTML

Когда Wget лучше всех​

  • Нужно максимально быстро начать без изучения сложного инструмента.
  • Целевой сайт — простая статика (документация, блог на старом CMS).
  • Нет Python/Docker в окружении.
  • Нужен WARC без установки дополнительных пакетов.

Когда лучше использовать Wpull или Heritrix​

  • Нужна HTTP/2 (Wget ≤ 1.19 не поддерживает нативно).
  • Требуются Python-плагины для кастомной логики.
  • Архивирование сложного и большого проекта.

Best practices​

1. Всегда ставьте осмысленный User-Agent​

wget --user-agent="Ruarxive/1.0 (https://ruarxive.org)" \
https://example.com/

Это помогает администраторам сайта понять, кто и зачем скачивает.

2. Используйте задержки для вежливого краулинга​

wget --wait=1 --random-wait --recursive --level=2 https://example.com/

--random-wait добавляет случайный разброс 0.5–1.5× от базовой задержки — выглядит естественнее и не нагружает сервер.

3. Ограничивайте домен​

wget --span-hosts --domains=example.com,cdn.example.com https://example.com/

Не даёт кроулеру уйти на чужие домены (CDN можно разрешить явно).

4. Сохраняйте логи​

wget --output-file=wget.log --append-output=wget.log ...

5. Для регулярных сборов — cron​

# Ежедневно в 3:00 — собрать список URL с логированием
0 3 * * * cd /opt/collector && \
wget --input-file=urls.txt \
--directory-prefix=$(date +%F) \
--wait=2 --random-wait \
--warc-file=$(date +%F)/archive \
>> /var/log/wget-collector.log 2>&1

6. Не забывайте о robots.txt​

Wget поддерживает --robots=user-agent, но не делает это по умолчанию. Для вежливого краулинга — добавьте вручную:

wget --execute robots=on https://example.com/

Ограничения​

  • Не выполняет JavaScript — динамический контент не сохранится.
  • Однопоточный по умолчанию (есть --max-connection-per-server=8, но это всё равно не Browsertrix).
  • Нет HTTP/2 в большинстве сборок.
  • Плохо работает со сложной авторизацией (нет полноценного браузерного движка).
  • WARC-вывод ограничен — нет CDXJ, нет ZIM, нет deduplication на лету.
  • Большие проекты (>100k URL) лучше отдавать Heritrix или Brozzler.

Ресурсы​

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