Страница 25 / 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
igor_andreev

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

Цитата:
дело в том что:  
http://myhost.ru/123.exe весит 1.7мб  
http://host.ru/123.exe 2мб  
они разные хоть и называется одинаково.

Хренасе, это называется как угодно, но никак не "зеркало"

Код:

@echo off
wget -o file.log url1/123.exe
find "' saved [" file.log || wget url2/123.exe

Команда после || выполниться, только если команда до || завершилась с ошибкой

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 21:38 24-04-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev, это то что нужно
 
получается я могу налепить кучу зеркал

Код:
@echo off  
wget -o file.log url1/123.exe  
find "' saved [" file.log || wget url2/123.exe  
find "' saved [" file.log || wget url3/123.exe  
find "' saved [" file.log || wget url4/123.exe  
find "' saved [" file.log || wget url5/123.exe  

 
Спасибо вам огромное!

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 22:26 24-04-2008
igor_andreev

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

Цитата:
налепить кучу зеркал

Зеркало это один и тот-же файл(размер-дата-md5), находящийся на разных серверах. А у тебя там что-то мистическое и загадочное с разными размерами. Я так не пробовал качать, как ты написал, но наверно сработает, только в каждое зеркало добавляй тогда запись лога(не -a, а именно -o)
find "' saved [" file.log || wget -o file.log url2/123.exe  
find "' saved [" file.log || wget -o file.log url3/123.exe
... и т.д.
После первого-же удачно скачанного файла 123.exe остальные зеркала обрабатываться не будут
 
 
Добавлено:
А еще есть риск напороться на то, что wget скачает 404 страницу или еще какой-нить редирект и бодро отпишется в логе - saved  
 
Curl.exe в этом плане поприятней, у него есть опция --fail(если сервер вернул ошибку "404 - Not found" - молча заканчивать работу, не сохранять 404-ю страницу на диск)

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 22:39 24-04-2008 | Исправлено: igor_andreev, 22:52 24-04-2008
BakLAN



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

Цитата:
libssl32.dll - это ssleay32.dll, просто имя другое. Чтобы опции линкера типа -lssl32 -leay32 работали.

А почему тогда у Christopher G. Lewis именно ssleay32.dll ? Он, что, другой линкер использует, у которого прописан ssleay32.dll? Почему вообще разные имена у разных линкеров, чем это объясняется?
 
З.Ы. К стати, скомпилился Wget теперь уже без проблем и размер его значительно меньше, чем у Christopher G. Lewis, а когда я добавил опцию -march=k6-2, стал ещё меньше.

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 22:50 24-04-2008
f_serg



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

Цитата:
Почему вообще разные имена у разных линкеров, чем это объясняется?

Линкеру MSVS необходимо передать полное имя библиотеки, типа:

Цитата:
link /NOLOGO /RELEASE /OUT:file.exe file.o ssleay32.lib

Ну, так у них исторически повелось.
А в UNIX (и в MinGW) линкер ld, который принимает, конечно, полные имена файлов, но у него есть опция -l:

Цитата:
ld -s -o file.exe file.o -lssl32

Разбирая параметры командной строки, ld видит, что ему надо подключить библиотеку с именем ssl32, и он в заданный путях ищет файл libssl32.a
Как понимаешь, ssleay32.а передать ключом -l затруднительно.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 08:20 25-04-2008 | Исправлено: f_serg, 10:01 28-04-2008
Vby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, возможно ли закачать html-страничку на которую попадаешь после Web FORM-Based аутентификации?

Всего записей: 737 | Зарегистр. 16-09-2004 | Отправлено: 10:32 25-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vby
Конечно возможно. Вот так Только измени под свои нужды, посмотри в коде своей html-страницы форму с авторизацией. Обычно это где то между тегами <FORM NAME="login" ACTION="еще что-то" METHOD="post"> ... </FORM>. Если вдруг самому не получится - скажи адрес страницы с авторизацией(логин и пароль не надо ), подскажу.

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 11:56 25-04-2008 | Исправлено: igor_andreev, 11:58 25-04-2008
BakLAN



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
Тогда, меня волнует в таком случае как будут некоторые другие программы (например, в Miranda подключение по SSL в плагине Jabber) искать библиотеки SSL, т.е. по какому имени файла? Получается зависимость от того, каким компилятором скомпилены биллиотеки.
 
И ещё вопрос. Если процессор K6-2+, но его CPUID K6-III (так определяет, например, Everest и многие другие приложения), то какую лучше оптимизацию включать при компиляции: для K6-2 или K6-3 ?
 
