Страница 84 / 118

Wget: [Назад] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 [Вперед]

GaDiNa



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[ UNIX Shell ] || [ Рекурсивная загрузка веб-сайтов ] — родительские ветки.
 
GNU Wget

GNU Wget — это свободная неинтерактивная утилита для скачивания файлов по HTTP, HTTPS, FTP и FTPS (и только), обладающая самым базовым функционалом загрузки одиночных файлов и рекурсивной загрузки сайтов (HTTP) и директорий (FTP).
 

| Офсайт | Википедия | Фрешмит | Опен-хаб (бывш. Охлох) | Мануал | Ман | Ман (русск., устар.) | --help (русск.) |

 
Где взять.
Под GNU — уже стоит. Под FreeBSD — есть в портах. Под [Mac] OS X — собрать ванильный.  
Под Windows есть варианты: 0) Cygwin,  1) GNUWin32 (учитывайте зависимости), 2) Wget + OpenSSL by GetGnuWin32, 3) by Bart Puype  4) by osspack32, 5) by Alex_Piggy, 6) by Jernej Simoncc (32 и 64 бит отдельные пакеты).
 
Литература.
Popkov. Параметры программы wget
В. А. Петров. Wget — насос для Интернета
 
FAQ
 
Q: Можно ли простым перебором загрузить страницы (допустим) с первой по сотую, если их адреса:  
http://example.org/index?page=1
http://example.org/index?page=2
...
http://example.org/index?page=100
A: Вэ-гет не умеет делать инкрементальный перебор, поскольку это умеет делать любая командная оболочка. На Баше это делается так:
$ wget -E "http://example.org/index?page="{1..100}
Еще раз отметьте, {1..100} — это синтаксическая конструкция Баша, а не Вэ-гета. Эквивалентной этой будет команда:
$ for i in {1..100}; do wget -E "http://example.org/index?page=$i"; done
Или для cmd.exe:
for /l %i in (1,1,100) do wget -E "http://example.org/index?page=%i"
 
Q: А как собственно сайт целиком-то загрузить?
A: $ wget -mpEk "http://example.org"
Это, наверное, самый ходовой набор ключей, но вам, может быть, более подойдут другие. Что значит каждый — легко узнать в мане.
 
Q: Я хочу загрузить с сайта, требующего авторизации. Что делать?
A: Проще всего кинуть куда-нибудь файл с нужными (но лишние не помешают) куками в нетскэйповском формате, затем воспользоваться ключом --load-cookies.
$ wget --load-cookies cookies.txt бла-бла # файл cookies.txt в текущей директории
У Файрфокса куки в требуемом виде можно получить, воспользовавшись расширением «Export Cookies»; у Хрома — «Cookie.txt export»
 
Q: Не-ASCII символы сохраняются в именах файлов как %D0%A5%D1%83%D0%B9 (или того хуже), хотя локаль юникодная.
A: Укажите ключ --restrict-file-names=nocontrol,unix или --restrict-file-names=nocontrol,windows соответственно.
Если у вас Windows и локаль не юникодная — используйте вариант от Alex_Piggy с ключом --local-filesystem-encoding=ENCODING, где ENCODING — имя кодировки локали в терминах iconv. Текущую локаль cmd.exe можно проверить при помощи команды chcp. Для русской кириллицы в Windows обычно используется CP866.
 
Q: Известно, что можно приказать Вэ-гету обновить ранее загруженный файл, если на сервере новее или иного размера (ключ --timestamping, он же -N). Можно приказать учитывать только дату, но не размер (--timestamping --ignore-length). А можно ли учитывать только размер, но не дату?
A: При помощи одного только Wgetа — нет.  Возможна обработка получаемых заголовков файла при помощи средств командной оболочки. Пример для cmd.exe.
 
Q: Можно ли приказать Вэ-гету докачать файл, но только если он не изменился.
A: Нет, нельзя. Сочетание ключей -cN (--continue --timestamping), как можно было бы предположить, нужного эффекта не даст — «докачает» даже если файл изменился — получите в итоге мусор.
 
Q: Можно ли при рекурсивной загрузке ограничится только ссылками, содержащими параметр lang=ru, т.е. грузить:
http://example.org/index?lang=ru
http://example.org/page?id=1001&lang=ru
http://example.org/file?id=60&lang=ru&format=dvi
и не грузить:
http://example.org/index?lang=en
http://example.org/about?lang=fr
и т.д.
A: Для версий < 1.14 нет такой возможности.  
Общий вид URI: <протокол>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь>. Так вот ключи -I (--include-directories) и -X (--exclude-directories) относятся только к пути, но не к параметрам.
В версиях > 1.14 возможно при использовании ключей --accept-regex / --reject-regex. Пример: --reject-regex "lang=[^r][^u]"
 
