Wget не скачивает файл целиком

Обновлено: 30.06.2024

wget — это утилита, которая предназначена для загрузки файлов по сети (из интернета). Я расскажу, как использовать wget, чтобы скачивать сайты из интернета целиком и затем просматривать их в автономном режиме.

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

Чтобы скачать сайт целиком с помощью wget нужно выполнить команду:

Рассмотрим используемые параметры:

-r указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
-k используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
-p указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
-l определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
-E добавлять к загруженным файлам расширение .html.
-nc при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.

Мы рассмотрели лишь одно из возможных применений утилиты wget. На самом деле область применения wget значительно шире и wget обладает большим числом дополнительных параметров. За более подробной информацией обращайтесь к руководству, выполнив в командной строке: man wget.

Пришедшая из мира Linux, свободно распространяемая утилита Wget позволяет скачивать как отдельные файлы из интернета, так и сайты целиком, следуя по ссылкам на веб-страницах.

Чтобы получить подсказку по параметрам WGet наберите команду man wget в Linux или wget.exe --help в Windows.

Если предполагается загрузка с сайта какого-либо одного каталога (со всеми вложенными в него папками), то логичнее будет включить в командную строку параметр -np. Он не позволит утилите при поиске файлов подниматься по иерархии каталогов выше указанной директории:

Если загрузка данных была случайно прервана, то для возобновления закачки с места останова, необходимо в команду добавить ключ -с:

По умолчанию всё скаченное сохраняется в рабочей директории утилиты. Определить другое месторасположение копируемых файлов поможет параметр -P:

Наконец, если сетевые настройки вашей сети предполагают использование прокси-сервера, то его настройки необходимо сообщить программе. См. Конфигурирование WGET

Загрузка всех URL, указанных в файле FILE:

Скачивание файла в указанный каталог (-P):

Скачивание в фоновом режиме (-b):

Продолжить (-c continue) загрузку ранее не полностью загруженного файла:

luzer/my-archive/ и всех его подкаталогов, при этом не поднимаясь по иерархии каталогов выше:

Для того, чтобы во всех скачанных страницах ссылки преобразовывались в относительные для локального просмотра, необходимо использовать ключ -k:

Также поддерживается идентификация на сервере:

Скопировать весь сайт целиком:

Например, не загружать zip-архивы:

Залогиниться и скачать файлик ключа

Внимание! Регистр параметров WGet различен!

Базовые ключи запуска

-V
--version
Отображает версию Wget.

-h
--help
Выводит помощь с описанием всех ключей командной строки Wget.

-b
--background
Переход в фоновый режим сразу после запуска. Если выходной файл не задан -o, выход перенаправляется в wget-log.

-e command
--execute command
Выполнить command, как если бы она была частью файла .wgetrc. Команда, запущенная таким образом, будет выполнена после команд в .wgetrc, получая приоритет над ними. Для задания более чем одной команды wgetrc используйте несколько ключей -e.

Протоколирование и ключи входного файла

-a logfile
--append-output=logfile
Дописывать в logfile. То же, что -o, только logfile не перезаписывается, а дописывается. Если logfile не существует, будет создан новый файл.

-d
--debug
Включает вывод отладочной информации, т.е. различной информации, полезной для разработчиков Wget при некорректной работе. Системный администратор мог выбрать сборку Wget без поддержки отладки, в этом случае -d работать не будет. Помните, что сборка с поддержкой отладки всегда безопасна - Wget не будет выводить отладочной информации, пока она явно не затребована через -d.

-q
--quiet
Выключает вывод Wget.

-v
--verbose
Включает подробный вывод со всей возможной информацией. Задано по умолчанию.

-i file
--input-file=file
Читать URL из входного файла file, в этом случае URL не обязательно указывать в командной строке. Если адреса URL указаны в командной строке и во входном файле, первыми будут запрошены адреса из командной строки. Файл не должен (но может) быть документом HTML - достаточно последовательного списка адресов URL. Однако, при указании --force-html входной файл будет считаться html. В этом случае могут возникнуть проблемы с относительными ссылками, которые можно решить указанием <base href="url"> внутри входного файла или --base=url в командной строке.

-F
--force-html
При чтении списка адресов из файла устанавливает формат файла как HTML. Это позволяет организовать закачку по относительным ссылкам в локальном HTML-файле при указании <base href="url"> внутри входного файла или --base=url в командной строке.