З.Ы. И всё ещё до сих пор не могу понять, почему изначально у меня не получилось скомпилить Wget, предварительно не скомпилив SSL.

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 00:17 26-04-2008 | Исправлено: BakLAN, 01:33 26-04-2008
Mike1978

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как можно удалить файлы на ftp-сервре???
т.е. мне нужно не _скопировать_, а _переместить_ файлы с ftp-сервера на локальный комп.

Всего записей: 76 | Зарегистр. 02-09-2003 | Отправлено: 17:56 26-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mike1978
У wget нет такого. Это curl может, curl --quote "DELE file.ext" ...

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 18:18 26-04-2008
f_serg



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

Цитата:
Получается зависимость от того, каким компилятором скомпилены биллиотеки.

Получается зависимость от того, каким компилятором скомпилены другие программы. Скомпилены с ssleay32.lib - будут требовать наличие ssleay32.dll, скомпилены с libeay32.a - будут требовать наличие libeay32.dll.

Цитата:
Если процессор K6-2+, но его CPUID K6-III

Думаю, 2+ и 3 совместимы по инструкциям (но не уверен). Так что я бы попробовал оптимизацию ставить для K6-3.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 10:01 28-04-2008
Victor_VG

Редактировать | Цитировать | Сообщить модератору
f_serg
 
Нет, не совместимы. К-6-2+ аналог Pentium II и не имеет SSE инструкций и главное, набор инструкций у него меньше, а вот полный K6-3 аналог Pentium !!! и SSE инструкции уже имеет. Дополнительно его система команд расширена инструкциями 3D New! Pro (?). Поэтому, для гарантии работоспособности я бы выбирал оптимизацию для К6-2.

Отправлено: 10:38 28-04-2008 | Исправлено: Victor_VG, 10:40 28-04-2008
f_serg



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

Цитата:
Поэтому, для гарантии работоспособности я бы выбирал оптимизацию для К6-2.

Согласен. При сборке OpenSSL, gcc вполне может сгенерировать инструкции SSE.
BakLAN
Тогда только K6-2.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 07:07 29-04-2008
BakLAN



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
Так и зделал: -march=K6-2 применил как для OpenSSL, так и для Wget. Другие оптимизации не применял, поскольку не очень-то в них разбираюсь. Благодарю за помощь.

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 17:21 29-04-2008
Alex1985

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в wgetrc забито input=links.txt
а надо что бы при запуске батника

Код:
wget -P ipfilter_update http://www.hqshare.net/ipfilter.dat.gz

wget этот параметр (input=links.txt из wgetrc) игнорировал.
вот с директорией для сохранения понятно. в конфиге тоже прописана, но в батнике пишется своя и он кладёт файл куда надо, а вот с input...
как?

Всего записей: 711 | Зарегистр. 07-05-2004 | Отправлено: 00:01 02-05-2008 | Исправлено: Alex1985, 00:06 02-05-2008
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Alex1985
 
Исправь в исходнике и откомпилируй. Тут и к бабке не ходить, все в твоих руках. Али не решился и решил себя проверить? Разумно, лучше подстраховаться, чем потом дров наломать.

Отправлено: 12:09 02-05-2008
Alex1985

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кажется, меня не так поняли
Взял http://www.christopherlewis.com/WGet/wget-1.11.1b.zip
Создал .wgetrc с содержимым

Код:
input=links.txt
tries=0
retry-connrefused=1
continue=1
dir_prefix=D:\Downloads\

Это для 1 задачи.
 
Вторая задача: хочу создать батник который будет обновлять IPFilter у eMule и uTorrent

Код:
wget -P ipfilter_update http://www.hqshare.net/ipfilter.dat.gz

Проблема как раз в том, что при запуске батника, wget ищет ссылки в links.txt. Какую команду для wget надо дописать в батник, что бы он не искал ссылок в links.txt. Это вообще то возможно? А то я уже сомневаюсь.

Всего записей: 711 | Зарегистр. 07-05-2004 | Отправлено: 14:30 02-05-2008 | Исправлено: Alex1985, 14:32 02-05-2008
Aeismann



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex1985
ты можешь создать два разных конфига, и тогда в батнике их указывать:
 
батник1
---
SET WGETRC=%CD%\.wgetrc1
wget ...
---
 
батник2
---
SET WGETRC=%CD%\.wgetrc2
wget ...
---
 
