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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
А при этом загрузку HTML-страниц возможно запретить? Пробовал так —

Код:
wget -R "*.htm","*.html" -i lnklst.txt

— игнорирует.

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 23:59 06-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
Я бы не стал писать, что «ограничение по mime-type ключом позволяет, например, httrack», если бы это бы умел делать и wget.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 00:41 08-11-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
А-а, ясно. Просто не дал себе труда узнать что есть mime-type.
Хотелось обойтись wget`ом.

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 16:38 08-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да пожалуйста, обходитесь. Напоминаю, что заголовки он выводит по ключам --spider --server-response.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 17:04 08-11-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотя впрочем и не обойдусь) Вы скажите, на ваш просвещенный вкус что предпочтительней (в плане надежности загрузки): httrack или wget? Просто за последним замечал иногда как он "засыпает" во время скачивания пока его не закроешь, хотя канал уже освободился.
 
Выше вы имели в виду заголовки из тегов TITLE?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 21:35 08-11-2013 | Исправлено: D1D1D1D, 21:38 08-11-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет, не мета-тэги в (X)HTML, а HTTP-заголовки. А по первому вопросу ничего определенного не скажу, не наблюдал подобных проблем.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 21:54 08-11-2013
Skay91

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
рапортую, щас опять добрался до интернета. В общем дело было в куках) скормил их wget'y и все заработало как надо. (Хотя тот же ИЕ с этими же куками все равно ребиректил. Хотя это же ИЕ..)

Всего записей: 73 | Зарегистр. 06-03-2011 | Отправлено: 15:18 09-11-2013
D1D1D1D

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

Код:
wget --keep-session-cookies --save-cookies cookies.txt --post-data "login_username=USERNAME&login_password=PASSWORD&login=Вход" --no-check-certificate LINK

т.е. чтобы избежать необходимости каждый раз скачивать страницу регистрации?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 16:53 14-11-2013 | Исправлено: D1D1D1D, 16:56 14-11-2013
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
D1D1D1D
А не проще каждый раз логиниться и делать новую печеньку через --save-cookies перед командой скачивания?

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 16:57 14-11-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Вряд ли это будет удобно, т.к. перед каждым обращением на сайт будет грузится файл под 200 кб -- потеря какого-никакого времени налицо.
 
Кстати для curl`а есть такой фрагмент:

Код:
 
curl\curl -s -c "%workdir%\cookie.txt" -A "Opera/10.00 (Windows NT 5.1; U; ru)" ^
    -d "login_username=!login!&login_password=!password!&login=%C2%F5%EE%E4" ^
    "http://login.ru/forum/login.php" > nul
    del /q !workdir!\~get.txt.new.tmp 2>nul

Может можно его приспособить?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 17:23 14-11-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, D1D1D1D
Вам вроде и не предлагают логинится перед каждым обращением...  
Можно смотреть, сколько еще годны сами куки. (Длинное число после имени домена - это дата годности в Unix time).
А можно просто логинится раз в день

Код:
 
for %%i in (cookies.txt) do echo %%~ti | findstr "%date%" || del cookies.txt
if not exist cookies.txt wget --keep-session-cookies --save-cookies cookies.txt --post-data "login_username=USERNAME&login_password=PASSWORD&login=Вход" --no-check-certificate LINK
 

Если нет файла cookies.txt или если его дата модификации отличается от текущей, то залогинится.
PS. Проверить, прошел ли логин можно только скачав страницу и проверив ее содержимое. Можно на скачанной странице поискать логин и если его нет, то перелогинится и перекачать.
PPS. То, что Вы привели для Curl - это тоже просто команда авторизации.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 17:48 14-11-2013
D1D1D1D

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

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 18:03 14-11-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При загрузке файла по этой ссылке (битой):

Код:
http://img517.imageshack.us/img517/8422/sop1bb9.gif

wget делает множественные попытки его скачать.
Имеется ли опция, которая при первой же ошибке скачивания завершала бы работу?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 12:57 15-11-2013
Alex_Piggy

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

Код:
 
`-t NUMBER'
`--tries=NUMBER'
     Set number of retries to NUMBER.  Specify 0 or `inf' for infinite
     retrying.  The default is to retry 20 times, with the exception of
     fatal errors like "connection refused" or "not found" (404), which
     are not retried.
 

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D, замечу, что у меня $ wget http://img517.imageshack.us/img517/8422/sop1bb9.gif ведет себя иначе — виснет на подключении. Поэтому, если вы не только для себя что-то там пишите, добавьте еще таймаут.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 13:49 15-11-2013 | Исправлено: ASE_DAG, 13:50 15-11-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Очень признателен.

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 17:16 15-11-2013
AlexCherny

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

Цитата:
Господа, помогите пожалуйста со скриптом, ссылка примерно такого вида  .../imgfull/annunciazione_krpano/l5_(0...100)_(0...100).jpg  навсякий случай - "шаг" равен 1.  Заранее спасибо.  

Случайно нашел ваш пост.
По слову haltadefinizione)
Посмотрите, пжлст, здесь - http://rutracker.org/forum/viewtopic.php?t=1727014 - скрипт написан на Питоне, проверен (понятно, сколько тайлов по вертикали-горизонтали и тд), качает тайлы с водяными знаками.
Но лично для меня по Хальте один вопрос главный - после того, как хальтовцы поменяли подход к линкам на картины мега-качества с номера на имя)...
Вдогонку вопрос - вы качаете с ftp Хальты или через http?

Всего записей: 131 | Зарегистр. 13-10-2007 | Отправлено: 21:42 23-11-2013 | Исправлено: AlexCherny, 21:43 23-11-2013
kost2005

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCherny
Если я всё правильно понял, Ваш вопрос был обращён ко мне.
 
Я тему на рутрекере видел, спасибо. Хальта меня интересовала постольку-поскольку из-за треклятых водяных знаков, была задача хоть на минимальном уровне разобраться с wget, что в принципе и получилось благодаря Alex_Piggy за что ему отдельное и огромное спасибо.
Даже и не подозревал, что у Хальты есть FTP...
Давайте лучше в личку перенесём все обсуждения Хальты, больших картинок и методов их скачки, тема всё таки про wget.
 

Всего записей: 432 | Зарегистр. 19-11-2005 | Отправлено: 01:25 24-11-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такого рода помеха: если, к примеру, открыть эту стартовую страницу с сообщениями одного из пользователей Рутрекера и, скопировав адрес ссылки, скажем, третьей страницы (непостоянный), выполнить:

Код:
wget --load-cookies cookies.txt "СКОПИРОВАННАЯ_ССЫЛКА"

Скачанная страница вернёт текст "сессия устарела", хотя в браузере ссылка еще какое-то время будет действовать.
Связано ли это, как выше выяснилось, с неумением wget обсчитывать яваскрипты?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 14:14 29-11-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, какой будет команда для авторизации на http://livejournal.com/?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 22:27 03-12-2013 | Исправлено: D1D1D1D, 22:34 03-12-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:46:11 (c) xForumSaver