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

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

Код:
-m

и норм

Всего записей: 792 | Зарегистр. 10-11-2006 | Отправлено: 11:21 11-10-2011
Dukat



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, есть ли способ после выгрузки сайта сгенерировать список всех полученных файлов? Что-то вроде файла отчёта, но только с именами файлов. Хоть исходные URL'ы, хоть конечные пути.
 
Или остаётся только делать сокращённый вывод -nv и сторонними средствами (grep и пр.) удалять лишнее?

Всего записей: 1320 | Зарегистр. 01-10-2006 | Отправлено: 08:09 13-10-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dukat
> файла отчёта, но только с именами файлов
Нет, кастомизировать вывод отладки сабж не дает.
 
> остаётся только делать сокращённый вывод -nv и сторонними средствами удалять лишнее?
А это что, проблема?  
Если нужна будет помощь, попробуйте обратиться в ветку «UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;».

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 15:39 13-10-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Dukat
 
ППР (Проще Паренной Репы)
 
wget <command>&ls -fR <wget_out_dir> > ../files.txt
 
понятно, что ls надо натравить на тот же каталог куда всё выгружено. Список файлов с подкаталогами будет в каталоге на уровень выше, зато не будет включать сам files.txt. И не за чем в иные ветки ходить. И так всё ясно. Ну, а  тех, у кого ls нет, есть старый добрый dir /S /O:N /X и соответственно:
 
wget <command>&dir /S /O:N /X <wget_out_dir> > ../files.txt
 
и чего мудрить со скриптами, консолями и прочей ересью, коли сам Великий Дядя Стиви сказал:
 
"...UNIX и ёё клоны есть величайшее зло Вселенной и подлежит искоренению огнём и калёным железом, и нет иного бога кроме Microsoft и Windows пророк его. Юзверь не должен думать, он должен только нам вовремя денежку платить, а думать за него мы сами будем..."?

Отправлено: 17:45 13-10-2011 | Исправлено: Victor_VG, 17:50 13-10-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
> ls
Слишком просто, чтоб быть решением поставленного кем-то вопроса. Вероятно, загрузка идет (может идти) не в пустую директорию.  
В общем случае, чтоб узнать, что было сделано, всегда лучше смотреть в логи, а не на результат. Особенно, если распарсить его никакой проблемы не составляет:
$ wget -nv -o wget.log blah-blah
$ grep -Po '(?<=URL:)\S*' wget.log # урлы
$ grep -Po '(?<=-> ")[^"]*' wget.log # локальные файлы


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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 18:10 13-10-2011 | Исправлено: ASE_DAG, 18:11 13-10-2011
Dukat



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Victor_VG
Да уж, зациклился я на выводе самого wget'а :)
 
С ls и dir, конечно, понятно, но дело у меня в том, что wget запускается из внешней самописной утилиты, да и с платформой ещё не ясно. Надеялся "одним махом" и список файлов для последующей обработки получить.
Что ж, придётся комбинировать варианты, предложенные Victor_VG :thanks:

Всего записей: 1320 | Зарегистр. 01-10-2006 | Отправлено: 18:17 13-10-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dukat
> из внешней самописной утилиты, да и с платформой ещё не ясно
Ну и что вы нам голову морочите? Что, сложно переложить расшифровку лога на эту вашу утилиту? На чем вы ее таком пишите, что PCRE нельзя юзать?

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 18:22 13-10-2011 | Исправлено: ASE_DAG, 18:22 13-10-2011
Dukat



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

Цитата:
Вероятно, загрузка идет (может идти) не в пустую директорию.

Верно, но в моём случае это не играет роли...

Всего записей: 1320 | Зарегистр. 01-10-2006 | Отправлено: 18:22 13-10-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
ASE_DAG
 
Ну, как оказалось, в данном случае простое решение подходит. В конце концов можно и с тем же sed потом логи распарсить отфильтровав из них более старые записи. Но, это уже как Dukat задача второй очереди. Потому предлагаю считать её в первом приближении решённой т.к. любой из нас периодически так думает - вроде и чуешь решение есть, и что-то на одном месте заставляет топтаться. Главное этот ступор испарился, а там Dukat сам как автор придумает нужное для его задачи решение.
 
 

Отправлено: 19:00 13-10-2011 | Исправлено: Victor_VG, 19:01 13-10-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
> отфильтровав из них более старые записи
> тем же sed потом логи распарсить
Какие «более старые»? Речь о том, чтобы получить перечень загруженных за один запуск сабжа файлов. А за один запуск — один файл вывода отладки (STDERR). Просто выбираем из него все совпадения с регуляркой (которую, я товарищу Дукату даже написал уже, причем для обоих задач).  
А Сед здесь совершенно не к чему — если Вэ-гет запускается некоей утилитой, пусть эта утилита лог и парсит; реализовать это — проблем нет — PCRE сейчас для любого языка доступны.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 19:20 13-10-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
ASE_DAG
 
Мы знаем что он как автор задумал? Нет, и потому наши советы мне думается бесполезны.

Отправлено: 20:56 13-10-2011
Dem_anywhere



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вроде бы 1.13.4 откомпилили
http://dl.dropbox.com/u/2554170/wget-1.13.4/wget.exe