-B URL
--base=URL
Используется совместно c -F для добавления URL к началу относительных ссылок во входном файле, заданном через -i.

Ключи скачивания

--bind-address=ADDRESS
При открытии клиентских TCP/IP соединений bind() на ADDRESS локальной машины. ADDRESS может указываться в виде имени хоста или IP-адреса. Этот ключ может быть полезен, если машине выделено несколько адресов IP.

-t number
--tries=number
Устанавливает количество попыток в number. Задание 0 или inf соответствует бесконечному числу попыток. По умолчанию равно 20, за исключением критических ошибок типа "в соединении отказано" или "файл не найден" (404), при которых попытки не возобновляются.

-O file
--output-document=file
Документы сохраняются не в соответствующие файлы, а конкатенируются в файл с именем file. Если file уже существует, то он будет перезаписан. Если в качестве file задано -, документы будут выведены в стандартный вывод (отменяя -k). Помните, что комбинация с -k нормально определена только для скачивания одного документа.

-nc
--no-clobber
Если файл скачивается более одного раза в один и тот же каталог, то поведение Wget определяется несколькими ключами, включая -nc. В некоторых случаях локальный файл будет затёрт или перезаписан при повторном скачивании, в других - сохранён.
При запуске Wget без -N, -nc или -r скачивание того же файла в тот же каталог приводит к тому, что исходная копия файла сохраняется, а новая копия записывается с именем file.1. Если файл скачивается вновь, то третья копия будет названа file.2 и т.д. Если указан ключ -nc, такое поведение подавляется, Wget откажется скачивать новые копии файла. Таким образом, "no-clobber" неверное употребление термина в данном режиме - предотвращается не затирание файлов (цифровые суффиксы уже предотвращали затирание), а создание множественных копий.
При запуске Wget с ключом -r, но без -N или -nc, перезакачка файла приводит к перезаписыванию на место старого. Добавление -nc предотвращает такое поведение, сохраняя исходные версии файлов и игнорируя любые новые версии на сервере.
При запуске Wget с ключом -N, с или без -r, решение о скачивании новой версии файла зависит от локальной и удалённой временных отметок и размера файла. -nc не может быть указан вместе с -N.
При указании -nc файлы с расширениями .html и .htm будут загружаться с локального диска и обрабатываться так, как если бы они были скачаны из сети.

-c
--continue
Продолжение закачки частично скачанного файла. Это полезно при необходимости завершить закачку, начатую другим процессом Wget или другой программой. Например:

Если в текущем каталоге имеется файл ls-lR.Z, то Wget будет считать его первой частью удалённого файла и запросит сервер о продолжении закачки с отступом от начала, равному длине локального файла.

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

Без -c предыдущий пример сохранит удалённый файл в ls-lR.Z.1, оставив ls-lR.Z без изменения.

Начиная с версии Wget 1.7, при использовании -c с непустым файлом, Wget откажется начинать закачку сначала, если сервер не поддерживает закачку, т.к. это привело бы к потере скачанных данных. Удалите файл, если вы хотите начать закачку заново.

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

Однако, если файл на сервере был изменён, а не просто дописан, то вы получите испорченный файл. Wget не обладает механизмами проверки, является ли локальный файл начальной частью удалённого файла. Следует быть особенно внимательным при использовании -c совместно с -r, т.к. каждый файл будет считаться недокачанным.

Испорченный файл также можно получить при использовании -c с кривым HTTP прокси, который добавляет строку тима "закачка прервана". В будущих версиях возможно добавление ключа "откат" для исправления таких случаев.

--progress=type
Выбор типа индикатора хода закачки. Возможные значения: "dot" и "bar".
Индикатор типа "bar" используется по умолчанию. Он отображает ASCII полосу хода загрузки (т.н. "термометр"). Если вывод не в TTY, то по умолчанию используется индикатор типа "dot".
Для переключения в режим "dot" укажите --progress=dot. Ход закачки отслеживается и выводится на экран в виде точек, где каждая точка представляет фиксированный размер скачанных данных.
При точечной закачке можно изменить стиль вывода, указав dot:style. Различные стили определяют различное значение для одной точки. По умолчанию одна точка представляет 1K, 10 точек образуют кластер, 50 точек в строке. Стиль binary является более "компьютер"-ориентированным - 8K на точку, 16 точек на кластер и 48 точек на строку (384K в строке). Стиль mega наиболее подходит для скачивания очень больших файлов - каждой точке соответствует 64K, 8 точек на кластер и 48 точек в строке (строка соответствует 3M).
Стиль по умолчанию можно задать через .wgetrc. Эта установка может быть переопределена в командной строке. Исключением является приоритет "dot" над "bar", если вывод не в TTY. Для непременного использования bar укажите --progress=bar:force.

