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

Редактировать | Цитировать | Сообщить модератору
vitrzn
--ignore-case?

Отправлено: 17:13 23-07-2013
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Victor_VG
Я и не грил, что только. Просто, насколько я знаю, в свойствах самой NTFS, например, прописан флаг CASE_INSENSITIVE, по умолчанию. И по идее любая ОС при монтировании такой ФС должна запросить флаги ФС и их придерживаться (для этого даже в NTFS имеется специальный метафайл $UpCase).
Другое дело, можно конечно на рекомендации изобретателя ФС наплевать и обращаться с ней как душе вздумается. Хоть FAT регистрозависимым делай.

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 17:59 23-07-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Pasha_ZZZ
 
Так в том и дело, что если присмотреться, то M$ на 90% собственных корпоративных стандартов не обращает внимания, про международные и национальные можем и не вспоминать  
 
Если стандарт противоречит мнению Микрософт, то это проблема стандарта.© /Стив Балмер, 1987, Редмонд/
 
яснее не скажешь.

Отправлено: 18:11 23-07-2013
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Skif_off
Да не может быть в вгет никаких игноркейзов, он запрашивает имя как есть, это сервак может принимать решение об игнорировании регистра. Но это уже совсем другая история...

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 18:20 23-07-2013
Skif_off

Редактировать | Цитировать | Сообщить модератору
Pasha_ZZZ
В справке в разделе Recursive Accept/Reject Options

Цитата:
‘--ignore-case
Ignore case when matching files and directories. This influences the behavior of -R, -A, -I, and -X options, as well as globbing implemented when downloading from FTP sites. For example, with this option, ‘-A *.txt will match ‘file1.txt, but also ‘file2.TXT, ‘file3.TxT, and so on.

Т.е. только для случая рекурсивной загрузки когда точное имя неизвестно?

Отправлено: 18:54 23-07-2013
Pasha_ZZZ



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

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 19:25 23-07-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время всем.  
Меняю шапку. Оригинал под ковриком. Добавлено упоминание "--accept-regex". #

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 23:39 23-07-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
> Доброе время всем. Меняю шапку.
Здравствуйте. Весьма приятно это видеть. :-)
 
Пара комментариев:
· Кое-где забыли написать моноширным шрифтом, исправил.
· «A1:» в шестом вопросе — это что? Хотели дописать A2, но передумали? Убрал.
· «--local-filesystem-encoding=ENCODING» — да, вы правы, в вебе метапеременные чаще обозначает курсивом, нежели подчеркиванием. Заменил одно упоминание здесь и буду впредь придерживаться курсива.
· А вот забирать ключи в машинописные кавычки, извините, полагаю, что не надо. Во-первых, при написании вразнобой (как сейчас) они воспринимаются как часть формального синтаксиса, обрамление самих кавычек моноширным шрифтом это впечатление поддерживает. А во-вторых, это не соответствует традициям русской пунктуации (да и английской тоже, насколько я вижу по книгам OReilly). Убрал.
· «Win32». Почему «32», разве для Win64 что-то будет выглядеть иначе? Может имелось ввиду «WinNT»? Например, оператора for, который вы использовали, в командой оболочке Win9x (которая уже считалась за Win32) еще, ЕМНИП, не было. В шапке не трогал, жду вашего ответа.
· Прочая орфография и пунктуация по мелочи (напр. «ключем» вместо «ключом», «-» вместо «—» и т. д.). Исправил.
 
Если я что-то недопонял или ошибся, разумеется, правьте смело.
 


#: Шапка версии Alex_Piggy, 00:39 24-07-2013

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 18:28 25-07-2013 | Исправлено: ASE_DAG, 18:32 25-07-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, ASE_DAG
Спасибо за поправки. Для подобного согласования и размещал предварительный вариант шапки. Наверное стоило все-таки создать тему в тестировании.
 
