Как скопировать любой сайт целиком через wget и перевести его в html


24-12-2018
Денис Л.
Linux
6
754
Как скопировать любой сайт целиком через wget и перевести его в html

Материал данной статьи предназначен исключительно для личного использования с целью изучения стороннего кода, либо для целей offline чтения контента в условиях отсутствия Интернета. Также данный материал может быть полезен с целью изучения функции wget. Предупреждаю Вас, что копирование стороннего сайта и использование его в коммерческих целях запрещено и Вы можете понести ответственность за свои действия!

Итак, как скачать себе сайт на любом протоколе (http / https)

Допустим Вам предстоит длительный полёт в самолёте, Интернета не будет и Вы хотите скачать себе какой-либо интересный ресурс для чтения при отсутствии Интернета. Для этого есть прекрасный инструмент, используемый в UNIX-подобных системах (Linux, Mac OS). Также можно найти вариант для Windows.

В Linux wget ставится с помощью пакетного менеджера. Если у Вас система, основанная на Debian (Ubuntu и прочие), то команда будет следующей:

sudo apt install wget

Возможно, wget уже установлен в Вашей системе и Вы получите об этом соответствующее сообщение.

Затем, переходим в нужную нам папку, например Desktop и выполняем команду:

wget -r -k -i -p -E -F -e robots=off http://адрес_сайта

Начнётся скачивание. Оно может занять как несколько минут, так и несколько часов, в зависимости от размера ресурса.

А сейчас давайте подробнее рассмотрим параметры, используемые в команде.

-r               Включить рекурсивный просмотр каталогов и подкаталогов на удалённом сервере.
                 Если мы не укажем этот параметр, то скачается только одна страница сайта.

-k               Превратить абсолютные ссылки в HTML документе в относительные ссылки (указывающие на Ваш ПК).
                 Если мы не укажем этот параметр, то ссылки на файлы стилей, js и прочего будут указывать 
                 в коде на сайт источник и Вы не сможете использовать сайт в offline-режиме

-i               Выкачать файлы, указанные по ссылкам на ресурсе (например, pdf-документы и прочие).
                 Сайт - это не только код, но и документы, которые указаны в ссылках на сайте.

-p               Загружать все файлы, которые нужны для отображения страниц HTML. Например: рисунки, звук, стили
                 При тестировании я не видел разницы между указанием этого параметра и без него. Тем не менее,
                 в мануале рекомендуют всегда указывать этот параметр.

-E               Сохранять html и css с корректными расширениями
                 Это один из самых важных пунктов, без указания которого Вы не получите рабочего сайта. Дело в том,
                 что на большинстве ресурсов файлы стилей указаны в следующем формате: /style.css?v32489723958876
                 Всё, что указывается после знака вопроса позволяет разработчикам сайта в автоматическом режиме
                 обновлять кэш пользователей, т.к. в процессе разработки символы после знака вопроса меняются при
                 каждом обновлении файла. При этом файл на сервере в своём имени не имеет ни знака вопроса, ни
                 каких-либо иных символов. Wget сохранит файлы именно с таким расширением и при попытке открытия
                 сайта в браузере у Вас не подгрузятся стили с данными параметрами. Данный параметр позволит 
                 преобразовать данные расширения в корректные расширения для браузера.

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

-e robots=off    Игнорировать запреты, указанные в файле robots.txt. Это ещё одни грабли, на которые можно наступить.
                 В частности, многие сайты запрещают от индексирования файлы стилей, папки с кэшем сервера (в которых),
                 между прочим, могут лежать изображения сайта и прочее. Если Вы не укажете данный параметр, Вы 
                 можете столкнуться с ситуацией, когда стили, некоторые картинки и некоторый другой контент 
                 попросту не скачается.

По завершению выполнения программы у Вас появится папка с названием сайта, в которую Вам нужно будет зайти и открыть файл index.html в Вашем любимом браузере. Вы увидите полную копию сайта, которую можно использовать удалённо и читать интересные для Вас материалы.

Обратите внимание, что база данных сайта не скачивается. Т.е. весь контент, который изначально находился в базе данных, был скачан и преобразован в html файлы.

Также, есть ещё один ньюанс. Часть ссылок на файлы из меню скачанного сайта может указывать не на файлы, а на каталоги. К примеру, на сайте есть рубрика: "Книги о программировании". В меню сайта указана ссылка на раздел, к примеру: "/program_books/". Данная ссылка сработает на сервере, но не сработает на локальной машине. Ведь сервер при указании ссылки на папку, автоматически ищет в ней файл index. Чтобы решить эту проблему, Вам нужно будет включить сервер на своей машине. Если Вы будете использовать Windows, то установите программу Open Server (кстати, это лучшая программа для локального сервера для Windows), закачайте в папку с сайтами папку с Вашим сайтом, перезапустите Open Server и после этого открывайте сайт. Если Вы используете Linux, Mac OS - зайдите через консоль в папку с сайтом и выполните команду:

php -S localhost:8080

И после этого сайт будет доступен по адресу http://localhost/

P.S. Ещё, в качестве дополнения к интересным возможностям wget я хочу рассказать про возможность скачивания файлов (документов и прочего по ссылкам в файле). Например, у Вас есть большой список ссылок на картинки или pdf-файлы и Вам необходимо скачать их себе. Для этого копируем все ссылки в один файл, по одной ссылке на 1 строчку и проверяем, что у каждой ссылки есть протокол (http / https). Далее выполняем команду:

wget -i название_файла_с_ссылками_в текущей_папке

Wget скачает для Вас все файлы и расположит их в указанной папке. Очень удобная и полезная опция!

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

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

Взлом Android KaiOS и установка приложений на Nokia 8110 4G

Как подключиться к серверу с обычного мобильного телефона

Как запустить Node.js на обычном хостинге