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

Редактировать | Цитировать | Сообщить модератору
sis_terr
 
С ходу и я не помню точно где этот бит сидит. Лет пять назад случайно на него наткнулся в ключах запуска системы и за ненадобностью тогда воспринял просто как курьёз.

Отправлено: 22:40 21-01-2012
king_stiven

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

Всего записей: 2093 | Зарегистр. 17-07-2006 | Отправлено: 22:21 31-01-2012
Victor_VG

Редактировать | Цитировать | Сообщить модератору
king_stiven
 
Поглядите его ключи в мануале или сам вызовите таким способом Wget --help >> wget.txt . В этот файл он все ключи выведет с расшифровкой их назначения.

Отправлено: 11:56 01-02-2012
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
Там очень много всего, мне нужен конкретный ответ или никакой.

Всего записей: 2093 | Зарегистр. 17-07-2006 | Отправлено: 13:47 01-02-2012
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
king_stiven
Нет такого ключа и быть не должно. Дисковыми операциями должна заниматься ОС.

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 14:29 01-02-2012
SergWB

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прочел последних много страниц ветки, ответа на свою проблему не увидел.
Решил спросить, вдруг кто-то быстро намекнет, где копать.
 
Итак.
Имеется ftp сервер на вражеской территории. Там лежат папки\подпапки\файлы в большом количестве за много лет и постоянно обновляются\добавляются. Требуется зеркало того только, что выкладывалось, например, начиная с 01.01.2012. Иначе объем слишком велик (200 гиг) и не вписывается в наш ftp, на который проблемно ставить жесткий диск - стар он, да и с массивом заморачиваться не хочется - себе дороже будет.
Можно ли это провернуть в связке wget и скрипты (Win2003 Server)? Или может быть какой-нить ftp-клиент такое умеет? Я перебрал десяток всяких - кроме Total Commander'a в ручном режиме ничего не попалось. А ручной режим не годится.

Всего записей: 7 | Зарегистр. 13-04-2006 | Отправлено: 23:29 07-02-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergWB
> Можно ли это провернуть в связке wget и скрипты (Win2003 Server)?
Написать самому можно все. Но зачем велосипедировать.
 
> может быть какой-нить ftp-клиент такое умеет?
Да, lftp, например (команда mirror, ключ --newer-than). Это, пожалуй, наиболее функциональный неинтерактивный FTP-клиент вообще.  
Виндовую сборку его я встречал только под Цигвин (Cygwin), но это и к лучшему. ;-)

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 07:44 08-02-2012
SergWB

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
 
Спасибо большое за наводку. Нашел сборку под Win/ Возможности сабжа впечатлили. Будем пробовать. Не понятно пока, в каком формате время задавать.

Всего записей: 7 | Зарегистр. 13-04-2006 | Отправлено: 13:16 08-02-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergWB
> Не понятно пока, в каком формате время задавать.
А между тем, в мане это написано.

Цитата:
For  option --newer-than you can either specify a file or time specification like that used by at(1) command, e.g. `now-7days' or `week ago'. If you specify a file, then modification time of that file will be used.

 
«at(1)» следует понимать как ссылку (не гипер) на ман c именем at в секции 1, т.е. $ man 1 at или просто  
$ man at (это если вы все-таки установили Цигвин, а иначе Гугль в помощь).
 
> Возможности сабжа
Ну это не сабж, сабж тут Вэ-гет, поэтому если будут еще вопросы по lftp, то с ними давайте в родительскую тему — «UNIX Shell».

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 16:01 08-02-2012 | Исправлено: ASE_DAG, 16:01 08-02-2012
silverslice

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не могу разобаться как заставить WGET выгружать только новые файлы в замен устаревших их локальных копий, при этом не перезаписывать локальные файлы с датой изменения позднее даты изменения удаленных файлов.
Указываю ключ -N, но это не помогает. В мане написано: Если локальный файл не существует или размеры локального и удаленного файла не совпадают, то Wget выполнит выгрузку удаленного файла не зависимо от того, что говорят временные штампы. Можно ли как-нибудь убрать эту проверку на размер файла и оставить только сравнение по дате изменения?