Q: Можно ли средствами Вэ-гета ограничить перечень загружаемых файлов по дате модификации (новее чем, старше чем)?
A: Нет такой возможности.
 
Q: Можно ли при рекурсивной или множественной загрузке произвольно задать целевые пути и/или имена файлов на основе пути/имени по-умолчанию (применить транслитерацию, отбросить хвостовую часть) или хотя бы независимо (сгенерировать случайно или по счетчику)?
A: Нет.
 
Q: То — нельзя, это — невозможно. Почему все так плохо?
A: Потому что Вэ-гет на настоящий момент — базовая программа, предоставляющая только самый базовый функционал. Если вы уперлись в потолок ее возможностей, просто смените ее на другой инструмент. Из неинтерактивных свободных программ наиболее функциональными будут:
aria2c — для загрузки одиночных файлов по HTTP(S), FTP, бит-торренту;
httrack — для рекурсивной загрузки («зеркалирования») веб-сайтов;
lftp — для работы по FTP, FTPS, SFTP, FISH, а также с листингами, отдаваемыми по HTTP(S) (пример).
curl — для работы с одиночными файлам по HTTP(S), FTP(S) и многими другими протоколами на более низком уровне.
 
Разное.
GUI для Wgetа
 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.

Всего записей: 1503 | Зарегистр. 17-06-2003 | Отправлено: 12:39 08-11-2003 | Исправлено: VictorVG2, 22:57 06-01-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrecool
> Пока не удалил символ $ батник не работал.
А зачем вы его туда добавили? Это приглашение интерактивного интерпретатора.
 
> но еще и все файлы  которые лежали в /www/
Да, действительно, извините. Ну тогда прозрачнее всего просто-напросто:
$ wget --mirror ftp://логин:пароль@имя_сервера/мой_домен/www/папку_1/ ftp://логин:пароль@имя_сервера/мой_домен/www/папку_2/

----------
Спроси, где спросить!

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 03:59 08-10-2013 | Исправлено: ASE_DAG, 04:01 08-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
 При копировании создаются три папки @имя_сервера/мой_домен/www/
можно ли это изменить и копировать в одну с именем backup

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 04:03 08-10-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrecool
> При копировании создаются три папки @имя_сервера/мой_домен/www/  
Как это понимать? Три папки с одним именем?
 
> можно ли это изменить и копировать в одну с именем backup
Можно. Я не понял, что именно вам надо, поэтому посмотрите сами в мане на описание ключей --directory-prefix, --no-host-directories, --cut-dirs и скомбинируйте, как нужно.

----------
Спроси, где спросить!

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 04:10 08-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
>Я не понял, что именно вам надо
 
Нужно скопировать с сайта только две папки (со всем содержимым что они имеют) на свой компьютер в папку backup.
Вот сделал картинку то что нужно в итоге получить.
http://img89.imageshack.us/img89/1906/smdi.png
 

Цитата:
wget --mirror ftp://логин:пароль@имя_сервера/мой_домен/www/папку_1/ ftp://логин:пароль@имя_сервера/мой_домен/www/папку_2/

Этот код работает, Спасибо!
Но как я понимаю происходит два последовательных подключения к серверу?

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 10:32 08-10-2013 | Исправлено: andrecool, 11:05 08-10-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrecool
> Но как я понимаю происходит два последовательных подключения к серверу?
Возьмите ключ --debug и посмотрите, что там происходит. ;-) Если вы про управляющее соединение (по 21 порту), то да, очевидно, что два.


----------
Спроси, где спросить!

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 11:20 08-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
ключ --no-host-directories не создает папу с именем сервера
ключ --directory-prefix=backup создает папку backup  
 
не пойму как избавиться от папок /мой_домен/www/
что бы папка_1 и папка_2 сохранялась в папке backup, без папок /мой_домен/www/

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 12:01 08-10-2013 | Исправлено: andrecool, 12:04 08-10-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrecool
Третий упомянутый мною ключ --cut-dirs.

----------
Спроси, где спросить!

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 12:12 08-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
wget --no-host-directories --directory-prefix=backup --cut-dirs --mirror

Попробовал так, но так вообще не работает.
 

Код:
-nH --cut-dirs=2  
--directory-prefix=backup
--mirror  
--user=логин
--passwd=пароль
ftp://ftp.имя_сервера/мой_домен/www/папка_1/
ftp://ftp.имя_сервера/мой_домен/www/папка_2/

Долго мучился и вот что получилось, правильно это или нет не знаю ...но это работает!
 
Добавлено:
Подскажите есть ли какие то приоритеты ключей,  какой ключ пишется первый, второй, третий и так далее?  
И еще один вопрос, можно ли сделать что бы на выходе получался готовый архив с бекапом?

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 12:35 08-10-2013 | Исправлено: andrecool, 15:30 08-10-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
andrecool
 
