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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Это у всех так в этой версии. А исправить конечно можно, если сам умеешь собрать прогу из исходников: собсно находишь ошибку, исправляешь её и компилишь прогу По другому никак...

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 16:20 02-11-2007
Alex_Dragon



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разве что перекомпилировать, исправив. Разработчики лоханулись: вместо обычных пробелов они зачем-то херачат неразрывные — &nbsp; А в русской DOS'овской раскладке CP866 (в которой в русской винде работают консольные программы) этому символу соответствует маленькая буква «а». Естественно, в нерусской винде этого не видно и им кажется, что всё хорошо.
Возможно это особенность среды разработки. У меня есть такое подозрение, что исходники авторы виндовой версии правят кабы не в "Блокноте", а скорее всего в какой-то IDE, слишком умной и автоматически раставляющей пробелы. Под консолью такой глюк вылез бы не только у русских.

Всего записей: 368 | Зарегистр. 05-01-2002 | Отправлено: 17:15 02-11-2007 | Исправлено: Alex_Dragon, 17:21 02-11-2007
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно легко исправить если поменять значение  
HKCU\Control Panel\Intenational\sThousand(reg_sz) на нужное, точку или запятую. Отразится на всех консольных приложениях, т.е вместо пробела в разделителях тысячных будет ваш символ.
 
Небольшой батник:

Код:
 
@echo off
reg add "hkcu\control panel\international" /v sThousand /t reg_sz /d "." /f
wget %*
reg add "hkcu\control panel\international" /v sThousand /t reg_sz /d " " /f
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:32 02-11-2007 | Исправлено: 01MDM, 18:18 02-11-2007
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
01MDM
Круто! У меня и в самом деле в качестве значения этого параметра стоит Неразрывный пробел! Поразительно! Выходит, это не глюк среды разработки, а просто разработчики Wget переусердствовали: используют в качестве разделителя разрядов символ, указанный в реестре?  
Или скорее, даже тот, кто его портировал под Windows!  
 

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

Значение этого параметра соответствует опции "Разделитель групп разрядов" в Панели управления -> "Язык и стандарты" -> вкладка "Числа".  
Влияет она, таким образом, на все приложения Office и другие, которые используют эти параметры.
 
Видимо, в Microsoft не думали, что кто-то станет форматировать числа в консоли, используя значение этого параметра.  
Насколько я понимаю, неразрывный пробел - символ Юникода, и его значение выходит за границы диапазона кодировки DOS. Значит, этот параметр вообще не предназначен для использования в DOS-приложениях! Так что разработчики и впрямь перемудрили...
 
Добавлено:

Цитата:
Небольшой батник:  

За батник спасибо, но хотелось бы, чтобы этот параметр как-то передавался Wget без редактирования реестра. А то мало ли что: может, я захочу прервать выполнение своего батника (работу Wget) - и тогда значение пераметра не вернётся к первоначальному.  
 
Или, может быть, можно как-то менять значение параметра обратно сразу после запуска Wget, не дожидаясь окончания работы Wget? Идеально было бы оформить это всё как DOSKEY-макрос: тогда не придётся думать каждый раз над этой чепухой...  
 
Добавлено:
 
Один момент. Насколько я понимаю, выставить такое Unicode-значение данного параметра, как Неразрывный пробел, через батник не получится? Ведь у батника кодировка DOS...

Всего записей: 1780 | Зарегистр. 22-03-2003 | Отправлено: 21:51 02-11-2007
01MDM



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

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

 
Можно сделать так:

Код:
 
@echo off
reg add "hkcu\control panel\international" /v sThousand /t reg_sz /d "." /f
start /b wget %*
ping -n 2 localhost >nul :: Это чтоб wget успел подхватить значение реестра  
reg add "hkcu\control panel\international" /v sThousand /t reg_sz /d " " /f
exit /b
 

 
Тогда батник не будет ждать завершения закачки. Попробуйте этот вариант.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:31 03-11-2007 | Исправлено: 01MDM, 11:41 03-11-2007
popkov

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

Цитата:
start wget %*  

Прикольно! Так даже удобнее. Спасибо.
 
А возвращение значений на дефолтные я реализовал просто через импорт файла реестра с первоначальным значением параметра. Думаю, через батник вводить неразрывный пробел не получится.
Цитата:
regedit /s "%Wget_DIR%\InternationalOptions.reg"

Всего записей: 1780 | Зарегистр. 22-03-2003 | Отправлено: 01:08 03-11-2007
Dem_anywhere



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

Цитата:
Это у всех так в этой версии. А исправить конечно можно, если сам умеешь собрать прогу из исходников: собсно находишь ошибку, исправляешь её и компилишь прогу По другому никак...  

Очень даже как! Притом мне даже ничего менять не пришлось - просто собрал майкрософтовским компилером.
Тот в консольное приложение вставляет другой пробел, чем в оконное.. Умный

Всего записей: 230 | Зарегистр. 28-02-2006 | Отправлено: 02:12 03-11-2007
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Dem_anywhere
И ровным счётом ничего не менял в исходниках? Собирал по инструкции с  
http://www.christopherlewis.com/WGet/WgetOnWindows.htm
или пришлось до чего-то додумываться самому?
 
Может, опубликуешь своё творение (exe-шник) - например, на http://mihd.net .

Всего записей: 1780 | Зарегистр. 22-03-2003 | Отправлено: 23:34 03-11-2007 | Исправлено: popkov, 23:37 03-11-2007
taurman



Junior Member
Редактировать | Профиль | Сообщение | | Цитировать | Сообщить модератору
Как сделать чтоб Wget запоминал место, с которого прервалась закачка?
Чтобы при повторной попытке закачать сайт, он это делал с места обрыва, а не передлопачивал заново все ссылки.
Хоть и есть такой полезный ключик как --no-clobber (Не модифицировать локальные файлы во время рекурсивной выборки иерархии документов).
Но это не решает проблему. Есть ли какойто другой ключик для продолжения зеркалирования сайта с места обрыва?

Всего записей: 50 | Зарегистр. 03-03-2006 | Отправлено: 08:33 07-11-2007
MaxPolulyakh



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
У меня снова вопрос.
 
Есть такой вот ресурс. http://ftp.isu.edu.tw/pub/Windows/Edskes/n/
Каждый день там выкладывается, среди прочего, свежий релиз пары антивирусных сканеров, в данном случае - NOD32.
 
Файлы имеют имена вида nod32_20071106.exe. Реально ли написать скрипт для wget, чтобы он запускаясь раз, скажем, в неделю, скачивал только файл за этот день, а не все из этой папки?
 
Доступ к этому ресурсу есть и по ftp, протокол в адресе поменяйте просто и всё.

Всего записей: 45 | Зарегистр. 24-06-2005 | Отправлено: 15:23 07-11-2007
Aeismann



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
%DATE% в батнике раскрывается в текущую дату, только вот я не знаю, как изменить формат... думаю, легче наваять скриптик на VBscript

Всего записей: 174 | Зарегистр. 24-10-2006 | Отправлено: 18:06 07-11-2007
NoAngel777



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
 
Собрано с MSVC 8.0 SP1 Express Edition. Немного модифицированы ключи компилятора с целью уменьшить объём output binary. требует установки VC 8.0 SP1 runtimes. собрано с последней OpenSSL, тоже скомпилированной из исходников. Вархиве также версия без поддержки SSL.
 
Wget 1.11 beta 1: http://tinyurl.com/ywxbcy

Всего записей: 2521 | Зарегистр. 04-04-2006 | Отправлено: 18:16 07-11-2007
popkov

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

Цитата:
Собрано с MSVC 8.0 SP1 Express Edition. Немного модифицированы ключи компилятора с целью уменьшить объём output binary. требует установки VC 8.0 SP1 runtimes. собрано с последней OpenSSL, тоже скомпилированной из исходников. Вархиве также версия без поддержки SSL.  
 
Wget 1.11 beta 1: http://tinyurl.com/ywxbcy  

 
Спасибо! Работает отлично. В качестве разделителей групп разрядов выступает запятая. Вроде, VC 8.0 у меня не установлены, но всё равно работает, слава богу... Никогда ещё wget не требовал установки всякой дополнительной фигни - в этом одно из его ценнейших преимуществ!...

Всего записей: 1780 | Зарегистр. 22-03-2003 | Отправлено: 18:59 07-11-2007 | Исправлено: popkov, 19:00 07-11-2007
mselin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Чудеса! Пытаюсь обновлять ключ антивируса drweb:
 
wget.exe --no-directories --continue -Adrweb32.key -P"C:/Program Files/DrWeb/"  "ftp://username%%40mydomain.ru:[email protected]/*.*"
:end
 
Если в директории C:/Program Files/DrWeb/ ключа drweb32.key нет, то он туда записывается и все ОК. Но если в ней лежит старый, то у файла drweb32.key обновляется дата изменения, но сам файл остается тот же При этом в логах:
`C:/Program Files/DrWeb/drweb32.key' saved [1420]

Всего записей: 53 | Зарегистр. 25-09-2006 | Отправлено: 06:28 08-11-2007
iglezz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mselin
ключик--continue отвечает за докачку файлов, здесь он не  уместен

Всего записей: 573 | Зарегистр. 18-02-2003 | Отправлено: 10:02 08-11-2007
mselin

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

Цитата:
ключик--continue отвечает за докачку файлов, здесь он не  уместен

Убрал --continue, теперь он вместо перезаписи drweb32.key создает drweb32.key.1 drweb32.key.2 и т.д

Всего записей: 53 | Зарегистр. 25-09-2006 | Отправлено: 14:02 08-11-2007
iglezz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mselin
хм, в общем то логично...
можно тфк:
wget.exe -O"C:/Program Files/DrWeb/drweb32.key"  "ftp://username%%40mydomain.ru:[email protected]/drweb32.key"

Всего записей: 573 | Зарегистр. 18-02-2003 | Отправлено: 16:01 08-11-2007
mselin

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

Всего записей: 53 | Зарегистр. 25-09-2006 | Отправлено: 06:12 09-11-2007
mselin

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

Цитата:
wget.exe -O"C:/Program Files/DrWeb/drweb32.key"  "ftp://username%%40mydomain.ru:[email protected]/drweb32.key"

то при запуске задания без интернет соединения файл drweb32.key получается нулевой длины... Что можно сделать?

Всего записей: 53 | Зарегистр. 25-09-2006 | Отправлено: 06:28 11-11-2007
iglezz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mselin
 
test.bat
Код:
@ECHO off
ping -n 1 ftp.mydomain.ru
if errorlevel 1 goto ineta_netu
wget.exe -O"C:/Program Files/DrWeb/drweb32.key"  "ftp://username%%40mydomain.ru:[email protected]/drweb32.key"
exit
 
:ineta_netu
 

Всего записей: 573 | Зарегистр. 18-02-2003 | Отправлено: 10:43 11-11-2007
Открыть новую тему     Написать ответ в эту тему

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