-N
--timestamping
Включает использование временных отметок.

--spider
При запуске с этим ключом Wget ведёт себя как сетевой паук, он не скачивает страницы, а лишь проверяет их наличие. Например, с помощью Wget можно проверить закладки:

Эта функция требует большой доработки, чтобы Wget достиг функциональности реальных сетевых пауков.

-T seconds
--timeout=seconds
Устанавливает сетевое время ожидания в seconds секунд. Эквивалентно одновременному указанию --dns-timeout, --connect-timeout и --read-timeout.
Когда Wget соединяется или читает с удалённого хоста, он проверяет время ожидания и прерывает операцию при его истечении. Это предотвращает возникновение аномалий, таких как повисшее чтение или бесконечные попытки соединения. Единственное время ожидания, установленное по умолчанию, - это время ожидания чтения в 900 секунд. Установка времени ожидания в 0 отменяет проверки.
Если вы не знаете точно, что вы делаете, лучше не устанавливать никаких значений для ключей времени ожидания.

--dns-timeout=seconds
Устанавливает время ожидания для запросов DNS в seconds секунд. Незавершённые в указанное время запросы DNS будут неуспешны. По умолчанию никакое время ожидания для запросов DNS не устанавливается, кроме значений, определённых системными библиотеками.

--connect-timeout=seconds
Устанавливает время ожидания соединения в seconds секунд. TCP соединения, требующие большего времени на установку, будут отменены. По умолчанию никакое время ожидания соединения не устанавливается, кроме значений, определённых системными библиотеками.

--read-timeout=seconds
Устанавливает время ожидания чтения (и записи) в seconds секунд. Чтение, требующее большего времени, будет неуспешным. Значение по умолчанию равно 900 секунд.

--limit-rate=amount
Устанавливает ограничение скорости скачивания в amount байт в секунду. Значение может быть выражено в байтах, килобайтах с суффиксом k или мегабайтах с суффиксом m. Например, --limit-rate=20k установит ограничение скорости скачивания в 20KB/s. Такое ограничение полезно, если по какой-либо причине вы не хотите, чтобы Wget не утилизировал всю доступную полосу пропускания. Wget реализует ограничение через sleep на необходимое время после сетевого чтения, которое заняло меньше времени, чем указанное в ограничении. В итоге такая стратегия приводит к замедлению скорости TCP передачи приблизительно до указанного ограничения. Однако, для установления баланса требуется определённое время, поэтому не удивляйтесь, если ограничение будет плохо работать для небольших файлов.

-w seconds
--wait=seconds
Ждать указанное количество seconds секунд между закачками. Использование этой функции рекомендуется для снижения нагрузки на сервер уменьшением частоты запросов. Вместо секунд время может быть указано в минутах с суффиксом m, в часах с суффиксом h или днях с суффиксом d.
Указание большого значения полезно, если сеть или хост назначения недоступны, так чтобы Wget ждал достаточное время для исправления неполадок сети до следующей попытки.

--waitretry=seconds
Если вы не хотите, чтобы Wget ждал между различными закачками, а только между попытками для сорванных закачек, можно использовать этот ключ. Wget будет линейно наращивать паузу, ожидая 1 секунду после первого сбоя для данного файла, 2 секунды после второго сбоя и так далее до максимального значения seconds. Таким образом, значение 10 заставит Wget ждать до (1 + 2 + . + 10) = 55 секунд на файл. Этот ключ включён по умолчанию в глобальном файле wgetrc.

--random-wait
Некоторые веб-сайты могут анализировать логи для идентификации качалок, таких как Wget, изучая статистические похожести в паузах между запросами. Данный ключ устанавливает случайные паузы в диапазоне от 0 до 2 * wait секунд, где значение wait указывается ключом --wait. Это позволяет исключить Wget из такого анализа. В недавней статье на тему разработки популярных пользовательских платформ был представлен код, позволяющий проводить такой анализ на лету. Автор предлагал блокирование подсетей класса C для блокирования программ автоматического скачивания, несмотря на возможную смену адреса, назначенного DHCP. На создание ключа --random-wait подвигла эта больная рекомендация блокировать множество невиновных пользователей по вине одного.

