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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Указывал параметры точно как описано в мануале. Почему не хочет сохранять, понятия не имею.
 
https://www.hyperlab.info/

Всего записей: 42 | Зарегистр. 26-04-2009 | Отправлено: 18:58 26-02-2011 | Исправлено: MENNENN, 19:01 26-02-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MENNENN
> Указывал параметры точно как описано в мануале.
Какие параметры? В каком мануале?
 
> Почему не хочет сохранять
Wget, я думаю, вам сообщил, в чем ошибка.
 
> https://www.hyperlab.info/
Так там же вовсе не требуется авторизация.  
Или какие-то форумы закрыты от прочтения без регистрации?
 
В любом случае, как я и говорил, это не HTTP-авторизация. Можно послать логин и пароль POST'ом, но проще взять куку, сохраненную вашим браузером и загрузить ее. Файрфокс сейчас повадился хранить куки в бинарном виде, поэтому расширение типа Export Cookies в помощь.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 19:50 26-02-2011 | Исправлено: ASE_DAG, 19:51 26-02-2011
nemoW

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
Скажите пожалуйста, как с помощью Wget скачать картинки, скрытые под спойлером на phpbb форумах (например)?

Всего записей: 60 | Зарегистр. 10-04-2007 | Отправлено: 08:31 08-03-2011
Weinaum



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот открыл для себя один из самых простых способов синхронизации фтп-папки с локальной папкой под виндой - при помощи wget
Все нормально, и довольно шустро, но что то немного с аргументами запутался.
Итак, мне надо синхронизировать содержимое папки 1 со всеми подкаталогами и их содержимым на сервере с содержимым папки 1  на локальной вин-машине,однако следующая команда создает в локальной папке 1 - новую папку 1 со всем содержимым..

Код:
wget -m -r -np -nH -p -N ftp://user:[email protected]/1 -P "c:\1

а я хочу, чтобы папка 1 в папке 1 не создавалась, а сразу сливалось все содержимое..
По аналогии с линуксовыми rsync или scp ставил и убирал слеши после папок - так и не понял, где тут собака порылась...
И еще, в таком виде в каждой локальной папке создается файл .listing, может, он полезный, но как то надо сделать так, чтобы не было ничего лишнего..
поправьте, плз

Всего записей: 1773 | Зарегистр. 18-06-2006 | Отправлено: 22:33 08-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
Давайте сначала с этим:
-m -r -np -nH -p -N
-m — это уже -r -l0 -N --no-remove-listing, задавать -r и -N еще раз смысла нет.
 
-p — какие у файлов на FTP могут быть зависимости (requisites)?
 
> чтобы папка 1 в папке 1 не создавалась
В вашем-то случае просто:
>wget -m -np -nH ftp://user:[email protected]/1 -P c:\
 
, а если вложенность более высокая, то ключ --cut-dirs в помощь.
 
Добавлено:
nemoW
> например
Выдает «форум временно отключен».

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 03:35 09-03-2011 | Исправлено: ASE_DAG, 05:18 09-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nemoW
Все. Теперь работает. Профилактика, видимо, была.
Сам по себе «спойлер» ничего особенного из себя не представляет — display:none, который (как и CSS вообще) вэ-гет просто игнорирует.
 
А вот внешние изображения там (везде, не только под спойлером) подгружаются весьма интересно:
 
<var class="postImg postImgAligned img-right" title="http://img142.imageshack.us/img142/113/070512saturnusff7.jpg">&#10;</var>
 
уже после загрузки станицы яваскрипт проходит по ней и превращает это в  
 
<var class="postImg postImgAligned img-right" title="http://img142.imageshack.us/img142/113/070512saturnusff7.jpg"><img src="http://img142.imageshack.us/img142/113/070512saturnusff7.jpg" class="postImg postImgAligned img-right" alt="pic"></var>
 
Сабж яваскрипты не поддерживает. Ходить по этому var/title (в режиме рекурсивной загрузки) его может быть и можно заставить, точно не знаю, но не нужно, ибо код страницы от этого точно не поменяется.
 
Так что, если вам нужна страница с тамбнейлами, то надо набросать скриптик, который ее будет парсить, или пользоваться веб-движком.
 
А если вам нужны полноразмерные изображения отдельно от страницы, то вы, во-первых, не пойми как поставили задачу, а во-вторых:
 
$ wget -rpEH -l1 -D imageshack.us -nd 'http://rutracker.org/forum/viewtopic.php?t=540102'
 
, мусор потом удалите.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 07:55 09-03-2011 | Исправлено: ASE_DAG, 07:58 09-03-2011
nemoW

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Извиняюсь, неудачный пример привёл. Меня действительно интересуют только полноразмерные изображения.
Ваш скрипт отлично работает для страниц с миниатюрами, спасибо. А если внешние изображения подгружаются напрямую (например) - только скриптами выдирать?

Всего записей: 60 | Зарегистр. 10-04-2007 | Отправлено: 10:15 09-03-2011
Weinaum



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

Цитата:
Давайте сначала с этим:
-m -r -np -nH -p -N
-m — это уже -r -l0 -N --no-remove-listing, задавать -r и -N еще раз смысла нет.
 
-p — какие у файлов на FTP могут быть зависимости (requisites)?
 
> чтобы папка 1 в папке 1 не создавалась
В вашем-то случае просто:
>wget -m -np -nH ftp://user:[email protected]/1 -P c:\
 
