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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал вот так:
 
perl -ne "/^#/||print;" url | wget -i -
 
Но хотелось с использованием ключей
--accept-regex
--eject-regex
 
А ничего не получается. Например делаю
 
wget  --reject-regex='yand*' yandex.ru ya.ru
 
Все равно закачиваются оба адреса. Тут есть какая-то тонкость?

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 03:54 26-05-2015 | Исправлено: srkr, 09:01 26-05-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
srkr
 
Да, регулярка не верная - у вас там стоит простая маска под которую попадает всё подряд. Почитайте тут:
 
Perl_regexp.chm
perlre.pdf
 
и сможете написать правильную регулярку. Эти правила не зависят от ОС или наличия установленного перла - нужный для их разбора код есть в вгет-е.
 
 

Отправлено: 15:30 26-05-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
<буквоед>
Victor_VG> под которую попадает всё подряд
 
А если точнее, то все, кроме URI, содержащих подстроки yand, yandd, yanddd и т. д.
</буквоед>
 
srkr> Но хотелось с использованием ключей --accept-regex / --reject-regex.
 
Зачем? Это нетривиальная задача, ибо эти фильтры, так же как и --accept / --reject, не применяются к порядковым аргументам или входному потоку, только к ссылкам, извлеченным в порядке рекурсивного разбора.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 02:04 27-05-2015 | Исправлено: ASE_DAG, 02:06 27-05-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
100% должно сработать вот это:
 
wget  -Onul --reject-regex="yandex\.ru" yandex.ru ya.ru
 
Но не срабатывает. Складывается чувство, что эти ключи не работают совсем.

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 03:15 27-05-2015
srkr

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

Цитата:
фильтры, так же как и --accept / --reject, не применяются к порядковым аргументам или входному потоку, только к ссылкам, извлеченным в порядке рекурсивного разбора
Теперь понятно. Это если ключ "-r" задается.
 
А тогда может кто даст рабочий пример с использованием --reject-regex? Не сложный, по возможности.

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 15:10 27-05-2015 | Исправлено: srkr, 15:19 27-05-2015
Maximus777

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

Всего записей: 617 | Зарегистр. 27-07-2007 | Отправлено: 07:33 10-06-2015
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maximus777
Если вопрос про винду - то...
Обычно wget делает так: вывод пишется в stderr на экран, stdout свободен для возможного вывода туда скачанных данных. Можно сделать так (но тогда нельзя использовать вывод в stdout, -O-):
Цитата:
wget.exe www.ya.ru 2>&1|tee ya_ru.log
tee портирована под вынь.
Под никсами tee уже есть.

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 09:34 10-06-2015
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ, спасибо, работает. Coreutils скачал, путь в Path прописал. У меня и так уже cmd некоторые свойства позаимствовала из мира Linux (прозрачность, очистка через комбинацию клавиш, grep, т.к. половину времени в Лине провожу), так теперь ещё больше стало

Всего записей: 617 | Зарегистр. 27-07-2007 | Отправлено: 13:32 10-06-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Maximus777
 
Их кстати надо смотреть т.к. у вариантов из CygWin и Msys чуть разная реализация алгоритмов и набора ключей. Msys если не пользоваться rxvt (там свои тараканы есть), а пользоваться его bash ведёт себя как нормальная UNIX система, а потому я для себя его предпочитаю - головной боли с командами меньше.

Отправлено: 14:41 10-06-2015
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG, я скачал самый православный вариант, вроде. Отсюда. Да и пока только tee использовал, без ключей. На экран выводит, в лог складывает, как мне и надо было. Только вывод чуть различается. На экран wget выдаёт прогресс в одну строку (благодаря опции --progress=bar:force), а в лог размазывает на несколько. Но это не особо важно.

