Как скачать весь сайт или используем 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/. Установки он не требует, поэтому можно носить с собой на флешке или любом другом носителе.
Если страницы связаны между собой ссылками типа "следующая", то, по идее, можно просто указать wgetом на первую из них.
Если нет, но файлы страницами пронумерованы последовательно, то можно написать на любом скриптовом языке (том же WSH, например), который просто в цикле запустит wget нужное количество раз.
Т.е. будет что-то вроде
var i=0;
for (i=1; i<число_страниц; i++) {
WShell.execute('wget http://some.site/book/page'+i+'.tiff');
}
(Это только общая идея, а не готовый к использованию код).