>«Win32». Почему «32», разве для Win64 что-то будет выглядеть иначе? Может имелось ввиду «WinNT»
По Win64, равно как и по WinNT с ядром 3.0 - 5.0 (до Win2000) у меня нет никакой практической информации. Возможно, правильнее будет указывать не систему, а командную оболочку (интерпретатор) - "Win cmd.exe" (или "Windows cmd", "cmd.exe") - для разграничения с command.com и PowerShell?
 
>оператора for, который вы использовали, в командой оболочке Win9x (которая уже считалась за Win32) еще, ЕМНИП, не было
Вы правильно помните. В command.com оператор for позволял работать только с файловыми масками. К тому же начиная с версии 1.12 Wget не работает в Win9x (ошибка открытия сокета). Последняя совместимая - 1.11.4 Если эта информация имеет достаточную практическую ценность на текущий момент для помещения в шапку.
 
Добавлено:
Да, прошу прощения за медлительность, еще пара вопросов.  
1.
> Если локаль не юникодная (Win32)
> Если у вас Win32 и локаль не юникодная
Распространены ли сейчас не-Win системы с не-юникодной локалью? Если да, то в моем варианте (если им будут пользоваться владельцы не-Win систем) достаточно только патча (в каком виде?) или нужны и полные исходники?
2. Подскажите пожалуйста, насколько сейчас распространена libpcre? Просто PCRE RegEx несколько богаче и легче в прочтении/использовании чем POSIX RegEx (Wget поддерживает оба варианта через --regex-type). Но в "первичной помощи" лучше использовать гарантированно распространенный вариант.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 19:25 25-07-2013 | Исправлено: Alex_Piggy, 19:25 25-07-2013
Victor_VG

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

Цитата:
· «Win32». Почему «32», разве для Win64 что-то будет выглядеть иначе? Может имелось ввиду «WinNT»? Например, оператора for, который вы использовали, в командой оболочке Win9x (которая уже считалась за Win32) еще, ЕМНИП, не было.  

Абсолютно верно, хотя и не совсем технически точно - в семействе WinAPI было три основных ветки:
 
- Win32s (subset) - 32-х битное расширение для 16-и битных ОС семейства Windows 3.1 поддерживавшее часть вызовов Win32API. Подробности описаны в статье KB83520.
 
- Win32c (compatibly) - подмножество Win32API реализованное в Win9x/ME - нет поддержки UNICODE (использовались функционально урезанные библиотеки MSLU, её "любят" использовать горе-переводчки - им так проще, хотя в MSLU реализуется только часть подмножества стандарта UNICODE v1.0), многопоточности, многопроцессорности, командный язык совпадает с синтаксисом MS DOS 6.1 (реализуется интерпретатором command.com);
 
- Win32 API - полная реализация Win API основанная на платформе WINNT, в настоящее время дополнена Win64 API, в Win32 API реализована поддержка SMP до 32-х ЦП.

 
так точнее будет, а главное мы исключим смысловую путаницу...
 

Отправлено: 20:07 25-07-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
>  размещал предварительный вариант шапки. Наверное стоило все-таки создать тему в тестировании.  
По части дополнений стоило сразу править (ИМХО, разумеется).
 
> Возможно, правильнее будет указывать не систему, а командную оболочку...
Да, пожалуй. И cmd.exe самое популярное для нее название. Даже в русской Википедии не нашли варианта лучше для имени статьи. Впрочем, оставляю решение за вами.
 
Victor_VG
> в семействе WinAPI  
Речь, очевидно, не о WinAPI, а группах версий операционной системы Windows. Впрочем, как я уже отметил — согласен, указывать конкретный программный продукт (командный интерпретатор) по имени операционной системы, с которой он поставляется, некорректно.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 21:01 25-07-2013 | Исправлено: ASE_DAG, 21:05 25-07-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
ASE_DAG
 
Согласен.

