Wget: как скачать всю HTTP-директорию рекурсивно одной командой
Для кого эта статья:
- Специалисты в области веб-разработки и системного администрирования
- Люди, интересующиеся автоматизацией загрузки веб-контента
Студенты и начинающие разработчики, желающие улучшить свои технические навыки
Если вам нужно скачать целую веб-директорию, обычный браузер превращается в неповоротливого динозавра. Представьте: сотни файлов, вложенные каталоги, а вы кликаете мышкой на каждую ссылку как в каменном веке. Wget — это швейцарский нож для таких задач, позволяющий одной командой получить всё содержимое HTTP-директории на ваш компьютер. Давайте разберёмся, как использовать эту мощную утилиту командной строки для клонирования веб-контента любой сложности и масштаба. 🚀
Осваиваете wget для скачивания веб-контента? Подумайте о следующем шаге в вашей технической карьере. Обучение веб-разработке от Skypro поможет не просто скачивать сайты, а создавать их с нуля. Вы освоите всё — от frontend до backend, научитесь работать с API и автоматизацией. Превратите технический интерес в востребованную профессию с зарплатой от 100 000 рублей. Программа создана практиками для практиков — никакой лишней теории.
Основы wget: параметры для скачивания HTTP-директорий
Wget — консольная утилита, доступная на Unix-подобных системах, Windows и macOS, ориентированная на надёжное скачивание даже при нестабильном соединении. Прежде чем погружаться в сложные сценарии, необходимо освоить базовые параметры команды для работы с HTTP-директориями.
Стандартный синтаксис команды выглядит так:
wget [опции] [URL]
Для скачивания одиночного файла достаточно указать его URL:
wget https://example.com/file.zip
Однако реальная мощь wget проявляется при работе с целыми директориями. Вот основные параметры, которые превращают wget в инструмент для клонирования веб-каталогов:
- -r (--recursive) — включает рекурсивное скачивание, позволяя wget следовать по ссылкам и скачивать содержимое поддиректорий
- -np (--no-parent) — запрещает переход к родительским директориям
- -nd (--no-directories) — сохраняет все файлы в одну директорию, игнорируя структуру оригинального сайта
- -P (--directory-prefix) — указывает директорию назначения для скачанных файлов
- -A (--accept) — фильтр для скачивания только определённых типов файлов
- -R (--reject) — исключает указанные типы файлов из скачивания
Для базового скачивания HTTP-директории используйте:
wget -r -np https://example.com/directory/
Эта команда рекурсивно скачает все файлы из указанной директории, не поднимаясь выше в иерархии сайта.
| Параметр | Описание | Пример использования |
|---|---|---|
| -r | Рекурсивное скачивание | wget -r https://example.com/files/ |
| -np | Запрет перехода к родительским директориям | wget -r -np https://example.com/files/ |
| -nd | Сохранение в одну директорию | wget -r -np -nd https://example.com/files/ |
| -P | Указание директории назначения | wget -P /downloads/ https://example.com/file.zip |
| -A | Фильтр принимаемых файлов | wget -r -np -A "*.pdf" https://example.com/docs/ |
Алексей Мирный, системный администратор
Недавно столкнулся с задачей перенести документацию из старой CMS в новую. Более 5000 PDF-файлов, разбросанных по десяткам подкаталогов. Вручную скачать это было бы кошмаром. Спасла команда:
wget -r -np -nd -P ./docs -A "*.pdf,*.docx" https://oldcms.company.com/documentation/За 20 минут получил все нужные файлы в одной папке. Коллеги были уверены, что я потрачу на задачу весь день. Когда я сдал работу через полчаса, все были в шоке. Теперь wget — мой первый выбор для любых задач массового скачивания.