-Y on/off
--proxy=on/off
Включает или выключает поддержку прокси. Если соответствующая переменная окружения установлена, то поддержка прокси включена по умолчанию.

Ключи каталогов

-nd
--no-directories
Не создавать структуру каталогов при рекурсивном скачивании. С этим ключом все файлы сохраняются в текущий каталог без затирания (если имя встречается больше одного раза, имена получат суффикс .n).

Если вам нужно лишь избавиться от структуры каталогов, то этот ключ может быть заменён комбинацией -nd и -P. Однако, в отличии от -nd, --cut-dirs не теряет подкаталоги - например, с -nH --cut-dirs=1, подкаталог beta/ будет сохранён как xxx/beta, как и ожидается.

-P prefix
--directory-prefix=prefix
Устанавливает корневой каталог в prefix. Корневой каталог - это каталог, куда будут сохранены все файлы и подкаталоги, т.е. вершина скачиваемого дерева. По умолчанию . (текущий каталог).

--no-cache
Отключает кеширование на стороне сервера. В этой ситуации Wget посылает удалённому серверу соответствующую директиву (Pragma: no-cache) для получения обновлённой, а не кешированной версии файла. Это особенно полезно для стирания устаревших документов на прокси серверах. Кеширование разрешено по умолчанию.

/.mozilla в директории вашего профиля. Полный путь обычно выглядит как

--header=additional-header
Укажите дополнительный заголовок additional-header для передачи HTTP серверу. Заголовки должны содержать ":" после одного или более непустых символов и недолжны содержать перевода строки. Вы можете указать несколько дополнительных заголовков, используя ключ --header многократно.

Указание в качестве заголовка пустой строки очищает все ранее указанные пользовательские заголовки.