Отправлено: 21:49 25-07-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время.
Исправил Win32 на cmd.exe. Немного переформулировал ответ на 4 вопрос (Не-ASCII).
К сожалению, обнаружил что случайно закрыл вкладку с сохраненной копией версии шапки от ASE_DAG уже после подтверждения редактирования. Попытки реверса изменений не получились. Прошу прощения.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 13:58 26-07-2013
vitrzn



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
wget.exe -b -m -c -nd -np -A *.spe ftp://ftp.***.ru
--21:00:13--  ftp://ftp.***.ru:21/
           => `.listing'
Connecting to ftp.***.ru:21... connected!
Logging in as anonymous ... Logged in!
==> TYPE I ... done.  ==> CWD not needed.
==> PORT ...
Invalid PORT.
Retrying.
 
Как можно исправить ?
Руками/клиентами вход на фтп - без проблем

Всего записей: 1160 | Зарегистр. 28-10-2007 | Отправлено: 20:15 21-08-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, vitrzn
Единственное что приходит в голову - попробуйте пассивный FTP (странно, что он отключен...). Команда -e "passive_ftp=on"

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 20:28 21-08-2013
vitrzn



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

Всего записей: 1160 | Зарегистр. 28-10-2007 | Отправлено: 23:02 21-08-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
vitrzn
Alex_Piggy
 
Ребят, а вы чего хотите? Иметь доступ по произвольному порту? Сервер ждёт соединение на порту 21, а к нему ломятся на порту 4000 - 7000 (обычные порты активного режима) - и если активный режим на нём отключён (у большинства FTP серверов он отключён по умолчанию) , то соединение игнорируется, клиент не получает ответа. Что и видно в логе - сервер использует безопасный пассивный режим. Пассивный режим предусматривает выбор порта соединения сервером из узкого набора открытых на приём портов, а активный клиентом, а сервер должен ожидать соединения на любом порту от 0 до 65535. А сиё приглашение ко взлому системы, и только ленивый не попытается взять такой сервер под свой контроль. Элементарные соображения безопасности, не более того.

Отправлено: 00:10 22-08-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Victor_VG
  Во первых, меня удивило, что в настройках Wget пассивный режим был отключен. По умолчанию-то он включен и его нужно специально отключать. И обязательно создавать правило для антивирусника или файрвалла (в чем скорее всего и причина?). В любом случае нужно искать файл настроек Wget и смотреть что еще там отключено.
  Во вторых, странно, что на сервере отключен активный режим. Я просто про это не слышал. То есть да, возможность отключить есть но смысл? (Я знаю, что Active FTP не работает с серыми IP и может пересекаться как попытка взлома клиента (не сервера.). Но это вроде не повод, чтобы совсем отключать?)
  В третьих, AFAIK 21 порт используется в любом случае для передачи команд. И - пассивный или активный - это со стороны сервера. То есть клиент соединяется по 21 первому порту, затем выбирает режим - если "Passive FTP" - по команде PASV сервер возвращает свои IP и номер порта (по которым к серверу будет соединятся клиент,  сервер ждет действий клиента), а если "Active FTP" - с командой PORT клиент передает свои IP и порт (по которым к клиенту будет подсоединятся сервер, клиент ждет действий сервера). Это немного не согласуется с Вашей фразой, которую я прочитал как "от режима зависит право выбора портов; соединение в любом случае открывает клиент"

Цитата:
Пассивный режим предусматривает выбор порта соединения сервером из узкого набора открытых на приём портов, а активный клиентом, а сервер должен ожидать соединения на любом порту от 0 до 65535.

Возможно я что-то неправильно понял? Пожалуйста, развейте мои сомнения/заблуждения.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 00:57 22-08-2013 | Исправлено: Alex_Piggy, 00:58 22-08-2013
MisHel64



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

Цитата:
Возможно я что-то неправильно понял?

Это он не правильно понял.


----------
Убрано как раздражающая истинных потомков великих Укров.

Всего записей: 1791 | Зарегистр. 21-09-2006 | Отправлено: 02:52 22-08-2013
vitrzn



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Victor_VG
Всё было нормально до начала августа, т.е. проблем не возникало со скачиванием.
Вот поэтому-то и непонятка у меня образовалась.
p.s. видимо на фтп в настройках "ум" включили )

Всего записей: 1160 | Зарегистр. 28-10-2007 | Отправлено: 10:42 22-08-2013
Открыть новую тему     Написать ответ в эту тему

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