Специальных приоритетов ключей у UNIX программ нет, но общий порядок их включения в командную строку описан в документации. Вы можете легко сделать локальную копию справки именно по той версии программы что стоит у вас (в старых версиях не все команды реализованы, да и ошибки возможны) - наберите в командной строке команду:
 
wget --help > %TEMP%\wget.txt&&notepad %TEMP%\wget.txt
 
она вам выведет на экран справку по командам и ключам Wget которая при этом будет сохранена в каталоге %TEMP% как файл %TEMP%\wget.txt и вы сможете её скопировать в любое удобное вам место.
 
Что касается архива, то сам Wget его не сделает, но можно создать конвейер команд похожий на тот, каким я справку сохранил - после завершения работы Wget мы перенаправим результат на вход консольного архиватора и в итоге получим архив. Такое решение не только возможно, но часто используется в ОС UNIX и на мэйнфреймах т.к. упрощает управление задачами и экономит непроизводительные потери времени ЦП.

Отправлено: 17:54 08-10-2013 | Исправлено: Victor_VG, 17:57 08-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
У меня ведь не ОС UNIX а Windows

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 18:05 08-10-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
andrecool
 
Конвейер команд реализуется средствами командного процессора CCMD.EXE и его оболочки CMD.EXE Одиночный & предписывает выполнение следующей команды после выполнения предыдущей вне зависимости от успешности операции, двойной && говорит "выполнить следующую команду если предыдущая была выполнена успешно". Так что данный приём в cmd-файле (именно в CMD а не BAT!) у вас сработает. Команда была приведена именно в формате Windows 2000/XP.

Отправлено: 19:16 08-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
но можно создать конвейер команд похожий на тот, каким я справку сохранил - после завершения работы Wget мы перенаправим результат на вход консольного архиватора и в итоге получим архив.

у меня получился такой батник:

Код:
wget -nH --cut-dirs=2 --directory-prefix=backup --mirror --user=user --passwd=password ftp://ftp.имя_сервера/мой_домен/www/папка_1/ ftp://ftp.имя_сервера/мой_домен/www/папка_2/

на выходе получатся папка "backup" и в ней "папка_1" и "папка_2" с разными файлами.
Осталось дописать батник что бы он удалил все файлы ".listing" из скаченных папок и создал архив в папке "backup" с именем дата_создания_архива.zip
 
Нашел 7-Zip версия командной строки (7za920), дальше не знаю как это все закончить.
У меня как в анекдоте: нутром чувствую а по научному сказать не могу!  
 
Помогите пожалуйста!

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 19:20 08-10-2013 | Исправлено: andrecool, 20:43 08-10-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
andrecool
 
Через пару тройку часов напишу вам скрипт. Годится? Сейчас надо срочно бежать на встречу. Идея верная, с остальным разберёмся.

Отправлено: 19:40 08-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
Ок! ...заранее Спасибо!

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 19:46 08-10-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
andrecool
 
Пробуйте. Сохранить как backup.cmd, в качестве архиватора использовать 7z.exe (идёт в архиве с 7-Zip):