--referer=url
Включает в запрос заголовок `Referer: url'. Полезен, если при выдаче документа сервер считает, что общается с интерактивным обозревателем, и проверяет, чтобы поле Referer содержало страницу, указывающую на запрашиваемый документ.


Вы узнаете, как архивировать практически любой богатый информацией сайт для создания автономной версии для себя. Бесплатная, кроссплатформенная утилита командной строки wget может загрузить весь веб-сайт. Статья проведет вас через весь процесс. Я начну с нуля, а затем перейду к подробным примерам выбранных настроек, чтобы получить превосходный архив после обработки. После прочтения этого урока он станет намного менее пугающим, чем кажется.

Почему вы хотите это сделать?

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

Есть много возможных применений и причин, по которым можно скачать весь сайт. Неважно, является ли целевой сайт вашим или нет. На заметку, будьте осторожны с тем, что вы загружаете Возможно, вы хотите сохранить эпоху сайта с особым дизайном. Может быть, вы хотите взять информативный веб-сайт с собой в место без интернета. Этот метод может гарантировать, что сайт останется с вами.

Как это работает?

Wget будет начинать с определенного URL и посещать каждую ссылку, возвращаясь к бесконечной глубине. В конечном итоге он может сканировать весь сайт. То, как я его настроил, гарантирует, что он будет загружать только весь сайт, а не весь интернет – случайно . Другими словами, он не будет бродить по внешним сайтам и ничего не загружать с них. Вы получите все активы, такие как JS, CSS и изображения. Конечно, и все внутренние ссылки будут преобразованы в относительные ссылки. Последнее имеет жизненно важное значение для просмотра в автономном режиме копии, а исключенные или внешние ссылки остаются неизменными.

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

Я знаю, что это не относится строго к WordPress, но работает исключительно хорошо с блогами, использующими эту платформу. Тот факт, что блоггер использует некоторые стандартные виджеты WordPress на боковой панели (например, ежемесячный архив или облако тегов), очень помогает ботам.

Настройка wget в Windows

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

  • Получите последнюю версию wget для Windows, выберите zip-версию последней версии и распакуйте ее куда-нибудь. Я использую папку для переносимого программного обеспечения, так как это не требует установки.

Если вы попытаетесь открыть файл .exe, скорее всего, ничего не произойдет, просто вспышка командной строки. Я хочу получить доступ к этому wget.exe, имея открытую командную строку в папке, в которую я буду загружать весь архив веб-сайта. Нецелесообразно перемещать .exe туда и копировать его в любую другую папку архива в будущем, поэтому я хочу, чтобы он был доступен для всей системы . Поэтому я «регистрирую» его, добавляя в переменные среды Windows.

  1. Нажмите Windows + R, вставьте указанную выше строку и нажмите Enter
  2. Под Пользовательскими переменными найдите Путь и нажмите Редактировать…
  3. Нажмите New и добавьте полный путь к тому месту, куда вы извлекли wget.exe
  4. Нажмите ОК, ОК, чтобы закрыть все

Чтобы убедиться, что он работает, снова нажмите Windows+ Rи вставьте cmd /k "wget -V" – он не должен сказать, что «wget» не распознан

Wget на Windows

Настройка wget для загрузки всего сайта

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

Настройки для использования

--mirror

Это набор других специфических настроек, все, что вам нужно знать, это волшебное слово, которое позволяет бесконечное сканирование рекурсии. Звучит необычно? Потому что это! Без этого вы не сможете скачать весь сайт, потому что у вас, вероятно, нет списка каждой статьи.

--page-requisites

При этом wget загружает все ресурсы, на которые ссылаются страницы, такие как CSS, JS и изображения. Это важно использовать, иначе ваш архив будет очень поврежден.

--convert-links

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

--adjust-extension

Представьте, что вы сделали все возможное, чтобы загрузить весь веб-сайт, чтобы получить неиспользуемые данные. Если файлы не заканчиваются в своих естественных расширениях, вы или ваш браузер не сможете их открыть. В настоящее время большинство ссылок не содержат суффикс .html, хотя они должны быть .html файлами при загрузке. Этот параметр помогает вам открывать страницы, не размещая архив на сервере. Небольшое предостережение в том, что оно пытается быть умным, чтобы определить, какое расширение использовать, и оно не идеально. Если вы не используете следующую настройку, контент, отправляемый через gzip, может закончиться довольно непригодным расширением .gz.

--compression=auto

Я обнаружил, что при работе с ресурсами, сжатыми gzip, такими как изображение SVG, отправленное сервером, это исключает возможность загрузки, такого контента как logo.svg.gz, который практически невозможно загрузить локально. Объединить с предыдущей настройкой. Обратите внимание, что если вы используете Unix, этот переключатель может отсутствовать в вашем wget, даже если вы используете последнюю версию. Подробнее на Как может отсутствовать сжатие в моем wget?

--reject-regex "/search|/rss"

Дополнительные настройки

--no-if-modified-since

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

--no-check-certificate

Проверка сертификатов SSL не является критически важной задачей . Это предотвращает некоторые головные боли, когда вы заботитесь только о загрузке всего сайта без входа в систему.

--user-agent

Некоторые хосты могут обнаружить, что вы используете wget для загрузки всего сайта и полностью блокируете вас. Спуфинг агента пользователя приятно замаскировать эту процедуру как обычного пользователя Chrome. Если сайт блокирует ваш IP, следующим шагом будет продолжение работы через VPN и использование нескольких виртуальных машин для загрузки стратифицированных частей целевого сайта (ой). Возможно, вы захотите проверить --wait и --random-wait варианты, если ваш сервер умный, и вам нужно замедлить и задержать запросы.

--restrict-file-names=windows

В Windows это автоматически используется для ограничения символов файлов архива безопасными для Windows. Однако, если вы работаете в Unix, но планируете просмотреть позже в Windows, то вы хотите явно использовать этот параметр. Unix более простителен для специальных символов в именах файлов .

--backup-converted

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

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

Вам нужно будет запустить wget из командной строки, которая работает с папкой, в которую вы собираетесь загрузить весь сайт. Для этого есть несколько способов, начиная с самого стандартного:

  1. Вы знаете тренировку: Windows+ Rи напишите cmd и нажмитеEnter
  2. Тип, cd /d C:archive folder где /d коммутатор позволяет менять диски, а последний – путь к архиву.

Если вы хотите узнать, как cd работает, введите help cd запрос. В некоторых конфигурациях необходимо заключать путь в кавычки, если он имеет пробел.

Дополнительные способы

  • Чтобы сделать это за меньшее количество шагов: Windows+ R затем cmd /k "cd /d C:archive folder"
  • Если вы используете Total Commander, откройте меню «Команды»> «Запустить командную оболочку».
  • Получите запись «Открыть командное окно здесь» в контекстном меню проводника, используя файл .reg.

Запуск загрузки

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

Осталось только запустить эту команду для загрузки всего сайта. Приспособьте это к своим потребностям: по крайней мере измените URL в конце этого. Будьте готовы, что это может занять часы, даже дни – в зависимости от размера целевого сайта. И вы не видите прогресса, так как только задним числом можно понять размер архива.

Я не шучу, когда предупреждаю о множестве маленьких файлов.

Пример размера архива при загрузке всего сайта с помощью wget.

На больших сайтах с десятками или даже сотнями тысяч файлов, статей, вы можете сохранить их на SSD до завершения процесса, чтобы не допустить уничтожения вашего жесткого диска. Они лучше справляются со многими небольшими файлами. Я рекомендую стабильное подключение к Интернету (желательно не беспроводное) вместе с компьютером, который может обеспечить необходимое время безотказной работы. Приближаясь к завершению, вы увидите, что wget конвертирует ссылки в файлы. Что-то вроде:

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

Постобработка архива

К сожалению, ни одна автоматизированная система не является идеальной, особенно если ваша цель – загрузить весь сайт. Вы можете столкнуться с некоторыми небольшими проблемами. Откройте заархивированную версию страницы и сравните ее рядом с живой. Там не должно быть существенных различий. Я удовлетворен, если весь текстовый контент там с изображениями. Гораздо меньше волнует, работают ли динамические части или нет. Здесь я рассматриваю наихудший сценарий, когда изображения отсутствуют.

Современные сайты используют srcset атрибут и тег для загрузки адаптивных изображений. Хотя wget постоянно совершенствуется, его возможности отстают от передовых технологий современного Интернета. Хотя в wget версии 1.18 добавлена поддержка, ей не нравится более экзотическая комбинация тегов. Это приводит к тому, что wget только находит запасное изображение в теге img, а не в любом из исходных тегов. Он не загружает их и не затрагивает их URL. Обходной путь для этого состоит в массовом поиске и замене (удалении) этих тегов, поэтому резервное изображение все еще может появиться. < picture > . < /picture > srcset`` < picture > < source > < img > < /picture >

  1. Получить последнюю версию grepWin – я рекомендую портативную версию.
  2. Добавить папку архива в Поиск в
  3. Выберите Regex search и Search для: < source media=".*" >
  4. Добавить * .html в имена файлов совпадают:
  5. Нажмите « Заменить» (вы можете проверить, что он что-то находит с помощью функции « Поиск» )

Возможная альтернатива без рекурсивной загрузки

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

Я добавил --input-file=links.txt при сбросе --mirror --reject-regex настроек.

Заключительные мысли

Теперь, когда у вас есть некоторое представление о том, как загрузить весь веб-сайт, вы можете узнать, как обращаться с таким архивом. Множество крошечных файлов – это смерть многих систем, а это означает, что их передача, резервное копирование или проверка на вирусы будут крайне медленными , особенно если вы не храните их на SSD. Если вы не хотите активно просматривать архив, я рекомендую сжать его. Основная причина не в космических требованиях. Наличие архива в виде одного большого файла или серии больших файлов делает его более управляемым. Вы можете использовать RAR’s Store или метод Fastest Compression для быстрого создания пакета. Если контент в основном не текстовый, он может не выиграть от дополнительного сжатия. Наличие записи восстановления в архиве RAR (не добавлен по умолчанию) помогает в случае аппаратных сбоев, таких как сбойные сектора или другие повреждения данных во время хранения или передачи.

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

Пожалуйста, поймите, что каждый сервер отличается и то, что работает на одном, может быть совершенно не так для другого. Это отправная точка. Существует еще много информации об архивации сайтов. Удачи вам в накоплении данных!

wget — консольная утилита для скачивания файлов/сайтов.
Умеет выкачивать файлы рекурсивно, следуя по ссылкам автоматически.


Пример использования для скачивания документации Django:

-r - ходим по ссылкам (рекурсивное скачивание)
-k - преобразовываем ссылки к локальному виду
-p - скачивание ресурсов необходимых для отображения html-страницы (стили, картинки и т.д.)
-l - глубина скачивания, 0 - бесконечная вложенность ссылок
-nc - не перезаписывать существующие файлы
-np - не подниматься выше начального адреса при рекурсивной загрузке

Каждый ключ имеет алиас (синоним),
например ключ -h соответствует --help (вызов помощи по команде).


Для докачивания файла от себя рекомендую применять такие ключи:

--continue - собственно режим докачивания файла
--timestamping - перекачивать файл только, если он новее локального
--tries=5 - кол-во попыток подключений при неудаче
--timeout=15 - задержка между попытками (секунд)
--no-cache - запретить кеширование данных
--no-dns-cache - запретить кеширование DNS адреса

Батник получения и подстановки для WGET настроек прокси Internet Explorer:

GNU Wget 1.11.4, a non-interactive network retriever.
Usage: wget [OPTION]. .

Mandatory arguments to long options are mandatory for short options too.

Startup:
-V, --version display the version of Wget and exit.
-h, --help print this help.
-b, --background go to background after startup.
-e, --execute=COMMAND execute a `.wgetrc'-style command.

