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

Использование утилиты wget: установка и основные команды

Описание утилиты

wget — это бесплатная утилита командой строки для неинтерактивной загрузки файлов из интернета. Поддерживает протоколы HTTP, HTTPS и FTP, а также получение файлов через HTTP-прокси.

wget неинтерактивен, что означает, что он может работать в фоновом режиме, пока пользователь не вошел в систему, что позволяет начать загрузку и отключиться от системы, позволив wget завершить работу. В отличие от него, большинство веб-браузеров требуют постоянного взаимодействия с пользователем, что затрудняет передачу большого объема данных.

wget может переходить по ссылкам на страницах HTML и XHTML и создавать локальные версии удаленных сайтов, полностью воссоздавая структуру каталогов исходного сайта, что иногда называют "рекурсивной загрузкой". При этом wget соблюдает стандарт исключения роботов (robots.txt). wget можно проинструктировать преобразовывать ссылки в загруженных HTML-файлах в локальные файлы для автономного просмотра.

wget разработан для обеспечения надежности при медленном или нестабильном сетевом соединении. Если загрузка не удается из-за проблем в сети, он продолжает повторять попытки, пока не будет получен весь файл. Если сервер поддерживает регеттинг, он дает команду серверу продолжить загрузку с того места, на котором она закончилась.

Установка на разные операционные системы

Windows

Утилита устанавливается в систему и работает через командную строку (cmd). Пользователям Windows рекомендуем работать в командной строке через Windows Terminal.

  1. Для установки утилиты рекомендуем сначала установить Chocolatey.

Chocolatey — это менеджер пакетов с интерфейсом командной строки и установщик программного обеспечения Windows на машинном уровне. Chocolately устанавливается через командную строку (cmd.exe) или через PowerShell.exe.

  • Установка в cmd.exe, запись в одну строку:

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

  • Установка в PowerShell.exe, запись в строку:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

Подробная инструкция установки менеджера пакетов Chocolately: https://docs.chocolatey.org/en-us/choco/setup

  1. Завершив установку Chocolately, переходим к установке GNU Wget. Для этого нужно выполнить следующую команду из командной строки или из PowerShell:

choco install wget

Подробное описание утилиты GNU Wget для Chocolately: https://community.chocolatey.org/packages/Wget.

  1. Далее после успешной установки GNU Wget можно переходить в Windows Terminal для работы с утилитой через командную строку.

Linux

Если ваша операционная система — Ubuntu или другой дистрибутив Linux на базе Debian, который использует APT для управления пакетами, вы можете установить wget с помощью команды:

sudo apt-get install wget

Для других операционных систем смотрите документацию вашего пакетного менеджера для получения информации, как найти бинарный пакет wget и установить его.

Также вы можете установить wget из исходного кода с официального сайта GNU: https://www.gnu.org/software/wget.

⚡ Быстрый старт для экстренной архивации

🚨 Сайт могут заблокировать? Используйте эти готовые команды для немедленной архивации.

Сценарий 1: Сохранить весь сайт максимально быстро

wget --mirror --convert-links --adjust-extension \
--page-requisites --wait=0.5 --limit-rate=200k \
--no-parent https://site-to-save.com

Что делает:

  • --mirror - зеркалирование всего сайта
  • --convert-links - конвертирует ссылки для офлайн-просмотра
  • --adjust-extension - добавляет .html к файлам
  • --page-requisites - скачивает CSS, изображения, JS
  • --wait=0.5 - пауза 0.5 сек между запросами (быстро, но вежливо)
  • --limit-rate=200k - ограничение скорости (чтобы не перегрузить сервер)
  • --no-parent - не выходить за пределы указанной директории

⏱️ Время: Зависит от размера сайта, ~10-100+ минут


Сценарий 2: Сохранить только HTML (без медиа) - очень быстро

wget --mirror --convert-links --adjust-extension \
--no-parent --reject jpg,jpeg,png,gif,mp4,mp3,pdf \
https://site-to-save.com

