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



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

Всего записей: 17 | Зарегистр. 24-10-2009 | Отправлено: 15:30 09-04-2014
Skif_off

Редактировать | Цитировать | Сообщить модератору
Кто-нибудь может скомпилть типа by osspack32 , но с OpenSSL 1.0.1g? Или ни к чему торопиться?

Отправлено: 23:28 13-04-2014
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Skif_off
 
Торопится есть к чему - в OpenSSL 1.0.1.5 (1.0.1f)/1.0.2 Beta была ошибка переполнения буфера чтения при работе с TLS CVE-2014-0160 вызывавшая падение программ. Исправлено в OpnSSL 1.0.1.6 (1.0.1g)/1.0.2 beta2.

Отправлено: 23:55 13-04-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время.
Угу. https://db.tt/4Rg7aMLN

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 17:28 14-04-2014
Skif_off

Редактировать | Цитировать | Сообщить модератору
Alex_Piggy
Спасибо, curl-ca-bundle.crt и wget.ini можно оставить прежними?

Отправлено: 17:38 14-04-2014
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Skif_off
 
curl-ca-bundle.crt нужно просто переименовать - Wget считывает файл ca-bundle.crt? но его можно пересоздать заново используя OpenSSL SDK - в нём есть для этого скрипты, а wget.ini если не надо менять свои настройки при необходимости можно просто дополнить через k3diff, WinMerge, TortoiseDiff новыми строками с теми настройками которые надо задать по умолчанию чтобы снова не вводить. Но ключи заданные в комстроке вызова переопределяют значения заданные в конфигах.
 
В опциях есть три изменения:
 
Добавлены:
 
       --no-config           Do not read any config file.
       --start-pos=OFFSET    start downloading from zero-based position OFFSET.
 
Удалена:
 
         --local-filesystem-encoding=ENC use ENC as the default remote encoding. If not specifed, use value of --local-encoding.
 
Alex_Piggy
 
Сейчас стал выводить справку и заметил что в ./locale добавились строки:
 
--no-config           Do not read any config file  
--start-pos=OFFSET    start downloading from zero-based position OFFSET.  
 
которых нет в текущем переводе. Не критично, но возможны "претензиЯ". Не охота возится с POEdit ради пары строк....

Отправлено: 17:49 14-04-2014 | Исправлено: Victor_VG, 18:51 14-04-2014
Skif_off

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

Цитата:
curl-ca-bundle.crt нужно просто переименовать - Wget считывает файл ca-bundle.crt?

В сборке by osspack32 в wget.ini есть ключ
cacertificate = ./curl-ca-bundle.crt
не стал менять. Наверное, подхватит?

Цитата:
Но ключи заданные в комстроке вызова переопределяют значения заданные в конфигах.

У себя поэтому оставил  

Код:
background = off
cacertificate = ./curl-ca-bundle.crt

остальное закомментил, сделав приписку что было по умолчанию

Отправлено: 19:41 14-04-2014
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Skif_off
 
cacertificate = ./curl-ca-bundle.crt - так да, ибо имя файла сертификата указано в конфиге, но тогда он должен находится в одном каталоге с бинарником - путь относительный.

Отправлено: 19:54 14-04-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Skif_off
Только я SSL не трогал. По умолчанию подхватывает сертификаты из cert.pem (тот же файл.)
Насчет оставлять ли старый curl-ca-bundle.crt - не знаю. Я не безопасник. Корневые вроде не скомпроментированы.
 
Victor_VG

Цитата:
Удалена:  --local-filesystem-encoding=ENC use ENC as the default remote encoding. If not specifed, use value of --local-encoding.

Ее никогда не было. vanilla.
 

Цитата:
./locale добавились строки: которых нет в текущем переводе.

Из меня еще тот переводчик... Сделал...

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 20:24 14-04-2014
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Alex_Piggy
 
Удалена: - да, я про это и забыл...
За перевод спасибо.

Отправлено: 21:06 14-04-2014
Skif_off

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

Цитата:
Только я SSL не трогал.

В смысле - скомпилено без OpenSSL?

Отправлено: 23:12 14-04-2014
Victor_VG

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

Цитата:
В смысле - скомпилено без OpenSSL

В смысле того, что подчёркнуто:

Цитата:
GNU Wget 1.15.20-8e5e-dirty Ru-Board Variant built on mingw32.
 
+digest +https +ipv6 +iri +large-file +nls +ntlm +opie +ssl/openssl  
 
Compile:  
    gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC="./wgetrc"  
    -DLOCALEDIR="./locale" -I. -I../lib -I../lib  
    -I/usr/local/winiconv/include -I/usr/local/sslG/include  
    -I/usr/local/winiconv/include -static -fno-unwind-tables  
    -fno-asynchronous-unwind-tables -DPCRE_STATIC -DLARGEFILES  
    -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_PC_NAME_MAX=255 -Os  
    -s -msse2  
Link:  
    gcc -static -fno-unwind-tables -fno-asynchronous-unwind-tables  
    -DPCRE_STATIC -DLARGEFILES -D_LARGEFILE_SOURCE  
    -D_FILE_OFFSET_BITS=64 -D_PC_NAME_MAX=255 -Os -s -msse2 -static -s  
    -L/usr/local/winiconv/lib /usr/local/winiconv/lib/libiconv.a  
    /usr/local/winiconv/lib/libintl.a -L/usr/local/winiconv/lib  
    /usr/local/winiconv/lib/libiconv.a /usr/local/sslG/lib/libssl.a  
    /usr/local/sslG/lib/libcrypto.a -lz -lws2_32 -lgdi32 -lidn -lpcre  
    ftp-opie.o mswindows.o openssl.o http-ntlm.o ../lib/libgnu.a  

