Как скачать весь сайт или используем WGet

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

С помощью WGet можно качать сайты целиком, отдельные файлы или набор файлов по списку. Но отличие от других оффлайн-броузеров (например, Teleport Pro), WGet работает из командной строки. Сначала это кажется неудобным, но это неудобство легко решается с помощью простейшего BAT-файла. Например, я для себя сделал вот такой: 

@echo off
set /p URL=Enter URL (with no http://):
if "%URL%"=="" goto error
D:\Soft\WGet\wget.exe -r -l0 -k -np -p -nv -nH -E -t 4 -N -c http://%URL% -P D:\Sites\
goto end
:error
echo No site specified!
:end
pause

Этот скрипт запросит имя сайта при запуске и затем скачает его в каталог D:\Sites\имя_сайта.

Некоторые наиболее полезные при скачивании сайта ключи wget:

  • -r — рекурсивное скачивание: скачается не только указанная страница сайта (т.е. главная), но и все, на которые она ссылается.
  • -l0 — глубина рекурсии (0 — неограниченная).
  • -k — коррекция гиперссылок так, чтобы они стали локальными.
  • -np — не подниматься выше указанного каталога (полезно при скачивании одного раздела сайта).
  • -p — загрузка вспомогательных элементов для отображения Web-страницы: CSS, JavaScript и т.п. Без данного ключа будет скачиваться только HTML.
  • -nv — подавление выдачи части сообщений.
  • -hH — не создавать каталог с именем хоста.
  • -E — сохранять файлы с расширением HTML.
  • -N — учет временной метки (заголовка Last-Modified): скачиваются только те файлы, которые обновились.
  • -t — количество попыток скачивания файла в случае возникновения ошибки.
  • -P — каталог, в который следует сохранить сайт.
  • -A — скачивать файлы, соответствующие шаблону. Шаблон может быть либо частью имени файла, либо задаваться с помощью символа *. Так, например, скачать все файлы с расширением .gif можно либо с помощью -A .gif, либо -A *.gif.
  • -R — пропускать файлы, соответствующие шаблону. Шаблоны задаются так же, как для опции -A.

Кроме скачивания сайтов, wget имеет еще несколько применений. Самое простое и очевидное — закачивать дистрибутив какой-либо программы напрямую, без предварительной выгрузки на свой компьютер и закачку с него по FTP (для этого нужен доступ к командной строке на сервере). Делается это командой wget -c URL_файла (ключ -c означает скачивание с докачкой).

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

  • -S — вывод ответа сервера.
  • --spider — только получение ответа сервера, без сохранения в файл.
  • --header=строка_заголовка — добавить в заголовок запроса указанную строку.
  • --load-cookies и --save-cookies — загрузка и сохранение cookies в файл.
  • --post-data и --post-file — отправка строки данных или данных из файла POST-запросом.

Получить wget очень легко: в Linux он сразу же устанавливается почти во всех дистрибутивах, для Windows его можно скачать по адресу http://users.ugent.be/~bpuype/wget/. Установки он не требует,  поэтому можно носить с собой на флешке или любом другом носителе.