Рекурсивное скачивание сайтов: настройка глубины и фильтров
Рекурсивное скачивание — ключевая функция wget для работы с HTTP-директориями. При этом важно контролировать процесс, чтобы не скачать весь интернет или не застрять на сайте навечно. 🕸️
Управлять глубиной рекурсии можно с помощью параметра -l (--level):
wget -r -l 2 -np https://example.com/docs/
Эта команда скачает файлы из указанной директории и перейдёт не более чем на 2 уровня вложенности по ссылкам. По умолчанию wget устанавливает глубину 5, что может быть избыточно для небольших задач.
Для эффективной работы с большими сайтами критически важно применять фильтры, ограничивающие типы скачиваемых файлов:
- Скачивание только изображений:
wget -r -np -A "*.jpg,*.jpeg,*.png,*.gif" https://example.com/images/ - Исключение медиафайлов:
wget -r -np -R "*.mp3,*.mp4,*.avi" https://example.com/blog/ - Фокус на документах:
wget -r -np -A "*.pdf,*.doc,*.docx,*.xls,*.xlsx" https://example.com/resources/
Параметр --domains позволяет ограничить скачивание определёнными доменами:
wget -r -np --domains=example.com,static.example.com https://example.com/
Для более точного контроля над процессом используйте регулярные выражения с параметрами --include-directories и --exclude-directories:
wget -r -np --include-directories=/docs,/manuals --exclude-directories=/docs/obsolete https://example.com/
При работе с сайтами, использующими URL-адреса с параметрами запросов, полезен флаг --ignore-tags, который позволяет избежать скачивания одного и того же контента по разным URL:
wget -r -np --ignore-tags=a:href https://example.com/products/
Расширенные команды wget для сохранения структуры каталогов
Сохранение исходной структуры каталогов часто критически важно при работе с большими проектами. Wget предлагает несколько опций для тонкой настройки организации скачанных файлов на вашей машине.
По умолчанию wget сохраняет иерархию каталогов, начиная с доменного имени. Например, при скачивании https://example.com/dir1/dir2/file.txt файл будет сохранён как example.com/dir1/dir2/file.txt. Чтобы изменить это поведение, используйте параметр --cut-dirs:
wget -r -np --cut-dirs=2 https://example.com/dir1/dir2/dir3/
Эта команда обрежет первые два каталога из пути, сохраняя файлы начиная с dir3/. Значение параметра указывает количество отсекаемых уровней.
Для полного сохранения структуры с включением доменного имени используйте опцию -nH (--no-host-directories):
wget -r -np -nH https://example.com/project/docs/
Если вам нужно скачать файлы без создания подкаталогов, но с сохранением их оригинальных имён, комбинируйте параметры -nd и -P:
wget -r -np -nd -P ./downloaded_files https://example.com/resources/
Для более сложных сценариев wget позволяет преобразовывать имена файлов:
- --restrict-file-names=windows — адаптирует имена файлов для Windows, заменяя недопустимые символы
- --restrict-file-names=lowercase — преобразует все имена файлов в нижний регистр
- --restrict-file-names=ascii — удаляет не-ASCII символы из имен файлов
Пример использования:
wget -r -np --restrict-file-names=windows,lowercase https://example.com/data/
Марина Светлова, веб-разработчик
Работала над проектом миграции контент-сайта с более чем 5000 статей и 10000 изображений. Клиент хотел сохранить точное зеркало своего сайта перед переездом на новую платформу.
Использовала следующую команду:
wget -r -np -k -p -nH --cut-dirs=1 --restrict-file-names=windows -P ./site_backup https://clientsite.com/content/Параметр -k заменил ссылки на локальные пути, -p скачал все необходимые ресурсы для отображения страниц. Структура сохранилась идеально, а перенос контента прошел без единой ошибки. Клиент был поражен точностью копии — даже поиск по локальным файлам работал как на оригинальном сайте!
Без wget эту задачу пришлось бы выполнять неделями. С правильно настроенной командой все заняло одну ночь.
Оптимизация скачивания: управление скоростью и перезапуском
При скачивании больших объемов данных или при работе с нестабильным соединением, оптимизация процесса становится критически важной. Wget предоставляет множество инструментов для контроля скорости, возобновления прерванных загрузок и минимизации нагрузки на сервер. 🔄
Для ограничения скорости скачивания используйте параметр --limit-rate:
wget -r -np --limit-rate=500k https://example.com/large-directory/
Эта команда ограничит скорость загрузки до 500 килобайт в секунду, что может быть полезно для предотвращения перегрузки сети или для обхода ограничений со стороны сервера.
Одно из главных преимуществ wget — способность возобновлять прерванные скачивания. Это реализуется через опцию -c (--continue):
wget -c https://example.com/large-file.iso
При скачивании множества файлов из директории, возможность перезапуска становится ещё более ценной:
wget -r -np -c https://example.com/archives/
Чтобы не перегружать сервер, можно использовать задержки между запросами с помощью --wait и --random-wait:
wget -r -np --wait=2 --random-wait https://example.com/gallery/
Эта команда будет делать паузу в среднем 2 секунды между запросами, с небольшими случайными отклонениями (при включенном --random-wait), что помогает избежать блокировки IP-адреса за подозрительную активность.
Для длительных скачиваний полезен параметр --retry-connrefused, который продолжит попытки загрузки даже если сервер временно отказывается принимать соединения:
wget -r -np -c --retry-connrefused https://example.com/backup/
| Проблема | Решение с wget | Пример команды |
|---|---|---|
| Нестабильное соединение | Использование -c для продолжения скачивания | wget -r -np -c https://example.com/files/ |
| Ограничения пропускной способности | Ограничение скорости скачивания | wget --limit-rate=300k -r -np https://example.com/ |
| Защита от бан-листов | Добавление задержек между запросами | wget --wait=3 --random-wait -r -np https://example.com/ |
| Нежелательное повторное скачивание | Пропуск существующих файлов | wget -nc -r -np https://example.com/ |
| Временные сбои сервера | Настройка количества повторных попыток | wget --tries=10 --retry-connrefused -r -np https://example.com/ |
Для фоновых операций, особенно на серверах, полезен параметр -b (--background), который переводит процесс скачивания в фоновый режим:
wget -b -r -np -c https://example.com/data/ -o download.log
Опция -o направляет вывод в указанный файл журнала, что позволяет позже проверить статус операции.
Практические сценарии архивирования сайтов через wget
Создание полнофункциональных локальных копий веб-сайтов — это искусство, требующее правильного набора параметров wget. Рассмотрим наиболее востребованные сценарии архивирования с готовыми решениями. 📚
1. Создание полной зеркальной копии сайта с сохранением ссылок
Для создания функционирующей офлайн-копии сайта используйте комбинацию параметров -k (конвертация ссылок в локальные), -p (скачивание необходимых ресурсов) и -E (добавление расширения .html к файлам без расширения):
wget -r -np -k -p -E https://example.com/
2. Архивирование технической документации
Для скачивания документации часто требуется выборочное получение определённых типов файлов:
wget -r -np -nd -P ./docs -A "*.html,*.pdf,*.doc" -H -D docs.example.com,cdn.example.com https://docs.example.com/manuals/
Здесь -H разрешает переходить на другие хосты, а -D ограничивает список доменов для скачивания.
3. Сбор данных для анализа
Для датамайнинга и веб-скрапинга можно использовать следующую конфигурацию:
wget -r -l 3 -np -nd -A "*.csv,*.json,*.xml" --reject-regex ".*\?(src|ref)=.*" https://data.example.com/api/
Параметр --reject-regex позволяет избежать циклических ссылок с параметрами запросов.
4. Быстрое создание бэкапа перед миграцией
Для сохранения точной копии сайта перед масштабными изменениями:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --wait=1 --limit-rate=200k https://mysite.com/
Опция --mirror эквивалентна -r -N -l inf --no-remove-listing.
5. Создание автономной копии wiki-сайта
Wiki-сайты имеют особую структуру и требуют специального подхода:
wget -r -np -k -p -E --restrict-file-names=windows -X /Talk:,/User:,/Special: https://wiki.example.org/
Параметр -X (--exclude-directories) позволяет исключить служебные разделы wiki.
Комплексные решения для специфических задач:
- Скачивание сайта с аутентификацией:
wget --user=username --password=password -r -np -k https://secure.example.com/ - Архивирование динамического контента:
wget --adjust-extension --span-hosts --convert-links --page-requisites --no-parent https://spa.example.com/ - Периодическое обновление локальной копии:
wget -N -r -np https://blog.example.com/(параметр -N скачивает только новые или изменённые файлы) - Обход защиты от роботов:
wget -r -np --user-agent="Mozilla/5.0" --wait=5 --random-wait https://protected.example.com/
Wget — уникальный инструмент, который превращает сложные задачи скачивания веб-контента в простые однострочные команды. Рекурсивное скачивание HTTP-директорий становится надёжным и управляемым процессом, если вы знаете правильное сочетание параметров. Начните с простых команд, постепенно добавляя опции для тонкой настройки, и вскоре вы сможете создавать идеальные локальные копии любых веб-ресурсов — от небольших документаций до комплексных многостраничных сайтов. Помните: мастерство приходит с практикой, а wget прощает ошибки и всегда готов к перезапуску прерванных операций.