Всего записей: 617 | Зарегистр. 27-07-2007 | Отправлено: 06:37 11-06-2015
Baltazar500



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
После посыла post - запроса wget заклинивает в loop-загрузке
Цитата:
[  <=>
запрос отрабатывает на ура, что видно по ответу (вывел ответ в stdout -O-), но из-за loop'a wget невозможно использовать в скриптах (пока Ctrl+C не пошлёшь будет висеть), с curl всё пучком, в целом могу юзать его, просто интересно что за wtf с wget ?
 
wget GnuWin32,  1.11.4

Всего записей: 561 | Зарегистр. 19-09-2011 | Отправлено: 10:45 11-06-2015 | Исправлено: Baltazar500, 10:45 11-06-2015
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Baltazar500
А эти данные вообще нужны? В режиме --spider может запрос послать. Или обновить wget например, до актуальной версии... для разнообразия.

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 11:53 11-06-2015
Baltazar500



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

Цитата:
Baltazar500  А эти данные вообще нужны? В режиме --spider может запрос послать.
ок гляну
Цитата:
Или обновить wget например, до актуальной версии... для разнообразия.
ткните носом в свежую win32-сборку (в шапке свежее, но последних билдов нет), cygwin лень качать

Всего записей: 561 | Зарегистр. 19-09-2011 | Отправлено: 13:47 11-06-2015 | Исправлено: Baltazar500, 13:48 11-06-2015
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
Цитата:
ткните носом в свежую win32-сборку (в шапке свежее, но последних билдов нет), cygwin лень качать

Вот тут версия 1.12.1.

Всего записей: 617 | Зарегистр. 27-07-2007 | Отправлено: 14:18 11-06-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Maximus777
 
Там весь утиль десятилетней древности - v5.30, в Msys - v5.9.7 раз, команды тех утилит часто не совпадают с командами ОС семейства UNIX - два. Типа Огнелис породил Зверя али наоборот? Говорят Лис - он по алфавиту первый. Мелочи, зато душу греют.

Отправлено: 15:27 11-06-2015
Baltazar500



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus_777,
Цитата:
Вот тут версия 1.12.1
перерыл все линки в шапке, самая свежая оказалась тут http://forum.ru-board.com/topic.cgi?forum=5&topic=10066&start=0&limit=1&m=1#1
 
1.16.7

Всего записей: 561 | Зарегистр. 19-09-2011 | Отправлено: 16:24 11-06-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Baltazar500
 
Интересно, а где её Gnu Wget v1.16.7 взять-то ????

Цитата:
...самая свежая оказалась тут...
 
1.16.7

коли на серверах GNU.org версии 1.16.7 ещё в природе нету? Может поделитесь секретиком, а то я как-то все их сервера перерыл в поисках провала из будущего - мимо.

Отправлено: 19:11 11-06-2015
Baltazar500



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

Цитата:
Интересно, а где её Gnu Wget v1.16.7 взять-то ????
я спрашивал про generic-версию и на gnu свет клином не сошёлся а поводу линка, смотрите последний по ссылке выше

Всего записей: 561 | Зарегистр. 19-09-2011 | Отправлено: 04:14 12-06-2015 | Исправлено: Baltazar500, 04:17 12-06-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Baltazar500

Цитата:
я спрашивал про generic-версию и на gnu свет клином не сошёлся а поводу линка, смотрите последний по ссылке выше

Вы бы хоть иногда думали прежде чем очередной раз бред нести!  
 

 
Что "линк" на несуществующую версию 1.16.7, что до:

Цитата:
я спрашивал про generic-версию и на gnu свет клином не сошёлся

а где её взять, то родимую коли та самая антилопа на коей у вас свет клином не сошёлся ещё её исходников-то не написала. Её вам зелёные человечки принесли.  
 
Хватит флудить и вешать людям лапшу на уши. Почти в любой теме видны следы этой вашей "трудовой деятельности".

Отправлено: 06:03 12-06-2015
Baltazar500



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

Цитата:
а где её взять, то родимую коли та самая антилопа на коей у вас свет клином не сошёлся ещё её исходников-то не написала. Её вам зелёные человечки принесли
таки 1.16 а "7" был кусок расширения который я в линке не заметил ибо сливал на мобильном устройстве  ...
 
http://sourceforge.net/projects/tumagcc/files/wget-1.16.7z/download
 
так что сорри, если ввёл в заблуждение :\

Всего записей: 561 | Зарегистр. 19-09-2011 | Отправлено: 07:09 12-06-2015
Открыть новую тему     Написать ответ в эту тему

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