Скачивание сайтов с помощью Wget

GNU Wget — это утилита командной строки для скачивания файлов и зеркалирования сайтов по протоколам FTP и HTTP, присутствующая по умолчанию в дистрибутивах Linux. Среди возможностей Wget — работа в фоновом режиме после выхода из  системы, рекурсивное извлечение каталогов, выбор файлов по шаблону, сравнение времени удаленных и локальных файлов, сохранение времени удаленных файлов при загрузке, использование REST с FTP серверами и Range с HTTP серверами для загрузки файлов по медленным или нестабильным каналам, поддержка прокси-серверов, конфигурируемость. Это самый настоящий „интернет-насос“.

Пользоваться Wget очень просто:

~$ wget <a href="http://drupal.mensh.ru/files/iron.tar.gz
--16:26:39--" title="http://drupal.mensh.ru/files/iron.tar.gz
--16:26:39--">http://drupal.mensh.ru/files/iron.tar.gz
--16:26:39--</a>  <a href="http://drupal.mensh.ru/files/iron.tar.gz
" title="http://drupal.mensh.ru/files/iron.tar.gz
">http://drupal.mensh.ru/files/iron.tar.gz
</a>           => `iron.tar.gz`
Распознаётся drupal... 78.110.56.234
Устанавливается соединение с drupal|78.110.56.234|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: 60 383 (59K) [application/x-gzip]
 
100%[=====================================================================>] 60383      --.--K/s
 
16:26:39 (56.99 MB/s) - `iron.tar.gz` сохранён [60383/60383]

В случае обрыва связи докачка файла так же элементарна:

~$ wget -c http://drupal.mensh.ru/files/iron.tar.gz

Случаи получения битых файлов от Wget мне не известны.

Загрузка по списку (каждая ссылка в файле links.inf должна находиться на новой строке):

~$ wget -i links.inf

Загрузка только изображений с расширением .jpg:

~$ wget -A.jpg http://linuxcookbook.ru/

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

~$ wget --mirror -p --html-extension --base=./ -k -P ./ http://linuxcookbook.ru/

Опции Wget:

~$ wget --help
GNU Wget 1.10.2, программа для неинтерактивной загрузки файлов по сети.
Использование: wget [ОПЦИЯ]... [URL]...
 
Обязательные аргументы для длинных опций также являются обязательными и для коротких опций.
 
Запуск:
  -V,  --version           вывод версии Wget и выход.
  -h,  --help              вывод этой справки.
  -b,  --background        после запуска перейти в фоновый режим.
  -e,  --execute=КОМАНДА   выполнить команду в стиле `.wgetrc`.
 