библиотеки уже статически слинкованы в бинарник. Так что без OpenSSL дело как-то не обошлось.

Отправлено: 01:26 15-04-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время
Skif_off
В смысле - не трогал ни настройки ни код. Ни OpenSSL ни Wget.
Victor_VG

Цитата:
да, я про это и забыл...

Вообще-то они правильно говорят, что это некорректный подход. И уже есть рабочий вариант - http://lists.gnu.org/archive/html/bug-wget/2013-09/msg00078.html .Просто не успел доделать тогда... Осталось перенести это в mswindows.c и исправить в url.c append_uri_pathel(), чтобы работал с wchar вместо char. Время, время...
 

Цитата:
За перевод спасибо.

Не за что.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 09:01 15-04-2014 | Исправлено: Alex_Piggy, 09:02 15-04-2014
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Alex_Piggy
 
Понятно, ждём. У меня собрать не вышло.

Отправлено: 14:31 15-04-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Victor_VG
Попробуйте, пожалуйста... Этот вариант должен нормально работать с UTF-8 именами без всяких дополнительных ключей... wget_test.zip

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 21:07 25-04-2014
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Alex_Piggy
 
Взял, погоняю, отпишусь.

Отправлено: 21:24 25-04-2014
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Посмотрел, что имеем.  
 
Во всех опытах используем одну команду:
 
wget -nv --input-file=links.txt
 
линки в файле links.txt
 
Серия №1: линки задаём в файле,  кодировка UTF-8, BOM
 
завершение строк CR-LF (DOS/Win) - Invalid URL : Scheme missing. No URLs found in links.txt.
 
завершение строк CR (Mac OS) - Invalid URL : Scheme missing . No URLs found in links.txt.
 
завершение строк LF (UNIX) -  Invalid URL : Scheme missing. No URLs found in links.txt.
 
Серия №2: линки задаём в файле,  кодировка UTF-8, без BOM
 
завершение строк CR-LF (DOS/Win) - успех
 
завершение строк CR (Mac OS) - успех
 
завершение строк LF (UNIX) - успех

 
Таким образом находим проблемное место - если файл кодирован в UTF-8 с сигнатурой BOM (0xEFBBEF), то возникает ошибка парсера, ибо он считает ВОМ частью URL и пытается обработать как текст, последствия серия №1.  
 
Решение: проверяем файл на наличие ВОМ, если она есть ставим начальный адреса чтения на смещение +3 от начала файла пропуская ВОМ. Т.е. логика примерно такая
 
If subst(input,0,3) == 0xEFBBEF Then read(subst(input,3,linght)) Else read(input);
 
думаю, что в общих чертах идея понятна....
 
 

Отправлено: 00:49 26-04-2014 | Исправлено: Victor_VG, 00:53 26-04-2014
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
 
Почему-то не удаётся скачать ни одной из программ страницы видимые внизу, по ссылкам вида (ссылка могла устареть):
 

Код:
http://communitarian.ru/publikacii/sng/yanukovich_vernetsya_osvobozhdat_ukrainu_25032014/0ping.php?t=show5252525252526u525252525253Dhttp52525252525253A52525252525252F52525252525252Fanonymouse.org52525252525252Fcgi-bin52525252525252Fanon-www.cgi52525252525252Fhttp52525252525253A52525252525252F52525252525252Fcommunitarian.ru52525252525252Fpublikacii52525252525252Fsng52525252525252Fyanukovich_vernetsya_osvobozhdat_ukrainu_2503201452525252525252F5252525252526ref525252525253Dhttp52525252525253A52525252525252F52525252525252Fanonymouse.org52525252525252Fcgi-bin52525252525252Fanon-www.cgi52525252525252Fhttp52525252525253A52525252525252F52525252525252Fcommunitarian.ru52525252525252F5252525252526w525252525253D10935252525252526h525252525253D6145252525252526uid525252525253D137713814426052525252526PAGEN_15252525253D108525252526PAGEN_15253D108526PAGEN_1D13&PAGEN_1=44

 
Т.е. скачать например вот так не получается:
 

Код:
wget --user-agent="Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0 SeaMonkey/2.23" "http://communitarian.ru/publikacii/sng/yanukovich_vernetsya_osvobozhdat_ukrainu_25032014/0ping.php?t=show5252525252526u525252525253Dhttp52525252525253A52525252525252F52525252525252Fanonymouse.org52525252525252Fcgi-bin52525252525252Fanon-www.cgi52525252525252Fhttp52525252525253A52525252525252F52525252525252Fcommunitarian.ru52525252525252Fpublikacii52525252525252Fsng52525252525252Fyanukovich_vernetsya_osvobozhdat_ukrainu_2503201452525252525252F5252525252526ref525252525253Dhttp52525252525253A52525252525252F52525252525252Fanonymouse.org52525252525252Fcgi-bin52525252525252Fanon-www.cgi52525252525252Fhttp52525252525253A52525252525252F52525252525252Fcommunitarian.ru52525252525252F5252525252526w525252525253D10935252525252526h525252525253D6145252525252526uid525252525253D137713814426052525252526PAGEN_15252525253D108525252526PAGEN_15253D108526PAGEN_1D13&PAGEN_1=2"

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 06:55 27-04-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, D1D1D1D
Спасибо, что напомнили.  
Сейчас - сохраняйте в папку с полным именем длиной не более 15 символов.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 08:33 27-04-2014
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Не совсем понимаю, вот так? —
 

Код:
wget --user-agent="Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0 SeaMonkey/2.23" "LINK" -P FOLDER

 
Добавлено:
Alex_Piggy
 
С Вашей версией программы работает, спасибо!

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 16:10 27-04-2014 | Исправлено: D1D1D1D, 19:59 27-04-2014
Открыть новую тему     Написать ответ в эту тему

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