Logging and input file:
-o, --output-file=FILE log messages to FILE.
-a, --append-output=FILE append messages to FILE.
-d, --debug print lots of debugging information.
-q, --quiet quiet (no output).
-v, --verbose be verbose (this is the default).
-nv, --no-verbose turn off verboseness, without being quiet.
-i, --input-file=FILE download URLs found in FILE.
-F, --force-html treat input file as HTML.
-B, --base=URL prepends URL to relative links in -F -i file.

Directories:
-nd, --no-directories don't create directories.
-x, --force-directories force creation of directories.
-nH, --no-host-directories don't create host directories.
--protocol-directories use protocol name in directories.
-P, --directory-prefix=PREFIX save files to PREFIX/.
--cut-dirs=NUMBER ignore NUMBER remote directory components.

FTP options:
--ftp-user=USER set ftp user to USER.
--ftp-password=PASS set ftp password to PASS.
--no-remove-listing don't remove `.listing' files.
--no-glob turn off FTP file name globbing.
--no-passive-ftp disable the "passive" transfer mode.
--retr-symlinks when recursing, get linked-to files (not dir).
--preserve-permissions preserve remote file permissions.

Recursive download:
-r, --recursive specify recursive download.
-l, --level=NUMBER maximum recursion depth (inf or 0 for infinite).
--delete-after delete files locally after downloading them.
-k, --convert-links make links in downloaded HTML point to local files.
-K, --backup-converted before converting file X, back up as X.orig.
-m, --mirror shortcut for -N -r -l inf --no-remove-listing.
-p, --page-requisites get all images, etc. needed to display HTML page.
--strict-comments turn on strict (SGML) handling of HTML comments.

