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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
 ммм.. размышляю, читаю мануалы про команду -e,

Всего записей: 1271 | Зарегистр. 20-12-2007 | Отправлено: 12:15 25-03-2011
sis_terr



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

Цитата:
-e command - выполнить команду command файла .wgetrc. После этого параметра через пробел может идти только одна команда этого файла. Такого рода команды, естесственно, имеют преимущества над записанными в файле .wgetrc, поскольку выполняютя после выполнения всех команд в нём.

 
как по мне, так тут какое то противоречие
 
как то писала команды , каждую с отдельной строчки - так не работало
 
у, млин, извиняюсь, чего то не добавилось к предыдущему каменту
 
Добавлено:
ура, заработало!!))

Всего записей: 1271 | Зарегистр. 20-12-2007 | Отправлено: 15:28 26-03-2011 | Исправлено: sis_terr, 17:44 26-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sis_terr
> ура, заработало!!))
Та-та-та-там! :)
 
> как то писала команды , каждую с отдельной строчки - так не работало
Где? В wgetrc?
 
У меня к вам напоследок личная просьба.
Не пользуйтесь, пожалуйста, на этом форуме смайликами-колобками с розовыми бантиками — они для многих завсегдатаев Руборда прочно ассоциируются с небезызвестным Бомжиком (подробнее, если хотите, можно почитать о нем(ней) у «Охотников»).

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 21:41 26-03-2011 | Исправлено: ASE_DAG, 22:40 26-03-2011
sis_terr



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
нет, я вообще wgetrc не пользуюсь . сейчас  размышляю как его выгодно использовать, пока ничего путного в голову не приходит, да еще в мануале как то непонятно написано.
пользуюсь только bat-файлами, вот там команды в одельной строчке и не сработали
 
 
Оффтоп..


----------
жительница мульки

Всего записей: 1271 | Зарегистр. 20-12-2007 | Отправлено: 12:09 27-03-2011 | Исправлено: sis_terr, 15:29 27-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sis_terr
> вот там команды в одельной строчке и не сработали  
Ну значит, после -e считывается строго одна команда.
 
офтопик...

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 00:23 28-03-2011
iglezz

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

Цитата:
если хотите уместить несколько строк в одной, пишите ключ -e перед каждой:  

Так в документации это и написано... хотя кто её читает :)
 

Цитата:
нет, я вообще wgetrc не пользуюсь . сейчас  размышляю как его выгодно использовать, пока ничего путного в голову не приходит, да еще в мануале как то непонятно написано.  

У меня в wgetrc прописана пара полезных параметров:
 
- content_disposition = on
Позволяет в ссылках типа 'httр://bla-bla.com/asd/fgh/index.htm?id=643&name=foo.zip&a=download' получать реальное имя файла, а не конструкцию типа index.htm?id=643&name=foo.zip&a=download. Аналогичен параметру --content-disposition.  
 
- timeout = 15
Позволяет бороться с багом, когда па FTP-сервере по окончании закачки wget иногда чего-то подвисает. Я как-то писал здесь про это несколько (?) лет назад.
 
А вобще можно создать что-то типа профилей под часто используемые задачи, забив туда все необходимые параметры:
WGETRC=/path/to/wgetrc wget <URL> для linux  
или
set WGETRC=x:\path\to\wgetrc & wget <URL> для windows
 
Простор для творчества велик, в этом вся прелесть unixway :)

Всего записей: 573 | Зарегистр. 18-02-2003 | Отправлено: 01:36 28-03-2011 | Исправлено: iglezz, 01:38 28-03-2011
sis_terr



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

Цитата:
Ну значит, после -e считывается строго одна команда.

т.е. можно красиво написать команды каждую с новой строки в bat-файле?
 

Цитата:
- content_disposition = on

о, вот это полезно, а то если Wget-ом через Оперу, он у меня под пкм в ней,
 качать с ифолдера, то в названии файла получается такая каша
 
Оффтоп..

Всего записей: 1271 | Зарегистр. 20-12-2007 | Отправлено: 21:57 28-03-2011 | Исправлено: sis_terr, 15:31 29-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sis_terr
> т.е. можно красиво написать команды каждую с новой строки в bat-файле?
Если перевод строки экранировать, то конечно, по любому разделителю.
 