Всего записей: 1 | Зарегистр. 09-02-2012 | Отправлено: 05:37 09-02-2012
igor_andreev

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

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 13:31 27-02-2012 | Исправлено: igor_andreev, 13:32 27-02-2012
Vivien



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никогда не пользовалась, а теперь очень нужно.
Один вопрос: где задается куда wget будет качать файлы? Или куда он качает по умолчанию?

Всего записей: 3701 | Зарегистр. 18-04-2004 | Отправлено: 10:32 13-03-2012
JugglerLKR



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть ли версия без зависимостей или с прилинкованными либами для x64?
Есть ли версия для x64 с поддержкой https?
 
И для x32? Может есть унифицированный бинарник под х32 и х64 да с либами под х32 х64 в нем?

Всего записей: 174 | Зарегистр. 23-05-2004 | Отправлено: 11:05 13-03-2012 | Исправлено: JugglerLKR, 11:07 13-03-2012
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Vivien
Цитата:
где задается куда wget будет качать файлы? Или куда он качает по умолчанию?  
По умолчанию в текущей папке создает структуру папок вида имя_хоста\путь_к_файлу_на_сервере. Для сохранения в другие места есть куча опций, например -P, -nH, -nd и т.п.

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 11:24 13-03-2012
Vivien



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Спасибо. И еще один вопрос. На сайте файлы лежат, рассортированные по датам.  
Задача: скачать за 5 дней.
Какого вида должна быть маска?
т.е wget.exe -m -c -N -nd -np -A03*.rar дальше не знаю(((

Всего записей: 3701 | Зарегистр. 18-04-2004 | Отправлено: 13:33 13-03-2012
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Vivien
Цитата:
Задача: скачать за 5 дней.  
Сам по себе wget такого не умеет. Если именование файлов имеет некую строгую схему - можно, в зависимости от шелла (bash, cmd) написать скрипт, но это уже совсем другая история...

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 15:27 13-03-2012
buzic



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос таков: Выяснил что все полезные файлы храняться по адресу hттp://ччч.чч/DocumentView.aspx?DocumentId=1 до 8 разрядного в пределах 20000000. Как сделать так чтобы скачались все файлы по данному адресу в пределах диапазона 1 - 20000000  
Можно ли как-то заставить wget чтобы скачал такой дипазон? Последовательности в диапазоне нет. Есть группы в этом диапазоне которые покрывают его прерывисто. Т.е. существуют не занятые файлами номера.  Как объяснить Wget чтобы он скачал все что найдет в этом диапазоне? И возмно ли такое?

Всего записей: 492 | Зарегистр. 05-02-2004 | Отправлено: 00:14 06-04-2012
sikemo

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
 

Всего записей: 921 | Зарегистр. 27-11-2008 | Отправлено: 00:50 06-04-2012
buzic



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sikemo
напиши пожалуйста всю строку что я  должен набрать в коммандной строке. С Wgetom Я не очень знаком
 Времени на закачку еще 12 часов. потом доступ обрубят.

Всего записей: 492 | Зарегистр. 05-02-2004 | Отправлено: 00:57 06-04-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
buzic
> в пределах диапазона 1 - 20000000
> на закачку еще 12 часов
500 запросов в секунду? Это явно выше ваших возможностей.
 
sikemo
Какой еще urllist.txt?
 
buzic
> всю строку, что я  должен набрать в командной строке
Для неастрономических чисел (допустим 20000):
$ for i in {1..20000}; do wget "http://example.org/DocumentView.aspx?DocumentId=$i"; done
 
Для ваших порядков это не пойдет. Но для них, по-сути, вообще ничего не пойдет.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 01:14 06-04-2012 | Исправлено: ASE_DAG, 01:17 06-04-2012
Открыть новую тему     Написать ответ в эту тему

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