Skip to content

Всё для WordPress, веб-разработки — и не только

📥 Как скачать целый сайт через Wget на Windows

📥 Как скачать целый сайт через Wget на Windows

Бесплатная утилита командной строки Wget умеет зеркалировать сайты, выкачивать каждую страницу, каждую картинку, каждый CSS-файл и складывать в папку на вашем диске. Звучит как магия, но это чистая инженерия: рекурсивный обход ссылок, конвертация путей в относительные и бережное сохранение структуры. После такого архива сайт открывается локально как живой, просто кликаете по любому .html-файлу.

Проблема в том, что нормальных гайдов под Windows почти нет. Большинство мануалов написаны под Unix, а среднему пользователю Windows нужен готовый .exe, понятные команды и защита от типовых граблей вроде бесконечной рекурсии или битых ссылок. Эту дыру мы и закроем.

💡 Быстрый обзор:

  • Скачайте Wget для Windows и пропишите путь к утилите в системный PATH
  • Откройте командную строку в папке назначения и выполните команду зеркалирования
  • После загрузки поправьте битые ссылки и пути через grepWin, архив готов к просмотру
  • Если рекурсия не нужна, используйте режим с заранее подготовленным списком URL

Зачем вообще скачивать сайт целиком

Интернет не вечен. Сайты закрываются, меняют владельцев, проходят редизайн и теряют старый контент. Сообщество дата-хоардеров на Reddit давно превратило архивирование в культуру, и не зря. Вы не можете предсказать, когда любимый блог исчезнет или ценная документация уедет за пейвол, но можете сохранить её в текущем виде.

Сценарии, от очевидных до неожиданных. Вам предстоит поездка в место без интернета, а под рукой нужен рабочий слепок информационного сайта. Или вы коллекционируете дизайнерские эпохи, вчерашний веб с его табличной версткой и кислотными кнопками уже история. Даже собственный сайт имеет смысл периодически зеркалировать: это не бэкап в классическом смысле (базу данных не восстановите), но статический снимок, который переживет любой крах хостинга.

Одно важное предупреждение: будьте осторожны с тем, что загружаете. Авторское право и конфиденциальность никто не отменял, частное использование сохранённой копии обычно законно, но публикация чужого контента без разрешения может создать проблемы.

Как Wget обходит сайт: механика процесса

Wget стартует с указанного вами URL и рекурсивно идёт по каждой внутренней ссылке, теоретически до бесконечной глубины. Правильно настроенный, он не вырвется в открытый интернет и не начнет качать Google: опция --mirror в паре с --reject-regex держит обход в границах целевого домена. Все внешние ссылки остаются нетронутыми, просто текст с оригинальным URL.

По пути Wget подбирает всё: HTML-страницы, таблицы стилей, скрипты, изображения, шрифты. Затем конвертирует внутренние ссылки в относительные, благодаря этому архив открывается локально и навигация работает как на живом сайте. Внешние ссылки при этом не трогаются и продолжают вести в интернет (если он у вас есть в момент просмотра).

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

Хотя Wget не привязан к какой-либо CMS, с WordPress-сайтами он работает особенно хорошо. Причина проста: стандартные виджеты вроде облака тегов и помесячного архива создают плотную сетку внутренних ссылок, по которой бот проходит как по маслу.

Установка Wget на Windows

Мир Wget исторически вращается вокруг Unix, и Windows-пользователь тут гость. Если вы пойдете на официальный сайт GNU и скачаете исходники, получите пачку .c-файлов, а не готовую программу. Вам нужен готовый бинарник:

  • Зайдите на eternallybored.org/misc/wget, неофициальный, но проверенный годами репозиторий сборок Wget для Windows (актуальная версия 1.21.4)
  • Скачайте zip-архив последней версии и распакуйте в отдельную папку. Установка не требуется, это portable-утилита

Если вы дважды кликнете по wget.exe, мелькнет окно командной строки и сразу закроется. Wget, консольная программа, ей нужен открытый терминал в папке назначения. А чтобы не копировать .exe в каждую папку с будущими архивами, пропишите Wget в системный PATH:

  • Нажмите Windows + R, вставьте и выполните:
1 "C:\Windows\system32\rundll32.exe" sysdm.cpl,EditEnvironmentVariables
  • В секции Переменные среды пользователя найдите переменную Path, нажмите Изменить...
  • Нажмите Создать и укажите полный путь к папке с wget.exe
  • Закройте все диалоги через ОК

Проверка: снова Windows + Rcmd /k "wget -V", вы должны увидеть версию Wget, а не сообщение о том, что команда не распознана.

Окно командной строки с информацией о версии Wget

Ключевые опции Wget: подробный разбор

У большинства опций есть короткие однобуквенные аналоги, но длинные имена осмысленнее и читаются без шпаргалки. Я отобрал настройки, проверенные на практике, вместо чтения 181-страничного руководства GNU Wget вы получаете выжимку с объяснением «зачем» для каждой.

Основные опции