#!/bin/sh
wget \
-e robots=off \
-e http_proxy=http://127.0.0.1:8080 \
--referer http://example.org \
http://www.iana.org/domains/example/

 
За виндовый коминтерпретатор я правда точно не скажу, там начало новой строки — два символа, а не один, но попробуйте. ;)
 
P.S. Да, и экранирущий символ там не бэкслэш, а циркумфлекс (^).

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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
#!/bin/sh
это что? или это не для винды

----------
жительница мульки

Всего записей: 1271 | Зарегистр. 20-12-2007 | Отправлено: 15:32 29-03-2011
Dasky



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

Цитата:
#!/bin/sh

ето под линухом

Всего записей: 1232 | Зарегистр. 08-03-2006 | Отправлено: 15:40 29-03-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Dasky
 
Вообще-то, это может работать где угодно, одно условие - должна стоять sh - Bourne shell. А она вообще-то исторически ещё в 1967 году на Bell Labs UNIX System 1 появилась под названием Thompson shell, когда Величайшего Компьютерного Гуру Всех Времён и народов Линкса Торвальдса ещё в проекте у матушки-Природы даже не было, а его родители о предстоящем рождении Компьютерного Супер Гения ещё даже не задумывались - они даже и знакомы тогда не были, это коли архивы ЗАГСа не врут. и о своём курсовом проекте вылившемся в одноимённою ОС он просто физически думать не мог, даже в статусе эмбриона.
 
И историческая справка выглядит так (FreeBSD.org -> man -> sh(1)):

Цитата:
HISTORY  
 
     A sh command, the Thompson shell, appeared in Version 1 AT&T UNIX.  It
     was superseded in Version 7 AT&T UNIX by the Bourne shell, which inherited
     the name sh.
 
     This version of sh was rewritten in 1989 under the BSD license after the
     Bourne shell from AT&T System V Release 4 UNIX.

 
P.S.
 
А то набежали тут … собственники, людей в заблуждение вводят.

Отправлено: 16:48 29-03-2011 | Исправлено: Victor_VG, 16:58 29-03-2011
sis_terr



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

Цитата:
Вообще-то, это может работать где угодно, одно условие - должна стоять sh - Bourne shell

просветите, что это, как это работает в винде и почему работает (вроде) без этого

Всего записей: 1271 | Зарегистр. 20-12-2007 | Отправлено: 01:00 30-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sis_terr
Да, в виндовых батниках можно экранировать новую строку циркумфлексом, см. http://www.robvanderwoude.com/useless.php#EscapeChar
 
Victor_VG
И не лень вам такие тирады в ответ на неосторожно брошенную реплику  писать? :)
Кстати, а причем тут Линус? Он никогда никакие шеллы не писал.
 
Dasky
В дополнение к исторической справке т. Виктора стоит сказать, что в большинстве дистрибутивов ГНУ /bin/sh является симлинком на другую оболочку (Баш в позикс-режиме в Федоре, Даш в Дебиане) и используется, когда подразумевается, что скрипт запустится на любой позикс-совместимой системе, т.е. ваше замечание действительно некорректное.
 
Добавлено:
sis_terr
> как это работает в винде
Обычно плохо. Поэтому проект гнувин32 порт Баша под Винду вообще не выпускает.
 
> почему работает (вроде) без этого
Что работает? Винда, даже имея SFU (10 000 руб. :D за максимальную редакцию), не умеет запускать простейшие шелл-скрипты.
Если вам нужна юниксовая подсистема, то лучше сразу установить Сигвин.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 01:14 30-03-2011 | Исправлено: ASE_DAG, 01:33 30-03-2011
sis_terr



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
за ссылочку спасибо, буду на досуге корпеть, хотя есть мануалы на русском и на компе, но что то эту фишку пропустила, да и мне казалось что bat для винды и для  Wget сильно отличаются
> почему работает (вроде) без этого....Что работает? Винда
я имела ввиду bat без вот тех хитррых команд #!/bin/sh ))
> Если вам нужна юниксовая подсистема
не, я простая продвинутая виндузятница для которой Wget одна из лучших качалок, для многих личных задач
 
вопросик, что прописать в bat под вин98, что бы по окончанию закачки окно не висело с сообщением “Сеанс завершен”, а исчезало как в ХР

----------
жительница мульки

Всего записей: 1271 | Зарегистр. 20-12-2007 | Отправлено: 11:44 30-03-2011
Victor_VG