Журналирование и входной файл:
  -o,  --output-file=ФАЙЛ    записывать сообщения в ФАЙЛ.
  -a,  --append-output=ФАЙЛ  дописывать сообщения в конец ФАЙЛА.
  -d,  --debug               вывод большого количества отладочной информации.
  -q,  --quiet               молча (без выходных данных).
  -v,  --verbose             подробный вывод (по умолчанию).
  -nv, --no-verbose          отключение подробного режима, но не полностью.
  -i,  --input-file=ФАЙЛ     загрузка URL`ов, найденных в ФАЙЛЕ.
  -F,  --force-html          считать, что входной файл - HTML.
  -B,  --base=URL            добавление URL в начало относительных ссылок в файле -F -i.
 
Загрузка:
  -t,  --tries=ЧИСЛО             установить ЧИСЛО повторных попыток (0 без ограничения).
       --retry-connrefused       повторять, даже если в подключении отказано.
  -O,  --output-document=ФАЙЛ    записывать документы в ФАЙЛ.
  -nc, --no-clobber              пропускать загрузки, которые приведут к
                                 загрузке уже существующих файлов.
  -c,  --continue                возобновить загрузку частично загруженного файла.
       --progress=ТИП            выбрать тип индикатора выполнения.
  -N,  --timestamping            не загружать повторно файлы, только если они
                                 не новее, чем локальные.
  -S,  --server-response         вывод ответа сервера.
       --spider                  ничего не загружать.
  -T,  --timeout=СЕКУНДЫ         установка значений всех тайм-аутов в СЕКУНДЫ.
       --dns-timeout=СЕК         установка тайм-аута поиска в DNS в СЕК.
       --connect-timeout=СЕК     установка тайм-аута подключения в СЕК.
       --read-timeout=СЕК        установка тайм-аута чтения в СЕК.
  -w,  --wait=СЕКУНДЫ            пауза в СЕКУНДАХ между загрузками.
       --waitretry=СЕКУНДЫ       пауза в 1..СЕКУНДЫ между повторными попытками загрузки.
       --random-wait             пауза в 0...2*WAIT секунд между загрузками.
  -Y,  --proxy                   явно включить прокси.
       --no-proxy                явно выключить прокси.
  -Q,  --quota=ЧИСЛО             установить величину квоты загрузки в ЧИСЛО.
       --bind-address=АДРЕС      привязка к АДРЕСУ (имя хоста или IP) локального хоста.
       --limit-rate=СКОРОСТЬ     ограничение СКОРОСТИ загрузки.
       --no-dns-cache            отключение кэширования поисковых DNS-запросов.
       --restrict-file-names=ОС  ограничение на символы в именах файлов, использование которых допускает ОС.
  -4,  --inet4-only              подключаться только к адресам IPv4.
  -6,  --inet6-only              подключаться только к адресам IPv6.
       --prefer-family=СЕМЕЙСТВО подключаться сначала к адресам указанного семейства,
                                 может быть IPv6, IPv4 или ничего.
       --user=ПОЛЬЗОВАТЕЛЬ       установить и ftp- и http-пользователя в ПОЛЬЗОВАТЕЛЬ.
       --password=ПАРОЛЬ         установить и ftp- и http-пароль в ПАРОЛЬ.
 
Каталоги:
  -nd, --no-directories           не создавать каталоги.
  -x,  --force-directories        принудительно создавать каталоги.
  -nH, --no-host-directories      не создавать каталоги как на хосте.
       --protocol-directories     использовать имя протокола в каталогах.
  -P,  --directory-prefix=ПРЕФИКС сохранять файлы в ПРЕФИКС/...
       --cut-dirs=ЧИСЛО           игнорировать ЧИСЛО компонентов удалённого каталога.
 
Опции HTTP:
       --http-user=ПОЛЬЗОВАТЕЛЬ установить http-пользователя в ПОЛЬЗОВАТЕЛЬ.
       --http-password=ПАРОЛЬ  установить http-пароль в ПАРОЛЬ.
       --no-cache              отвергать кэшированные сервером данные.
  -E,  --html-extension        сохранять HTML-документы с расширением `.html`.
       --ignore-length         игнорировать поле заголовка `Content-Length`.
       --header=СТРОКА         вставить СТРОКУ между заголовками.
       --proxy-user=ПОЛЬЗОВАТЕЛЬ установить ПОЛЬЗОВАТЕЛЯ в качестве имени пользователя для прокси.
       --proxy-password=ПАРОЛЬ   установить ПАРОЛЬ в качестве пароля для прокси.
       --referer=URL           включить в HTTP-запрос заголовок `Referer: URL`.
       --save-headers          сохранять HTTP-заголовки в файл.
  -U,  --user-agent=АГЕНТ      идентифицировать себя как АГЕНТ вместо Wget/ВЕРСИЯ.
       --no-http-keep-alive    отключить поддержание активности HTTP (постоянные подключения).
       --no-cookies            не использовать кукисы.
       --load-cookies=ФАЙЛ     загрузить кукисы из ФАЙЛА перед сеансом.
       --save-cookies=ФАЙЛ     сохранить кукисы в ФАЙЛ после сеанса.
       --keep-session-cookies  загрузить и сохранить кукисы сеанса (непостоянные).
       --post-data=СТРОКА      использовать метод POST; отправка СТРОКИ в качестве данных.
       --post-file=ФАЙЛ        использовать метод POST; отправка содержимого ФАЙЛА.
 
Опции HTTPS (SSL/TLS):
       --secure-protocol=ПР     выбор безопасного протокола: auto, SSLv2,
                                SSLv3 или TLSv1.
       --no-check-certificate   не проверять сертификат сервера.
       --certificate=FILE       файл сертификата пользователя.
       --certificate-type=ТИП   тип сертификата пользователя: PEM или DER.
       --private-key=ФАЙЛ       файл секретного ключа.
       --private-key-type=ТИП   тип секретного ключа: PEM или DER.
       --ca-certificate=ФАЙЛ    файл с набором CA.
       --ca-directory=КАТ       каталог, в котором хранится список CA.
       --random-file=ФАЙЛ       файл со случайными данными для SSL PRNG.
       --egd-file=ФАЙЛ          файл, определяющий сокет EGD со случайными данными.
 
Опции FTP:
       --ftp-user=ПОЛЬЗОВАТЕЛЬ установить ftp-пользователя в ПОЛЬЗОВАТЕЛЬ.
       --ftp-password=ПАРОЛЬ   установить ftp-пароль в ПАРОЛЬ.
       --no-remove-listing     не удалять файлы файлы `.listing`.
       --no-glob               выключить маски для имён файлов FTP.
       --no-passive-ftp        отключить "пассивный" режим передачи.
       --retr-symlinks         при рекурсии загружать файлы по ссылкам (не каталоги).
       --preserve-permissions  сохранять права доступа удалённых файлов.
 
Рекурсивная загрузка:
  -r,  --recursive          включение рекурсивной загрузки.
  -l,  --level=ЧИСЛО        глубина рекурсии (inf и 0 - бесконечность).
       --delete-after       удалять локальные файлы после загрузки.
  -k,  --convert-links      делать ссылки локальными в загруженном HTML.
  -K,  --backup-converted   перед преобразованием файла X делать резервную копию X.orig.
  -m,  --mirror             короткая опция, эквивалентная
                            -N -r -l inf --no-remove-listing.
  -p,  --page-requisites    загрузить все изображения и проч., необходимые для отображения HTML-страницы.
       --strict-comments    включить строгую (SGML) обработку комментариев HTML.
 
Разрешения/запреты при рекурсии:
  -A,  --accept=СПИСОК             список разрешённых расширений, разделённых запятыми.
  -R,  --reject=СПИСОК             список запрещённых расширений, разделённых запятыми.
  -D,  --domains=СПИСОК            список разрешённых доменов, разделённых запятыми.
       --exclude-domains=СПИСОК    список запрещённых доменов, разделённых запятыми.
       --follow-ftp                следовать по ссылкам FTP в HTML-документах.
       --follow-tags=СПИСОК        список используемых тегов HTML, разделённых запятыми.
       --ignore-tags=СПИСОК        список игнорируемых тегов HTML, разделённых запятыми.
  -H,  --span-hosts                заходить на чужие хосты при рекурсии.
  -L,  --relative                  следовать только по относительным ссылкам.
  -I,  --include-directories=СПИСОК список разрешённых каталогов.
  -X,  --exclude-directories=СПИСОК список исключаемых каталогов.
  -np, --no-parent                 не подниматься в родительский каталог.

Wget очень удобно использовать в периодических скриптах, таких как cron:

~$ crontab -l
...
#run-parts
0 1 * * * wget -O /dev/null http://linuxcookbook/cron.php
...

Powered by Drupal — Design by drupal.mensh.ru.