--mirror, включает бесконечную рекурсию. По сути это набор других опций, объединённых под одним флагом. Без него Wget скачает только указанную страницу, а не весь сайт. Именно --mirror делает зеркалирование возможным.

--page-requisites, загружает все связанные ресурсы: CSS, JavaScript, изображения, шрифты. Без этой опции ваш архив будет выглядеть как голая HTML-простыня без стилей и картинок.

--convert-links, после завершения загрузки переписывает ссылки в HTML-файлах так, чтобы они работали локально. Абсолютные URL заменяются на относительные пути. Это то, что позволяет открыть index.html с диска и ходить по страницам как по живому сайту.

--adjust-extension, дописывает расширения файлам, которые пришли без них. Современные сайты часто отдают страницы без .html на конце (человеко-читаемые URL), и без этой опции браузер не поймет, что перед ним HTML-документ. Есть нюанс: если сервер сжимает контент через gzip, Wget может ошибочно дать файлу расширение .gz. От этого страхует следующая опция.

--compression=auto, обрабатывает gzip-сжатие на лету. Без неё SVG-логотип рискует сохраниться как logo.svg.gz и стать бесполезным при локальном просмотре. Опция появилась не во всех сборках, пользователи Unix иногда сталкиваются с её отсутствием. В Windows-сборке с eternallybored.org она есть.

--reject-regex "/search|/rss", запрещает обход URL, содержащих указанные слова. Страницы поиска и RSS-ленты порождают бесконечные цепочки параметров, которые забивают файловую систему именами длиной в несколько экранов. Регулярное выражение здесь, базовый POSIX-синтаксис, не full-PCRE. Будьте внимательны: /search отсечёт не только поисковый мусор, но и легитимную статью с URL вроде yoursite.com/search-for-extraterrestrial-life. При такой коллизии конкретизируйте шаблон.

Дополнительные опции

--no-if-modified-since, отключает проверку заголовка If-Modified-Since. Я включаю этот флаг только когда сервер явно жалуется в логах. Если вы не планируете повторный прогон в ту же папку для подхвата изменений, опция не критична.

--no-check-certificate, пропускает проверку SSL-сертификатов. При зеркалировании вы не вводите пароли и не передаете конфиденциальные данные, поэтому строгая проверка сертификата избыточна. Флаг экономит нервы на сайтах с просроченным или самоподписанным сертификатом.

--user-agent, подменяет User-Agent браузера. Некоторые серверы детектят Wget и блокируют запросы. Спуфинг под обычный Chrome решает проблему:

1--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

Если блокировка происходит по IP, потребуется VPN и, возможно, распределение загрузки между несколькими машинами. В этом случае также пригодятся опции --wait и --random-wait для замедления темпа запросов.

--restrict-file-names=windows, ограничивает символы в именах файлов безопасным для Windows набором. В Unix специальные символы в именах разрешены, и архив, скачанный на Linux-машине, может оказаться нечитаемым на Windows. Если вы работаете в Windows, флаг применяется автоматически; если качаете под Unix, но смотреть будете на Windows, укажите явно.

--backup-converted, сохраняет оригинальную копию каждого файла, в который Wget вносил изменения при конвертации ссылок. Удваивает размер архива. Я не использую, но упоминаю на случай, если вам критичен посекундный бэкап каждой правки.

Открываем командную строку в нужной папке

Wget запускается из терминала, и терминал должен смотреть в ту папку, куда вы планируете сложить архив. Способов несколько, от стандартного до продвинутых:

  • Windows + Rcmd → Enter, затем cd /d C:\путь\к\архиву (флаг /d позволяет переключаться между дисками)
  • Если путь содержит пробелы, оберните его в кавычки: cd /d "C:\My Archive"

Быстрее, одной строкой: Windows + Rcmd /k "cd /d C:\путь\к\архиву". Флаг /k оставляет окно открытым после выполнения команды.

Если вы пользуетесь Total Commander: Команды → Запустить командную оболочку открывает терминал сразу в текущей папке. Для Проводника есть твик реестра, добавляющий пункт «Открыть окно команд здесь» в контекстное меню.

Запускаем скачивание: полная команда

Собираем всё вместе. Вот команда, которую я использую для зеркалирования среднестатистического сайта:

1wget --mirror --page-requisites --convert-links --adjust-extension --compression=auto --reject-regex "/search|/rss" --no-if-modified-since --no-check-certificate --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" https://example.com

То же самое можно записать короткими флагами: wget -mkp -E --compression=auto -R "/search|/rss" .... Но длинные имена делают команду самодокументированной. Через месяц вы откроете свой .bat-файл и сразу поймете, что каждая опция делает.

Подставьте вместо https://example.com реальный URL целевого сайта и нажмите Enter. Процесс может занять от пары минут до нескольких часов, зависит от размера сайта и ограничений сервера.

Постобработка: grepWin и типовые правки