Добавлено:
Или вообще указывай links.txt в параметрах ком. строки, а не в конфиге, так будет логичней, имхо

Всего записей: 174 | Зарегистр. 24-10-2006 | Отправлено: 18:14 02-05-2008
Alex1985

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

Цитата:
Или вообще указывай links.txt в параметрах ком. строки, а не в конфиге, так будет логичней, имхо

то что надо. спасибо.

Всего записей: 711 | Зарегистр. 07-05-2004 | Отправлено: 12:48 03-05-2008
shakermaker

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
 
Я пытаюсь загрузить файл, используя следующий синтаксис:
 

Код:
wget -aC:\LOGS\symcdefs-unix.sh.log -t10 --no-passive-ftp -OC:\VD\symcdefs-unix.sh ftp://ftp.symantec.com/AVDEFS/symantec_antivirus_corp/static/symcdefs-unix.sh

 
Файл начинает загружаться, однако, дойдя до 100%, программа на 5-10 минут задумывается и начинает загружать файл повторно, дописывая его в уже загруженный. Такое происходит каждый второй запуск программы. В логе следующие записи:
 

Код:
--2008-05-13 14:01:56--  ftp://ftp.symantec.com/AVDEFS/symantec_antivirus_corp/static/symcdefs-unix.sh
           => `C:/VD/symcdefs-unix.sh'
Resolving ftp.symantec.com... 69.22.137.33, 69.22.137.38, 69.22.137.43, ...
Connecting to ftp.symantec.com|69.22.137.33|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /AVDEFS/symantec_antivirus_corp/static ... done.
==> SIZE symcdefs-unix.sh ... 55836515
==> PORT ... done.    ==> RETR symcdefs-unix.sh ... done.
Length: 55836515 (53M)
 
     0K .......... .......... .......... .......... ..........  0% 58.2K 15m35s
    50K .......... .......... .......... .......... ..........  0%  122K 11m30s
   100K .......... .......... .......... .......... ..........  0%  226K 9m0s
   150K .......... .......... .......... .......... ..........  0%  124K 8m34s
   200K .......... .......... .......... .......... ..........  0%  222K 7m40s
   250K .......... .......... .......... .......... ..........  0%  125K 7m35s
   300K .......... .......... .......... .......... ..........  0%  221K 7m5s
[вырезано]
54450K .......... .......... .......... .......... .......... 99%  124K 0s
 54500K .......... .......... .......                         100%  132K=10m32s
 
2008-05-13 14:12:32 (86.3 KB/s) - Control connection closed.
Retrying.
 
--2008-05-13 14:27:32--  ftp://ftp.symantec.com/AVDEFS/symantec_antivirus_corp/static/symcdefs-unix.sh
  (try: 2) => `C:/VD/symcdefs-unix.sh'
Connecting to ftp.symantec.com|69.22.137.33|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /AVDEFS/symantec_antivirus_corp/static ... done.
==> SIZE symcdefs-unix.sh ... 55836515
==> PORT ... done.    ==> REST 55836515 ... done.    
==> RETR symcdefs-unix.sh ... done.
Length: 55836515 (53M), 0 (0) remaining
 
        [ skipping 54500K ]
 54500K ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,... .......... ..........100%  110K 0s
 54550K .......... .......... .......... .......... ..........100% 58.8K 0s
 54600K .......... .......... .......... .......... ..........100% 60.4K -1s
 54650K .......... .......... .......... .......... ..........100% 22.1K -3s
 54700K .......... .......... .......... .......... ..........100% 35.9K -5s
 54750K .......... .......... .......... .......... ..........100% 56.2K -6s
 54800K .......... .......... .......... .......... ..........100% 59.9K -7s
 54850K .......... .......... .......... .......... ..........100% 76.3K -7s
 54900K .......... .......... .......... .......... ..........100% 78.2K -8s
 54950K .......... .......... .......... .......... ..........100% 53.2K -9s
 55000K .......... .......... .......... .......... ..........100% 53.7K -10s
 55050K .......... .......... .......... .......... ..........101% 67.0K -10s
 55100K .......... .......... .......... .......... ..........101% 52.1K -11s
 55150K .......... .......... .......... .......... ..........101% 70.4K -12s
 

 
Подскажите, есть ли способ каждый раз корректно обеспечивать завершение программы, чтобы она верно обнаруживала конец загружаемого файла?

Всего записей: 1 | Зарегистр. 13-05-2008 | Отправлено: 15:47 13-05-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 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:40:55 (c) xForumSaver