Когда использовать: Нужен только текстовый контент, медиа не критично

⏱️ Время: В 5-10 раз быстрее полной архивации


Сценарий 3: Архивация с максимальным качеством (медленно)

wget --recursive --no-clobber --page-requisites \
--html-extension --convert-links --restrict-file-names=windows \
--domains website.org --wait=2 --random-wait \
--user-agent="Mozilla/5.0" --no-parent www.website.org/

Когда использовать: Есть время (часы), нужна полная копия

Дополнительно:

  • --wait=2 --random-wait - случайная пауза 1-3 сек (вежливо к серверу)
  • --user-agent - притворяемся обычным браузером

Сценарий 4: Продолжить прерванную загрузку

wget --continue --mirror --convert-links \
https://site-to-save.com

Когда использовать: Архивация прервалась (интернет, отключили компьютер)


Сценарий 5: Ограничить глубину и количество

wget --recursive --level=3 --quota=500m \
--no-parent https://site-to-save.com

Параметры:

  • --level=3 - только 3 уровня вглубь от стартовой страницы
  • --quota=500m - остановиться после скачивания 500 МБ

Когда использовать: Сайт огромный, нужна только часть


Troubleshooting: частые проблемы

Проблема: "403 Forbidden" или блокировка

Решение: Добавьте user-agent браузера

wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
--mirror https://site-to-save.com

Проблема: Скачивает слишком много (весь интернет)

Решение: Ограничьте домены и глубину

wget --mirror --domains=site-to-save.com --level=5 \
--no-parent https://site-to-save.com

Проблема: Не скачивает изображения/CSS

Решение: Добавьте --page-requisites

wget --mirror --page-requisites https://site-to-save.com

Проблема: Зависает на больших файлах

Решение: Исключите большие файлы

wget --mirror --reject-regex='\.(mp4|avi|zip|tar.gz)$' \
https://site-to-save.com

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

Если wget кажется сложным или нужна альтернатива:


Опции и команды

wget: Options and commands

Синтакс

wget [URL]... [option]..

Самый простой способ использования wget — указать ему местоположение файла для загрузки по HTTP. Например, чтобы загрузить файл с сайта http://website.com/files/file.zip, выполните следующую команду:

wget http://website.com/files/file.zip

Так wget загрузит файл в рабочий каталог.

Существует множество опций, которые позволяют использовать wget различными способами и для различных целей. Они описаны ниже.

Основные параметры запуска

  • -V, --version — выводит версию wget.
  • -h, --help — выводит справочное сообщение, описывающее все опции командной строки wget.
  • -b, --background — переходит в фоновый режим сразу после запуска. Если через -o не указан выходной файл, вывод перенаправляется в wget-log.
  • -e, --execute — выполнить команду так, как если бы она была частью файла .wgetrc. Вызванная таким образом команда выполняется после команд в .wgetrc и имеет над ними приоритет.

Опции протоколирования и входного файла

ОпцииОписание
-o logfile, --output-file=logfileЗаписывать все сообщения в logfile. Обычно сообщения выводятся в стандартную ошибку.
-a logfile, --append-output=logfileДобавление в logfile. Эта опция аналогична опции -o, только она добавляет сообщение в logfile вместо того, чтобы перезаписывать старый файл журнала. Если logfile не существует, создается новый файл.
-d, --debugВключает вывод отладки, то есть различной информации, важной для разработчиков wget, если он работает неправильно. Возможно, вы скомпилировали wget без поддержки отладки, в этом случае -d не работает. Обратите внимание, что компиляция с поддержкой отладки всегда безопасна. wget, скомпилированный с поддержкой отладки, не выводит никакой отладочной информации, если не запросить -d.
-q, --quietВыключить вывод wget.
-v, --verboseВключить подробный вывод, со всеми доступными данными. По умолчанию вывод осуществляется в режиме verbose.
-nv, --non-verboseВыключить вывод данных в режиме --verbose. Выключить подробный вывод без полной тишины (для этого используйте -q), что означает, что сообщения об ошибках и основная информация все равно будут выводиться.
-i file, --input-file=fileЧтение URL из локального или внешнего файла. Если в качестве файла указано "-", URL-адреса считываются из стандартного ввода. (Используйте "./-" для чтения из файла с буквальным именем "-"). Если используется эта функция, то в командной строке не должно быть URL-адресов. Если URL есть и в командной строке, и во входном файле, то первыми будут получены те, которые находятся в командной строке. Если параметр --force-html не указан, то файл должен состоять из серии URL, по одному в строке. Однако если вы укажете --force-html, то документ будет рассматриваться как HTML. В этом случае могут возникнуть проблемы с относительными ссылками, которые можно решить либо добавлением <base href="url"> в документы, либо указанием --base=url в командной строке. Если файл является внешним, то документ автоматически обрабатывается как HTML, если тип контента "text/html". Кроме того, местоположение файла неявно используется в качестве базового href, если оно не было указано.
-F, --force-htmlКогда входные данные считываются из файла, принудительно обработайте их как HTML-файл. Это позволит вам получать относительные ссылки из существующих HTML-файлов на локальном диске, добавляя <base href="url"> в HTML или используя опцию командной строки --base.
-B URL, --base=URLРешает относительные ссылки, используя URL в качестве точки отсчета, при чтении ссылок из HTML файла, указанного с помощью опции -i/--input-file (вместе с --force-html, или когда входной файл был получен удаленно с сервера, описывающего HTML). Эта опция эквивалентна наличию тега "BASE" во входном файле HTML, с URL в качестве значения атрибута "href". Например, если вы укажете http://foo/bar/a.html для URL, и wget прочитает ../baz/b.html из входного файла, он будет преобразован в http://foo/baz/b.html.
--config=FILEУкажите местоположение загрузочного файла, который вы хотите использовать.

Опции загрузки

Опции протоколирования и входного файла

Параметры каталога

Параметры HTTP

Параметры HTTPS (SSL/TLS)

Параметры FTP

Опции рекурсивного получения (Recursive retrieval options)

Рекурсивные опции принятия/отклонения (Recursive accept/reject)

Альтернативы и расширения

Wget-lua

Wget-lua — расширенная версия Wget с поддержкой Lua скриптов.

  • Преимущества:

    • Кастомизация через Lua
    • Сложная логика обработки
    • Расширенные возможности фильтрации
  • Использование: Когда нужна сложная логика обработки, которую сложно реализовать через опции командной строки

Wpull

Wpull — альтернатива/замена Wget, разработанная Archive Team.

  • Преимущества перед Wget:

    • Лучшая поддержка современных веб-стандартов
    • Более гибкая настройка
    • Поддержка Python плагинов
    • Лучшая обработка JavaScript сайтов
  • Установка:

pip install wpull
  • Использование:
wpull --recursive --level=3 https://example.com
  • Когда использовать: Для сложных сайтов, где Wget не справляется

Сравнение инструментов

ИнструментСкоростьJavaScriptСложностьРекомендация
WgetВысокаяНетНизкаяДля статических сайтов
Wget-luaВысокаяНетСредняяДля кастомизации
WpullСредняяОграниченнаяСредняяДля сложных сайтов
BrowsertrixНизкаяПолнаяСредняяДля JavaScript-heavy сайтов

Массовая архивация с Wget

Архивация списка URL

# Создайте файл urls.txt с URL, по одному на строку
wget --input-file=urls.txt \
--mirror --convert-links \
--page-requisites \
--wait=1 \
--random-wait

Параллельная архивация

# Используйте GNU parallel для параллельной обработки
cat urls.txt | parallel -j 4 wget --mirror --convert-links {}

Архивация с логированием

wget --mirror --convert-links \
--output-file=archive.log \
--append-output=archive.log \
https://example.com

Примеры загрузки