После загрузки архив почти всегда требует доводки. Утилита grepWin, швейцарский нож для пакетного поиска и замены в текстовых файлах под Windows. Вот пара типовых сценариев:

  • Удаление мусорных тегов в HTML. Некоторые движки генерируют пустые <source>-теги, мешающие рендерингу. В grepWin выберите поиск по регулярному выражению <source media=".*">, укажите маску *.html и замените на пустую строку.

  • Правка путей к ресурсам. Если какие-то пути остались абсолютными, grepWin найдёт их по паттерну вроде src="https://example.com/ и заменит на локальный эквивалент.

Окно утилиты grepWin с настройками поиска и замены

Это лишь затравка, каждый сайт со своими сюрпризами. Сильные стороны grepWin: мгновенный предпросмотр перед заменой, работа с папками рекурсивно и поддержка регулярных выражений. Но когда объём правок выходит за рамки «найти и заменить», Unix-инструментарий вроде sed и grep даёт куда больше гибкости. Windows-версии доступны через WSL или Cygwin.

Альтернатива: скачивание по списку URL без рекурсии

Рекурсивный обход подходит не всегда. Если сайт огромный, а вам нужна лишь конкретная подборка страниц, проще подготовить список URL и скормить его Wget через --input-file:

1wget --input-file=links.txt --page-requisites --convert-links --adjust-extension --compression=auto --no-if-modified-since --no-check-certificate --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

Обратите внимание: --mirror и --reject-regex убраны, рекурсия не нужна, а список URL вы контролируете сами.

Как собрать такой список? Один из способов, расширенный поиск Google: запрос site:yoursite.com "ключевая фраза" вернёт проиндексированные страницы по теме. Настройте выдачу на 100 результатов, вооружитесь расширением Copy Links для Chrome, и копируйте URL пачками в links.txt.

Видео: зеркалирование сайта за 5 минут

Чтобы увидеть весь процесс вживую, от установки до готового архива, посмотрите этот скринкаст:

Автор проходит путь с нуля: скачивание Wget, настройка опций, запуск команды и открытие результата в браузере. Рекомендую перед первым собственным прогоном, 7 минут экранного времени сэкономят час отладки.

⁉️🤔 Частые вопросы

Можно ли восстановить сайт из Wget-архива?

Wget-архив, это статический слепок: HTML, CSS, JS и медиафайлы. Ни базы данных, ни серверной логики в нём нет. Вы не сможете залить такую копию на хостинг и оживить WordPress с комментариями и админкой. Это инструмент сохранения контента, а не резервного копирования. Для полноценного бэкапа WordPress используйте плагины вроде UpdraftPlus или Duplicator, они сохраняют и файлы, и базу данных.

Wget скачивает слишком много лишнего. Как ограничить?

Комбинация --reject-regex (фильтр URL по шаблону) и --reject (фильтр по расширениям файлов) решает проблему. Например, добавив --reject=jpg,png,gif, вы откажетесь от всех изображений. Или --reject-regex "/tag/|/category/|/page/", отсечёте архивы тегов, категорий и пагинацию. Главное, тестируйте на небольшом подмножестве страниц перед полным прогоном.

Сервер заблокировал мой IP после начала скачивания. Что делать?

Wget может быть детектирован по User-Agent или темпу запросов. Три уровня защиты: спуфинг User-Agent через --user-agent (я показал выше), замедление через --wait=1 --random-wait (пауза 1 секунда плюс случайная добавка), и смена IP через VPN. Для крупных сайтов можно разбить загрузку: подготовить несколько списков URL и запустить Wget параллельно с разных машин или VPN-точек.

Чем Wget лучше браузерных расширений для сохранения страниц?

Расширения вроде SingleFile сохраняют одну страницу. Wget зеркалирует сайт целиком, с переходами, пагинацией и всеми внутренними ссылками. Для блога из 500 статей браузерное расширение потребует 500 ручных кликов. Wget делает это одной командой. Кроме того, браузерное расширение не конвертирует ссылки для локальной навигации, вы получите 500 изолированных файлов без связи друг с другом.

Архив весит гигабайты. Как сжать и хранить?

Папка из тысяч мелких файлов неудобна для переноса, бэкапа и антивирусной проверки. Я упаковываю такие архивы в RAR методом «Store» или «Fastest», скорость важнее степени сжатия, потому что HTML и медиа уже сжаты. Обязательно добавляю запись восстановления (recovery record), это спасает при битых секторах на диске или ошибках передачи. Результат: один файл, который копируется за секунды и не рассыпается при хранении.

Скачивать или не скачивать: когда Wget того стоит

Wget, не на каждый день. Это инструмент для конкретной задачи: получить полную статическую копию сайта, который вам дорог или полезен. Когда есть риск, что ресурс исчезнет, доставайте Wget. Когда предстоит работа в офлайне, доставайте Wget. Когда нужно сохранить «цифровую окаменелость» эпохи Geocities, тем более.

Для разовых страниц хватит браузерного расширения. Для полноценного бэкапа WordPress, берите плагин резервного копирования. Но когда нужен именно автономный навигабельный архив целого сайта, альтернатив у Wget практически нет, и теперь вы знаете, как запустить его на Windows без боли.

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