, а если вложенность более высокая, то ключ --cut-dirs в помощь.  

 
сорри, возможно, не совсем корректно обозначил, думал, так лучше для наглядности.
Конечно, на обеих сторонах папки, содержимое которых я хочу синхронить, названы по разному, и конечно, просто папку в папку слить, проблем нет, а вот как сделать так, чтобы  
содержимое из папки А на сервере заливалось в папку Б на локальной машине?
по поводу лишних аргументов - спасибо, я просто получил готовую строку команды и особо с лишними ключами не разбирался.
Да, и все таки второй вопрос тоже остается, во всех поддиректориях по прежнему создаются и остаются файлы .listing, я так понял, они нужны wget-у, или можно как то настроить, чтобы их там не было?

Всего записей: 1773 | Зарегистр. 18-06-2006 | Отправлено: 12:08 09-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
> по прежнему создаются и остаются файлы .listing
Ну, по-видимому, надо снять ключ --no-remove-listing, который, как я уже говорил, является частью ключа -m. ;)
 
> содержимое из папки А на сервере заливалось в папку Б на локальной машине?  
Я же сказал, ключ --cut-dirs.
На конкретном примере:
$ wget -rN -l0 -np -nH -P ./debian-opera --cut-dirs 5 ftp://mirror.yandex.ru/debian-opera/pool/non-free/o/opera/
 
Добавлено:
nemoW
> (например) - только скриптами выдирать?
Да. Ничего принципиально сложного в этом, кстати, нет.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 18:20 09-03-2011 | Исправлено: ASE_DAG, 18:22 09-03-2011
Weinaum



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Все, теперь разобрался, снкс
не сразу понял, что обозначает цифра после cut-dirs, теперь знаю, в моем случае рабочим стал вариант:

Код:
wget -rN -l0 -np -nH ftp://user:[email protected]/папка_А -P c:\папка_Б --cut-dirs 1

Всего записей: 1773 | Зарегистр. 18-06-2006 | Отправлено: 22:09 09-03-2011
Unc1e

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Можно ли wget заставить записывать скачиваемые файл без фрагментов? Это ж ужас - 2 gb архив разбит на 300 фрагментов по всему жесткому.

Всего записей: 405 | Зарегистр. 11-06-2007 | Отправлено: 09:34 12-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Unc1e
А чего вы от сабжа хотите? Чтоб он заранее выделял место под размер файла (preallocate file space)? Нет, он этого, афайк, не умеет.
aria2c это умеет. Или вручную (curl -I + truncate).

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 15:56 12-03-2011
Unc1e

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG, да, хотелось именно резервации места под файл. А
Код:
curl -I + truncate
это к чему относится и как это использовать?

Всего записей: 405 | Зарегистр. 11-06-2007 | Отправлено: 16:34 12-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Unc1e
> это к чему относится
К преаллокэйту вручную.
 
> как это использовать?
#!/bin/bash
FILE_NAME=`basename $1`
CONTENT_LENGTH=`curl -I "$1" | awk '/Content-Length/{print $2}'`
CONTENT_LENGTH_M=$((CONTENT_LENGTH/1048576))
dd if=/dev/zero of=$FILE_NAME bs=1M count=$CONTENT_LENGTH_M
truncate -s $CONTENT_LENGTH $FILE_NAME
wget -O $FILE_NAME $1

 
Написал «вслепую» и на работоспособность не поверял! Но смысл, я думаю, понятен. Просто транкэйтом выделить место, как я вспомнил, нельзя, оно не выделится.
 
Но вообще не вижу причин к неиспользованию aria2c.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 17:26 12-03-2011 | Исправлено: ASE_DAG, 17:37 12-03-2011
Unc1e

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG, теперь ясно. Спасибо, буду разбираться.

Всего записей: 405 | Зарегистр. 11-06-2007 | Отправлено: 17:30 12-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну, для порядка напишу, что в работоспособный вариант скрипта выше имеет вид:
 
#!/bin/bash
FILE_NAME=`basename $1`  
CONTENT_LENGTH=`curl -sI "$1" | awk '/Content-Length/{gsub("[[:cntrl:]]", ""); print $2}'`
CONTENT_LENGTH_M=`expr $CONTENT_LENGTH / 1048576 + 1`
dd if=/dev/zero of=$FILE_NAME bs=1M count=$CONTENT_LENGTH_M  
truncate -s $CONTENT_LENGTH $FILE_NAME  
wget -O $FILE_NAME $1

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 00:06 13-03-2011 | Исправлено: ASE_DAG, 00:07 13-03-2011
Linch



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста параметры на скачивание полностью eve-survival.org

Всего записей: 464 | Зарегистр. 24-07-2001 | Отправлено: 11:20 16-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Linch
> eve-survival.org
А в чем его особенность? Я не увидел ничего такого, что бы могло помешать.
Какие проблемы возникают?
 
Добавлено:
Зеркалирование — ключ -m,
возможно, вам будет удобно добавить к именам страниц расширение .html — ключ -E,
если нужны стили, картинки и пр. — ключ -p,
если хотите преобразовать ссылки в относительные — ключ -k.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 20:52 16-03-2011 | Исправлено: ASE_DAG, 20:52 16-03-2011
MENNENN



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите пожалуйста, я правильно задал параметры -R и -X ничего не напутал с запятыми или кавычками?
Мне необходимо, ограничить загрузку файлов содержащих последовательность символов &format=pdf   &format=latex и отменить загрузку двух каталогов cgi-bin   references с их содержимым.  
 
wget -mpEk -np -t1 -e robots=off -R"*&format=pdf*","*&format=latex*" -X/cgi-bin/,/references/

Всего записей: 42 | Зарегистр. 26-04-2009 | Отправлено: 19:27 18-03-2011 | Исправлено: MENNENN, 19:55 18-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MENNENN
> -R"*&format=pdf*","*&format=latex*"
Ключи -A и -R не учитывают GET-запросы. Это фича.
Используйте httrack в данном случае.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 20:44 18-03-2011
Открыть новую тему     Написать ответ в эту тему

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