Всего записей: 230 | Зарегистр. 28-02-2006 | Отправлено: 23:39 15-10-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Dem_anywhere
 
И штука пришла интересная. Вот что она выводит по wget --version:

Цитата:
GNU Wget 1.13.4 built on mingw32.
 
+digest +https +ipv6 +iri -large-file +nls +ntlm +opie +ssl/openssl  
 
Wgetrc:  
    C:/MinGW/msys/local/etc/wgetrc (system)
Locale: C:/MinGW/msys/local/share/locale  
Compile: gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC="/usr/local/etc/wgetrc"  
    -DLOCALEDIR="/usr/local/share/locale" -I. -I../lib -I../lib  
    -I/c/Programs/GTK16/include -I/usr/local/include -mmmx -Os  
Link: gcc -mmmx -Os -L/c/Programs/GTK16/lib -Wl,-s /usr/local/lib/libiconv.a  
    /c/Programs/GTK16/lib/libintl.dll.a -L/c/Programs/GTK16/lib  
    /c/Programs/GTK16/lib/libssl.a /c/Programs/GTK16/lib/libcrypto.a  
    /c/Programs/GTK16/lib/libz.a -ldl -lz -lws2_32 -lgdi32 -lidn  
    ftp-opie.o mswindows.o openssl.o http-ntlm.o ../lib/libgnu.a  
 
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://www.gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
Originally written by Hrvoje Niksic <[email protected]>.
Please send bug reports and questions to <[email protected]>.

а используемая у меня например:

Цитата:
GNU Wget 1.12.1-dev Mar 04 2010 (mainline-013c8e2f5997) built on Windows-MinGW.
 
+digest +ipv6 -nls +ntlm +opie +md5/builtin +https -gnutls +openssl  
-iri  
 
Wgetrc:  
Compile: gcc -DHAVE_MD5 -DENABLE_DIGEST -DENABLE_IPV6 -DENABLE_OPIE -DWINDOWS  
    -DHAVE_CONFIG_H -O3 -Wall -I. -I../lib -I../md5  
    -I../../openssl-1.0.0a/include -DHAVE_LIBSSL -DENABLE_NTLM  
Link: gcc -s -o wget-1.12.exe cmpt.o convert.o connect.o ftp.o ftp-basic.o  
    ftp-ls.o ftp-opie.o host.o html-parse.o html-url.o http.o init.o  
    log.o main.o ../md5/md5.o netrc.o ../lib/c-ctype.o hash.o  
    progress.o gen-md5.o cookies.o ptimer.o recur.o res.o retr.o url.o  
    utils.o version.o ../lib/xmalloc.o ../lib/xalloc-die.o  
    ../lib/quote.o ../lib/exitfail.o ../lib/quotearg.o ../lib/error.o  
    ../lib/getpass.o mswindows.o spider.o css-url.o exits.o  
    build_info.o css.o openssl.o http-ntlm.o mswindows.res -lws2_32  
    -L../../openssl-1.0.0a -leay32 -lssl32  
 
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://www.gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
Originally written by Hrvoje Niksic <[email protected]>.
Currently maintained by Micah Cowan <[email protected]>.
Please send bug reports and questions to <[email protected]>.

буду новую тестировать.

Отправлено: 11:18 16-10-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
В общем потестил. Работает у меня с OpenSSL 1.0.0e. А посему собрал в одну кучу:
 
сам бинарник, исходники с ftp.gnu.org, мануал к версии 1.13.4  скомпиленный в CHM и файлик version - выдачу её запроса версии - wget-1.13.4.7z. Может в таком пакете кому и пригодится чтобы по частям не собирать с разных источников.

Отправлено: 15:59 16-10-2011
Pasametr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
При запуске wget.exe на мгновенье выскакивает чёрное окошко и пропадает, как исправаить?
Виндовс XP SP2
wget-1.9.1b

Всего записей: 243 | Зарегистр. 01-07-2011 | Отправлено: 20:53 23-10-2011
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pasametr
Цитата:
При запуске wget.exe на мгновенье выскакивает чёрное окошко и пропадает, как исправаить?  
Например научиться читать: WGET - командлайновая утилита для скачивания

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 21:10 23-10-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasametr
> как исправаить?  
Чтоб не «выскакивало», а молча работало? Да можно как-то (через одно место, правда, я не помню), только к сабжу это не имеет ни малейшего отношения. Спросите в ветке по вашему командному интерпретатору.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 21:25 23-10-2011
Pasametr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
И без ваших приколов разобрался - умники, хорошый Мануальчик по wget дайте...

Всего записей: 243 | Зарегистр. 01-07-2011 | Отправлено: 07:35 24-10-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Pasametr
 
В моём архиве он имеется. Полный официальный мануал. Пользуйтесь на здоровье. Чуть выше на этой же странице. А у Вас может быть и CygWin версия - та без зависимостей вообще не стартует. Я положил ту, которой системных библиотек хватает.

Отправлено: 08:38 24-10-2011
Pasametr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Victor_VG
Спасибо, всё фурычит! За мануал отдельное СПАСИБО, есть ещё добрые люди.

Всего записей: 243 | Зарегистр. 01-07-2011 | Отправлено: 19:31 25-10-2011
Открыть новую тему     Написать ответ в эту тему

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