Редактировать | Цитировать | Сообщить модератору
ASE_DAG
 
Не совсем точно - реально bash использует расширенный синтаксис команд sh, и обратной совместимости по набору команд у них нет. А проверить симлинк это, либо копия или нет можно просто - сравнить пару файлов в diff, либо глянуть в том же mc, или надёжнее просчитать для этой пары SHA-256 (на худой конец SHA-1) - они должны быть различные, т.к. бинарные коды у них разные. В нормальных UNIX системах это так, и собираются они разными мэйками, хотя из похожих наборов исходников. Но, если людям лень отдельно их компилить, то возможно, что они кинут симлинк с bash на sh/ Хотя работать это будет криво - у sh используются несколько иные системные вызовы и ядро UNIX мгновенно это ловит, ну а LINUX может при модификации ядра и пропустить.
 
sis_terr
 
exit по коду возврата 0. Что типа такой строчки if errorlevell == 0 exi.

Отправлено: 18:48 30-03-2011 | Исправлено: Victor_VG, 18:51 30-03-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
> Не совсем точно
Что именно? Я ничего из того, что вы будете опровергать после этой фразы, не утверждал.
 
И я, слава богу, еще пока не забыл как отличить симлинк от файла, как установить, что два хардлинка ссылаются на один файл, и как сравнивать файлы. ;)
 
> симлинк с bash на sh
ЩИТО? С sh на bash, вы хотели сказать. Так и делают в некоторых дистрибутивах ГНУ (см. выше).
 
> у sh используются несколько иные системные вызовы
Причем здесь вообще системные вызовы? О_о
 
sis_terr
> за ссылочку спасибо, буду на досуге корпеть
Всегда пожалуйста, но я не давал никаких ссылок на литературу. Если вы про http://www.robvanderwoude.com/useless.php#EscapeChar, то я просто привел как источник, где бы явно было указано, что циркумфлексом можно экранировать новую строку в батниках.
Если хотите заняться изучением скриптинга на виндовом коминтерпретаторе, сходите в тему «Командная строка, батники, сценарии (bat, cmd)» или «Задачи на bat-файлах 10» (чем эти темы отличаются не знаю, не спрашивайте, по-моему просто исторически так сложилось, что их две).
 
> bat для винды и для  Wget сильно отличаются
Батники для Винды и скрипты для юниксовых шеллов, вы хотели сказать. Да, синтаксис у них мало похож, хотя принципы общие.
 
> я имела ввиду bat без вот тех хитррых команд #!/bin/sh
Да, в Винде для определения (в том числе и) того, чем таки выполнить скрипт, используется механизм ассоциаций по расширению.
 
 

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

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите сохранить страничку после авторизации. Сколько не пытался - качает неавторизованную. Вот батник. Что не так?
Код:
wget --save-cookies COOKIE.TXT --keep-session-cookies --post-data "user=XXX&password=XXX" "http://nn-files.ru/load/" -O -
wget --load-cookies COOKIE.TXT http://nn-files.ru/load/**-*-*-***** -O page.html

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Unc1e
Во-первых, не на тот урл запрос делаете, будьте внимательней.
А во-вторых, если даже некоторые аргументы вам кажутся бесполезными, это не значит, что скрипт на той стороне их не ждет.
 
$ wget --save-cookies cookies.txt --post-data 'user=bugmenot&password=bugmenot&rem=1&flag=0&a=2&ajax=1&rnd=352' http://nn-files.ru/index/sub/

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

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG,
Цитата:
будьте внимательней
это не от невнимательности, это от незнания. То есть нужно искать method="post", а там уже action="/index/sub/"? Аргументы добавил. Вот что получилось:

Код:
wget --save-cookies COOKIE.TXT --post-data "user=xxx&password=xxx&rem=1&flag=0&a=2&ajax=1&rnd=336" "http://nn-files.ru/index/sub/" -O login.html
Содержимое login.htmlТам еще есть sbm=Вход. Не знаю нужно ли это добавлять, но с этим аргументом результат тот же. COOKIE.TXT пустой.

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Unc1e
> Неправильный логин или пароль
Это скорее всего именно это и значит. ;)
 
P.S. Напрасно не забираете строки в строгие кавычки.

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 21:47 03-04-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:14 (c) xForumSaver