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

Скачивание сайтов утилитой wget

· 3 мин. чтения
Stavis Vega

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

Скачивание сайта утилитой

wget -p -k http://somewebsite.com

# мой паттерн from https://nborzenko.com/
wget -e robots=off -r -np --page-requisites --convert-links http://somewebsite.com
wget -l 1 -e robots=off -r -np --page-requisites --convert-links http://somewebsite.com

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

-r — указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.

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

-p, --page-requisites — указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).

-l — определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 1). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.

-E — добавлять к загруженным файлам расширение .html.

-nc — при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.

--span-hosts -

Скачивание при плохой связи

Для того, чтобы wget повторял попытки взять файл до тех пор, пока не скачает его целиком, надо указывать ключи -c и -t 0. Первый означает "продолжать качать с того места, где соединение оборвалось (continue), а второй позволяет указать число попыток, 0 -- бесконечно.

Например, чтобы скачать исходные тексты проигрывателя .mp3-файлов X11Amp, можно воспользоваться командой

wget -c -t 0 http://www.x11amp.bz.nu/files/x11amp-0.9-beta1.1.tar.gz

Реально ключи -c -t 0 стоит указывать практически всегда, кроме как разве что в локальной сети.

Последующая обработка

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

В vscode в поиске регуляркой удаляю лишние приписки к файлам

(?<=[.js|.css])(\?.*?)(?=['|"])

И в командной строке делаю групповое переименование. Для него нужна утилита rename - brew install rename
Перед переименованием удалить ключ -n защищающий от случайных переименований.

# for css
find . -type f -regex ".*\.css.*" -print0 | rename -0 's/(.*.css).*/$1/' -n


# for js
find . -type f -regex ".*\.js.*" -print0 | rename -0 's/(.*.js).*/$1/' -n