Цитата:
@echo off
@echo "%1 - user_name"
@echo "%2 - user_password"
@echo "%3 - URL1 w/o distantion folder"
@echo "%4 - distantion folder 1"
@echo "%5 - URL 2  w/o distantion folder"
@echo "%6 - distantion folder 2"
get -nH --cut-dirs=2 --directory-prefix=backup --mirror --user=%1 --passwd=%2 %3/%4/ %5/%6/&&del /f/s/q ./backup/*.listing&&7z.exe -a -tzip %4-%DATE%-backup.zip %4*&&7z.exe -a -tzip %6-%DATE%-backup.zip %6*&&rdmdir /s/q ./backup&&exit

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

Отправлено: 01:23 09-10-2013 | Исправлено: Victor_VG, 01:58 09-10-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrecool
 
wget --help — это очень скудная справка, стоит пользоваться хотя бы маном (по-хорошему он должен устанавливаться вместе с утилитой и вызываться как $ man wget, но я не знаю, право; установлен ли он у вас на Винде. Но ведь всегда можно найти его в сети) или еще более полным GNU Info ($ info wget, но опять же можно найти в сети).
 
Вместе с этим, даже из $ wget --help можно узнать, что оставление .listingа — это определяемое поведение.
Цитата:
--no-remove-listing     don't remove `.listing' files.
И что вы сами задали его, указав ключ --mirror
Цитата:
-m,  --mirror             shortcut for -N -r -l inf --no-remove-listing.

 
Т. о. можно переписать приказ в виде:
 
$ wget  --recursive --timestamping --level=inf --no-host-directories --cut-dirs=2 --directory-prefix=backup --user=user --passwd=password ftp://ftp.имя_сервера/мой_домен/www/папка_1/ ftp://ftp.имя_сервера/мой_домен/www/папка_2/
 
и не удалять ничего вручную.

----------
Спроси, где спросить!

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 05:36 09-10-2013 | Исправлено: ASE_DAG, 05:37 09-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG Не знаю почему но у меня скрипт не работает, может я где то ошибся?

Цитата:
@echo off  
@echo "%1 - мое_name"  
@echo "%2 - мой_password"  
@echo "%3 - ftp://ftp.имя_сервера/мой_домен/www/папка_1/"  
@echo "%4 - папка_1/"  
@echo "%5 - ftp://ftp.имя_сервера/мой_домен/www/папка_2/"  
@echo "%6 - папка_2/"  
wget -nH --cut-dirs=2 --directory-prefix=backup --mirror --user=%1 --passwd=%2 %3/%4/ %5/%6/&&del /f/s/q ./backup/*.listing&&7z.exe -a -tzip %4-%DATE%-backup.zip %4*&&7z.exe -a -tzip %6-%DATE%-backup.zip %6*&&rdmdir /s/q ./backup&&exit

 
Добавлено:
ASE_DAG Ваш скрипт работает, и файлы ".listing" не сохраняются.
-N --timestamping (Включить сравнение по дате). Не очень понятно значение этого ключа
--level=inf а описание этого ключа я вообще не нашел
У меня wget установлен. Но вот беда, не знание английского и пользуюсь переводчиком, и не всегда понимаю смысл этого перевода.

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 08:21 09-10-2013 | Исправлено: andrecool, 09:03 09-10-2013
SkaBoy1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Есть задача - скачать с netprint.ru альбомы с фото, пытался решить проблему разными способами, но все сводится к wget. Сам не сильно в нем разбираюсь, поэтому прошу Вашей помощи.
Необходимо загрузить фото из альбомов по ссылкам вида http://www.netprint.ru/moscow/136/965560/x/ (где x число от 0 до последней фото в альбоме - 1), причем возможно это только при введенном логине и пароле (в браузере), браузер после ввода ссылки возвращает (насколько я понимаю) ссылку непосредственно на файл (вида http://www.netprint.ru/moscow/136/965560/0/IMG_6928.jpg).
 
Очень хочу решить этот вопрос, т.к. это единственное место где остались мои фотографии (оригиналы умерли на старом харде), находил плагины к total commander для загрузки из netprint.ru, но они предлагают загрузку только без пароля (в низком разрешении, а не оригиналы) и не работают. Обращался к администрации netprint, они в помощи отказали.
 
Скажите впринципи - возможно ли это сделать wget, или нужно искать другие способы? В какую сторону вообще копать. Готов предоставить любую дополнительную информацию.
 
Заранее премного благодарен.
 

Всего записей: 20 | Зарегистр. 15-07-2006 | Отправлено: 09:19 09-10-2013 | Исправлено: SkaBoy1, 09:20 09-10-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
andrecool
 
И не должен - вы параметры как задали? %4 = ftp://ftp.имя_сервера/мой_домен/www/папка_1/"  %5="" и получили в итоге мусор. Правильно %4= ftp://ftp.имя_сервера/мой_домен/" %5="www/папка_1/" и т.д. чего и ждёт скрипт. Ведь я там вроде все расписал?

Отправлено: 11:23 09-10-2013
andrecool

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
Я совсем запутался куда и что прописывать  
Код:
@echo off  
@echo "%1 - мое_name"  
@echo "%2 - мой_password"  
@echo "%3 - ftp://ftp.имя_сервера/мой_домен/"  
@echo "%4 - www/папка_1/"  
@echo "%5 - ftp://ftp.имя_сервера/мой_домен/"  
@echo "%6 - www/папка_2/"  
так что ли надо? но это тоже не работает.
 
И на счет файлов  ".listing" как советует ASE_DAG изменить ключи,  
и тогда в скрипте не нужно удаление файлов  ".listing"
Цитата:
wget  --recursive --timestamping --level=inf --no-host-directories --cut-dirs=2 --directory-prefix=backup --user=user --passwd=password ftp://ftp.имя_сервера/мой_домен/www/папка_1/ ftp://ftp.имя_сервера/мой_домен/www/папка_2/  
Этот скрипт я проверил, и файлы  ".listing" не создаются.

Всего записей: 18 | Зарегистр. 21-09-2013 | Отправлено: 12:59 09-10-2013 | Исправлено: andrecool, 13:56 09-10-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

Компьютерный форум Ru.Board » Компьютеры » Программы » Wget

Сохранено: 09.06.2016 19:45:47 (c) xForumSaver