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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
Слушай, объясни мне, пожалуйста, откуда в Makefile изначально стоит outinc. Что, в старых версиях OpenSSL, была такая папка? И как, тогда, объяснить то, что у препода в компе я в этом файле прописывал только путь к папке с OpenSSL, этот долбанный outinc там оставался и компиляция проходила успешно? Голову сломал уже...
 
 
Добавлено:
Это просто какая-то жопа... Подробнее...
 
P.S. К стати, папки lib в папке, где установлен OpenSSL, у меня нету. А что в ней должно быть - какие файлы?

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 22:37 21-04-2008 | Исправлено: BakLAN, 23:38 21-04-2008
f_serg



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

Цитата:
Слушай, объясни мне, пожалуйста, откуда в Makefile изначально стоит outinc.

Если развернуть исходники OpenSSL, например в C:/openssl-0.9.8g, собрать их, но не инсталлировать, то заголовочные файлы будут лежать в C:/openssl-0.9.8g/outinc , а библиотеки в C:/openssl-0.9.8g/out.
 

Цитата:
C:/openssl-0.9.8g/include/openssl/ssl.h:1: error: syntax error before ':' token
In file included from openssl.c:41:
C:/openssl-0.9.8g/include/openssl/ssl.h:1:22: warning: no newline at end of file
In file included from openssl.c:42:
C:/openssl-0.9.8g/include/openssl/x509.h:1:31: warning: no newline at end of file
In file included from openssl.c:43:
C:/openssl-0.9.8g/include/openssl/err.h:1:29: warning: no newline at end of file  

 
Слушай, да у тебя, походу, дистрибутив OpenSSL битый... Загляни внутрь C:/openssl-0.9.8g/include/openssl/ssl.h и посмотри, что там вообще есть.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 09:21 22-04-2008
BakLAN



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

Цитата:
Загляни внутрь C:/openssl-0.9.8g/include/openssl/ssl.h и посмотри, что там вообще есть.

Да вроде ничего такого. Архив совсем не битый...
ssl.h
C:\openssl-0.9.8g\ssl\ssl.h

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 16:25 22-04-2008 | Исправлено: BakLAN, 16:27 22-04-2008
RaP1D



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите разобраться. Скачал версию, указаную в шапке темы 1.11.1.
Создаю в дире программы batник с след. содержанием (пример):
wget http://gamewallpapers.ru/pub/k/kane_lynch_dead_men/10s.jpg
но качаеться index файл.  
 
Как правильно написать, чтобы качался вышеуказаный файл.
 
 
Вопрос 2:
1) Как сделать, чтобы программа брала поочереди ссылки из файла links.txt (или аналогичного), примерно такого содержания:
http://site.ru/file1.exe
http://site.ru/file2.txt
http://site.ru/file3.bat
 
Желательно, чтобы скаченная ссылка удалялась из файла.

Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 18:25 22-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RaP1D
1. --referer=http://gamewallpapers.ru
2. -i links.txt (--input-file=links.txt)

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 18:35 22-04-2008
RaP1D



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Спасибо, но можно по-конкретнее насчет --referer?
Допустим список ссылок указывает на разные ресурсы, например:
site1.ru
site2.ru
и т.д.
Так как с них качать всех?

Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 18:40 22-04-2008
igor_andreev

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

Цитата:
Так как с них качать всех?

батником.

Код:

for /?


Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 18:54 22-04-2008
RaP1D



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Немного разобрался, можно написать так: --referer=ag.ru,gamewallpapers.ru.
А можно ли как-нибудь указать файл, содержащий адреса, например так:
--referer=ref.txt
 
ref.txt:
ag.ru
gamewallpapers.ru

Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 19:04 22-04-2008 | Исправлено: RaP1D, 21:18 22-04-2008
Aeismann



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

Цитата:
А можно ли как-нибудь указать файл, содержащий адреса, например так:  
--referer=ref.txt

 
Неа. Если нужно качать автоматом с разных адресов, копни SET /?, там есть базовые операции со строками, может, получится выкусить часть строки.

Всего записей: 174 | Зарегистр. 24-10-2006 | Отправлено: 21:43 22-04-2008
RaP1D



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А можно ли скачать сайт целиком?
 
Например я пишу:
wget.exe -nv -i http://site.ru -c -nc -x
 
и на выходе получаю только index...
 
 
ИЛИ нет, конкретнее, чтобы скачивало с сайта все файлы с расширением .jpg, с сохранением иерархии фалов.

Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 21:51 22-04-2008 | Исправлено: RaP1D, 21:58 22-04-2008
f_serg



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

Цитата:
Да вроде ничего такого. Архив совсем не битый...  

Ладно, давай искать, что не работает... Собери из исходников OpenSSL (нужен perl). Там все просто, читай INSTALL.W32 секцию "GNU C (MinGW)". Не инсталлируй после сборки, оставь как есть. Потом в OPENSSL_PATH пропиши путь к собранным исходникам и попробуй собрать wget.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 06:59 23-04-2008
igor_andreev

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

Цитата:
Немного разобрался, можно написать так: --referer=ag.ru,gamewallpapers.ru.  

Не, я имел ввиду то же, что и Aeismann - "выкусить часть строки" Делается это командой FOR

Код:

@ECHO OFF
FOR /F "TOKENS=1,2* DELIMS=/" %%A IN (LINKS.TXT) DO ECHO WGET --referer=%%B %%A//%%B/%%C
PAUSE

Перевод на русский - каждую строку из файла LINKS.TXT разделить на три части, в качестве разделителя использовать слеш(DELIMS=/). Таким Макаром в %%A попадает http: (TOKENS=1), основной домен будет в %%B(TOKENS=2), а все остальное(TOKENS=*), независимо, сколько там еще слешей, будет в %%C. ECHO убрать для скачивания.

Цитата:
А можно ли скачать сайт целиком?  

Можно, wget --help

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 09:37 23-04-2008 | Исправлено: igor_andreev, 09:45 23-04-2008
RaP1D



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Огромное спасибо!!!
 
 
Помогите пожалуйста ещё...
Нужно выгрузить с сайта все jpg картинки, я пишу так:
wget -nc -r --referer=http://site.com -P "downloads" -Rjpg http://site.com
 
Но ничего не выходит... Вначале он качает нормально, но после разрыва связи, при след. запуске регаеться, мол файл index.htm существует и не идет дальше...
 
Добавлено:
Проблему решил:
 
Заменил -nc на -N
 
 
 
А можно ли сделать фильтр, чтобы качались картинки токо разрешения 1280x1024?

Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 11:39 23-04-2008 | Исправлено: RaP1D, 12:03 23-04-2008
BakLAN



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
О! Как раз этой ночью я и собрал OpenSSL. Вроде всё прошло без проблем. Но возник один вопрос. В Wget с поддержкой SSL поставляется две библиотеки - файлы: libeay32.dll и ssleay32.dll. После собственной сборки OpenSSL, у меня в папке C:\openssl-0.9.8g появились: libeay32.dll и libssl32.dll, причём первый размером на порядок больше, чем тот, который скомпилен под MSVS (так и должно быть - minGW выдаёт фаль большего размера?). А где же тогда ssleay32.dll, почему его нет ?

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 16:01 23-04-2008
RaP1D



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему перестали отображаться сообщения в консольном окне? Это связано с -a log.txt, если не писать, то все нормально, но ведь раньше работало нормально...
 
Так можно ли сделать фильтр, чтобы качались картинки токо разрешения 1280x1024?

Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 19:00 23-04-2008
f_serg



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

Цитата:
А где же тогда ssleay32.dll, почему его нет ?

libssl32.dll - это ssleay32.dll, просто имя другое. Чтобы опции линкера типа -lssl32 -leay32 работали.

Цитата:
причём первый размером на порядок больше, чем тот, который скомпилен под MSVS

strip libeay32.dll
strip libssl32.dll
 
Размер окажется немного больше, чем у MSVS-ных. Разные оптимизаторы у разных компиляторов.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 09:25 24-04-2008
Aeismann



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

Цитата:
Почему перестали отображаться сообщения в консольном окне? Это связано с -a log.txt, если не писать, то все нормально, но ведь раньше работало нормально...

Говорили ж уже - либо в лог, либо на консоль - и туда, и туда не умеет.

Цитата:
Так можно ли сделать фильтр, чтобы качались картинки токо разрешения 1280x1024?

Как ты себе это представляешь? В общем случае размер можно узнать, только закачав заголовок файла. Иногда его указывают в коде хтмл-страницы, но это не показатель. К тому же парсер у вгета не настолько продвинутый, чтобы еще и фильтровать по тегам. Можно ещё указать примерный разброс размеров файлов, т.к. они должны указываться в заголовке ответа сервера в поле Content-length, но это опять же происходит не всегда. Средствами одного лишь сабжа это сделать нельзя, советую копнуть в сторону proxomitron.

Всего записей: 174 | Зарегистр. 24-10-2006 | Отправлено: 09:28 24-04-2008
RaP1D



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ещё вопрос, ух как я уже вас задолбал...
 
Есть директория http://armorgames.com/files/games, нужно скачнуть из нее все файлы swf.
Я пишу:
wget -N -r -x -A swf -i http://armorgames.com/files/games
Но ничего не выходит... Где я ошибся, или неправильно задана ссылка?

Всего записей: 186 | Зарегистр. 29-12-2007 | Отправлено: 15:06 24-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RaP1D
Этож не фтп, индексного файла там нет, wget и не знает, что качать.
Скачать можно, только предварительно надо будет сливать страницы со ссылками, искать в них find <a href="/play/, потом скачивать эти ссылки, искать в них уже ссылки на /files/games и тд. Только это кажется бесполезно, потому что, в самих swf ссылки на сайт, играть оффлайн не получится. По крайней мере я две swf-ки скачал - прямиком на сайт отправляют.

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 15:34 24-04-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, тут недавно igor_andreev  помог написать такой бат:

Код:
wget -mirror -c -nd "http://myhost.ru/123.exe" "http://host.ru/123.exe"

 
дело в том что:
http://myhost.ru/123.exe весит 1.7мб
http://host.ru/123.exe 2мб
они разные хоть и называется одинаково.
И после того как wget стянул 1.7мб с http://myhost.ru/123.exe и не игнорирует зеркало а наоборот скачивает с него эти 0.3мб
 
помогите кто знает выход.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 20:14 24-04-2008
Открыть новую тему     Написать ответ в эту тему

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