Recursive accept/reject:
-A, --accept=LIST comma-separated list of accepted extensions.
-R, --reject=LIST comma-separated list of rejected extensions.
-D, --domains=LIST comma-separated list of accepted domains.
--exclude-domains=LIST comma-separated list of rejected domains.
--follow-ftp follow FTP links from HTML documents.
--follow-tags=LIST comma-separated list of followed HTML tags.
--ignore-tags=LIST comma-separated list of ignored HTML tags.
-H, --span-hosts go to foreign hosts when recursive.
-L, --relative follow relative links only.
-I, --include-directories=LIST list of allowed directories.
-X, --exclude-directories=LIST list of excluded directories.
-np, --no-parent don't ascend to the parent directory.

Минусы утилиты:

- Не умеет скачивать файл в папку под конкретным именем - всегда берет в роле имени адрес за последним слешем URL.
- Давно не развивается, например, не поддерживает новые протоколы подключения по шифрованному соединению.
- Сравнение Curl vs Wget (англ.)

linux-logo

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

Простая команда для скачивания сайта целиком:

Теперь расшифровка атрибутов:

  • -r — указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
  • -k — используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
  • -p — указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
  • -l — определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
  • -E — добавлять к загруженным файлам расширение .html.
  • -nc — при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.

Если вывод этой команды заканчивается например так:

Это может означать одно, что доступ к сайту запрещен для скачивания утилитой wget. Для обхода ограничения притворимся другим юзер-агентом:

P.S. wget — очень мощная утилита, её функционал можно долго изучать.

Если есть вопросы, то пишем в комментариях.

Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: