Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Wget (часть 1)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182

Открыть новую тему     Написать ответ в эту тему

GaDiNa



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[ UNIX Shell ] || [ Рекурсивная загрузка веб-сайтов ] — родительские ветки.
 
GNU Wget

GNU Wget — это свободная неинтерактивная утилита для скачивания файлов по HTTP, HTTPS, FTP и FTPS (и только), обладающая самым базовым функционалом загрузки одиночных файлов и рекурсивной загрузки сайтов (HTTP) и директорий (FTP).
 

| Офсайт | Википедия | Фрешмит | Опен-хаб (бывш. Охлох) | Мануал | Ман | Ман (русск., устар.) | --help (русск.) |

 
Где взять.
Под GNU — уже стоит. Под FreeBSD — есть в портах. Под [Mac] OS X — собрать ванильный.  
Под Windows есть варианты: Cygwin | GNUWin32 (учитывайте зависимости) | Wget + OpenSSL by GetGnuWin32  | by TumaGonx Zakkum (он же osspack32 и The Moluccas  |  by Jernej Simoncc (32 и 64 бит отдельные пакеты) | Wget2.
.
 
Литература.
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»; у Хрома — «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) и многими другими протоколами на более низком уровне.
wput — клон wget для аплоада файлов на удаленные FTP(S) сервера.
axel — клон wget для многопоточной загрузки одиночных файлов по протоколам HTTP(S) и FTP(S). Порты для Windows: 2.4, 2.16.1
 
Разное.
GUI для Wget’а
 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.

Всего записей: 1560 | Зарегистр. 17-06-2003 | Отправлено: 13:39 08-11-2003 | Исправлено: Maz, 08:49 03-03-2025
DimitriusXZ

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо.
А как задать "не перезаписывать при совпадении имён"?

Всего записей: 903 | Зарегистр. 17-01-2010 | Отправлено: 21:19 23-06-2024
www_world

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

Цитата:
А как задать "не перезаписывать при совпадении имён"?

А он перезаписывает?

Всего записей: 632 | Зарегистр. 04-11-2018 | Отправлено: 22:14 23-06-2024
DimitriusXZ

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Бывает.
При совпадении имён.
Пример привести сейчас не могу.
Нужно поймать ситуацию.
 
Я раньше совмещал -с -nc и все работало.

Всего записей: 903 | Зарегистр. 17-01-2010 | Отправлено: 21:01 24-06-2024
www_world

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

Цитата:
Бывает.
При совпадении имён.
Пример привести сейчас не могу.
Нужно поймать ситуацию.  

Такое воможно, если вы переименовываете файлы при сохранении или используете --html-extension
Но тогда это ваша вина, wget - не причем - ему не с чем сравнивать файл с сервера и он скачивает еще раз.

Цитата:
Я раньше совмещал -с -nc и все работало.

Цитата:

Цитата:
'wget --continue' does not work with '--no-clobber' (asked Oct 19, 2015 at 12:22)

That is because you are combining two options (--no-clobber and --continue):
 
    --continue : Continue getting a partially-downloaded file
    --no-clobber: This will clobber/overwrite the previously downloaded file before restarting to download again
 
As you can see, these two options ask Wget to perform quite opposite tasks, so it does not know what to do by the end. Do not combine them.

https://superuser.com/questions/988716/wget-continue-does-not-work-with-no-clobber

Всего записей: 632 | Зарегистр. 04-11-2018 | Отправлено: 02:09 25-06-2024 | Исправлено: www_world, 02:10 25-06-2024
VecH



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Можно как то реализовать скачивание крайне версии Opera отсюда

Цитата:
https://get.geo.opera.com/ftp/pub/opera/desktop/

там подпапки с версиями и платформы

Цитата:
/111.0.5168.25/win/

 и нужны 2 файла

Цитата:
Opera_111.0.5168.25_Setup.exe
Opera_111.0.5168.25_Setup_x64.exe

 
Не пойму как рапарсить вывод сервера (больше 12-15 лет этим не занимался)

Всего записей: 2535 | Зарегистр. 18-02-2003 | Отправлено: 06:32 25-06-2024
Pasha_ZZZ



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

Цитата:
 
@echo off
 
set V1=0
set V2=0
set V3=0
set V4=0
for /f "tokens=6-9 delims=<>/." %%a in ('wget -q -O- "https://get.geo.opera.com/ftp/pub/opera/desktop/"^|findstr /r /c:"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do call :CheckVer %%a %%b %%c %%d
echo Ver=%V1%.%V2%.%V3%.%V4%
pause
goto :eof
 
:CheckVer
if %1 LSS %V1% goto :eof
if %1 GTR %V1% goto :NewVer
if %2 LSS %V2% goto :eof
if %2 GTR %V2% goto :NewVer
if %3 LSS %V3% goto :eof
if %3 GTR %V3% goto :NewVer
if %4 LSS %V4% goto :eof
if %4 GTR %V4% goto :NewVer
goto :eof
:NewVer
set V1=%1
set V2=%2
set V3=%3
set V4=%4
goto :eof
 

Всего записей: 13293 | Зарегистр. 11-03-2002 | Отправлено: 06:53 25-06-2024
VecH



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pasha_ZZZ
Благодарю, отрабатывает как надо

Всего записей: 2535 | Зарегистр. 18-02-2003 | Отправлено: 07:07 25-06-2024
PRiM



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день.
Подскажите, а то голову сломал.
 
Есть такая команда:

Код:
 
start /W d:\wget.exe --dot-style=mega -m -nd -np -c -N ftps://user:pass@0.0.0.0:212/dir --no-check-certificate -PD:\ -A *.rar    
 

В командной строке отрабатывает правильно.
А если из командной строки запустить батник с этой командой, то wget пытается соединится по http://file.rar и пишет, что хост недоступен.
 
Wget 1.21.4 32бит
Но пробовал и 1.20.х и 1.19.х

----------
Чтобы дойти до цели, надо идти!

Всего записей: 2258 | Зарегистр. 28-03-2003 | Отправлено: 10:04 03-07-2024 | Исправлено: PRiM, 10:07 03-07-2024
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PRiM
 
А что в батнике? Думаю, что причина в нём, но надо смотреть.

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 35260 | Зарегистр. 31-07-2002 | Отправлено: 11:17 03-07-2024
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добре время, PRiM
Попробуйте *.rar заключить в кавычки.
Или записать полную форму --accept=*.rar
Без кавычек cmd пробует подставить там список файлов с расширением rar

Всего записей: 1918 | Зарегистр. 07-08-2002 | Отправлено: 11:25 03-07-2024
Smitis



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

Цитата:
Без кавычек cmd пробует подставить там список файлов с расширением rar

Cmd не умеет такое делать.
 
PRiM

Цитата:
А если из командной строки запустить батник с этой командой, то wget пытается соединится по http://file.rar и пишет, что хост недоступен.

Возможно, брандмауэр режет - для cmd доступ есть (и запущенных из-под него процессов), а для wget запущенного отдельно нет.

----------
Разум когда-нибудь победит

Всего записей: 3748 | Зарегистр. 09-02-2003 | Отправлено: 14:51 03-07-2024
Alex_Piggy

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

Цитата:
Cmd не умеет такое делать.

Сейчас доступа к компьютеру нет.  
Но я помню, что все похожее на wildcard должно быть в кавычках, иначе подставляется подходящее имя файла/файлов. Если есть несколько файлов - то имя первого файла пойдет как аргумент для -A, а остальные - как дополнительные адреса для скачивания.
Кто именно так гадит - надо искать.
В любом случае - при непонятках запускайте wget с аргументами "-d -o log.txt"  и смотрите log.txt - там будет показана как полная строка запуска, так и совершаемые действия.

Всего записей: 1918 | Зарегистр. 07-08-2002 | Отправлено: 15:21 03-07-2024
Smitis



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

Цитата:
Но я помню, что все похожее на wildcard должно быть в кавычках, иначе подставляется подходящее имя файла/файлов.

НИКОГДА такого в cmd не было, с чего оно вдруг появилось бы?
Подозреваю, что Вы перепутали с никсами. Там есть что-то такое.
А в кавычки надо заключать если в параметре есть пробелы (как правило для всех программ), а для cmd ещё и некоторые другие специальные символы.

----------
Разум когда-нибудь победит

Всего записей: 3748 | Зарегистр. 09-02-2003 | Отправлено: 15:36 03-07-2024
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Smitis
Пожалуйста попробуйте сами.
Возможно это из-за того, что wget собирается под MinGW.
Но глюк точно проявляется в WinXP и в Win8.1
Если запустить с аргументом -A *.rar из папки в которой есть file1.rar file2.rar - то не скачает файлы (будет пытаться отфильтровать по маске file1.rar) и выдаст ошибку о невозможности ресолвить http://file2.rar. Для -A "*.rar" таких ошибки не возникает.

Всего записей: 1918 | Зарегистр. 07-08-2002 | Отправлено: 16:01 03-07-2024
www_world

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

Цитата:
Есть такая команда:
Цитата:
start /W d:\wget.exe --dot-style=mega -m -nd -np -c -N ftps://user:pass@0.0.0.0:212/dir --no-check-certificate -PD:\ -A *.rar
В командной строке отрабатывает правильно.
А если из командной строки запустить батник с этой командой, то wget пытается соединится по http://file.rar и пишет, что хост недоступен.

Можете попробовать в батнике вместо
ftps://user:pass@0.0.0.0:212/dir
Использовать
--ftp-user=user --ftp-password=password ftps://0.0.0.0:212/dir
Если не поможет, то это
--use-askpass ftps://0.0.0.0:212/dir
А также вместо -PD:\ попробуйте использовать
 
--directory-prefix=\
--directory-prefix="all files\"
--directory-prefix="D:\"
-P "D:\"
и тп.
 
Или вообще не использовать этот ключ, заменив его в батнике предыдущими стандартными командами типа
 
CD /D D:\
 
или
 
if not exist "d:\folder" mkdir "d:\folder"
CD /D "D:\folder"
и далее ваша команда без ключа -Р
 
Вообще же самое правильное в подобных случаях начинать с простого и двигаться к сложному.
Например, запустить батник (не через ком строку !!)
d:\wget.exe --no-remove-listing ftps://user:pass@0.0.0.0:212/dir
и если листинги создаются корректно (через батник), то добвлять постепенно нужные ключи и проверять каждый раз корректность работы батника.

Всего записей: 632 | Зарегистр. 04-11-2018 | Отправлено: 18:40 03-07-2024 | Исправлено: www_world, 19:15 03-07-2024
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alex_Piggy
Ну, значит, это баг wget. Где-то ошибка при разборе командной строки.

----------
Разум когда-нибудь победит

Всего записей: 3748 | Зарегистр. 09-02-2003 | Отправлено: 20:03 03-07-2024
los

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

Цитата:
Ну, значит, это баг wget. Где-то ошибка при разборе командной строки.

В документации кавычки для данного случая указаны.

Цитата:
In this case, you have
           to enclose the pattern into quotes to prevent your shell from
           expanding it, like in -A "*.mp3" or -A '*.mp3'.

Всего записей: 7943 | Зарегистр. 08-09-2001 | Отправлено: 22:32 03-07-2024
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
los
Не вдавался в такие детали, но тогда и вопрос можно закрывать - наличие или отсутствие кавычек это особенности синтаксиса команд самой программы. Тут, как говорится, читайте документацию ))

----------
Разум когда-нибудь победит

Всего записей: 3748 | Зарегистр. 09-02-2003 | Отправлено: 22:42 03-07-2024
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
PRiM
 
В CMD пробелы интерпретируются как разделители операндов, и для исключения их неверного толкования как независимых аргументов команды операнды с пробелами должны быть взяты в кавычки.
 
PRiM
 
Потому я вам и сказал - надо смотреть ваш скрипт - там у вас используется подстановка *.rar. Чуть поправьте запись команды:
 
start /W d:\wget.exe --dot-style=mega -m -nd -np -c -N ftps://user:pass@0.0.0.0:212/dir --no-check-certificate -PD:\ -A "*.rar"
 
и с "*.rar" всё должно работать правильно.


----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 35260 | Зарегистр. 31-07-2002 | Отправлено: 23:07 03-07-2024
PRiM



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

Цитата:
и с "*.rar" всё должно работать правильно.

Огромное спасибо. Все действительно отработало правильно. Теперь и из батника тоже!
 
Добавлено:

Цитата:
Попробуйте *.rar заключить в кавычки.

Благодарю за совет.

----------
Чтобы дойти до цели, надо идти!

Всего записей: 2258 | Зарегистр. 28-03-2003 | Отправлено: 13:42 04-07-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182

Компьютерный форум Ru.Board » Компьютеры » Программы » Wget (часть 1)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru