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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
svl75
Вот так вроде работает...
wget.exe -e http_proxy=192.168.100.20:3128 -Y on --proxy-user=win4k --proxy-password=111 --passive-ftp -A.zip --directory-prefix=D:\Tasks\download_drweb -m -nd ftp://ftp.drweb.com/pub/drweb/bases -r -a wget.log

Всего записей: 3469 | Зарегистр. 05-01-2006 | Отправлено: 17:38 15-05-2007 | Исправлено: mithridat1, 17:39 15-05-2007
igor_andreev

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

Цитата:
Все равно не качает:

А ты слеш то поставь в конце ftp-url, как по твоему wget узнать должен, bases - это папка или файл? ftp://ftp.drweb.com/pub/drweb/bases/

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 18:53 15-05-2007
svl75

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишу как посоветовали:
 
------------------------------------------
set ftp_proxy=http://192.168.100.20:3128
 
D:\Tasks\Wget\wget.exe -e --proxy-user=win4k --proxy-password=111 --passive-ftp -A.zip --directory-prefix=D:\Tasks\download_drweb -m -nd ftp://ftp.drweb.com/pub/drweb/bases/ -r -a wget.log
----------------------------------скачивает только index---------------
09:04:28 (1.72 MB/s) - `D:/Tasks/download_drweb/index.html' saved [39588]
 
я уже засомневался сможет ли wget правильно работать с моим http-прокси.
Может я чего-то не так пишу?

Всего записей: 5 | Зарегистр. 02-05-2007 | Отправлено: 08:12 16-05-2007
pom205

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос к спецам. При докачке с файлообменников wget к закачиваемому файлу, вернее к иго имени добавляет хвост типа YDS.RAR?tsid=20070519-115647-36d6639. Другие качалки его не добавляют. Как избавиться?
Обязательно ли явно указывать имя сохраняемого файла при передаче ссылки, например, из UShdownloader а.

Всего записей: 555 | Зарегистр. 03-06-2006 | Отправлено: 19:25 19-05-2007 | Исправлено: pom205, 11:17 21-05-2007
svl75

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще раз прошу помощи у знатоков
ставлю вроде все как расписано в файлах примера by Andrei Chevel
 
set ftp_proxy=http://192.168.100.20:3128
 
D:\Tasks\Wget\wget.exe -r -l1 -np -nd -A.zip --proxy-user=win4k --proxy-password=111 --directory-prefix=D:\Tasks\download_drweb\ ftp://ftp.drweb.com/pub/drweb/bases/ -a wget.log
-----------------------------------------------------
в логах все то же:
лог----------------------------------------------------------
--10:56:19--  ftp://ftp.drweb.com/pub/drweb/bases/
           => `D:/Tasks/download_drweb/index.html.22'
Connecting to 192.168.100.20:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 39 588 (39K) [text/html]
 
    0K .......... .......... .......... ........             100%    3.57 MB/s
 
10:56:19 (3.57 MB/s) - `D:/Tasks/download_drweb/index.html.22' saved [39588/39588]
 
совершенно не понятно как скачать все файлы по маске *.zip

Всего записей: 5 | Зарегистр. 02-05-2007 | Отправлено: 10:21 21-05-2007
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
svl75
Ну и скачивай из index.html этого, раз по нормальному не получается, делов то
 

wget.exe -O drweb.htm ftp://ftp.drweb.com/pub/drweb/bases/
wget.exe --force-html -i drweb.htm


Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 10:55 21-05-2007
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
svl75
Попробуй сделать то же самое,но с ресурсом  по http,где возможно получение индексной страницы.У меня то же прокси Squid 2.5 и с загрузкой с ftp через wget проблемы.

Всего записей: 3469 | Зарегистр. 05-01-2006 | Отправлено: 11:00 21-05-2007
igor_andreev

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

Цитата:
D:\Tasks\Wget\wget.exe -r -l1 -np -nd -A.zip --proxy-user=win4k --proxy-password=111 --directory-prefix=D:\Tasks\download_drweb\ ftp://ftp.drweb.com/pub/drweb/bases/ -a wget.log

А сюда просто добавь ключ --mirror ...

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 11:06 21-05-2007
svl75

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

Цитата:
Ну и скачивай из index.html этого, раз по нормальному не получается, делов то  

 
вот что пишу:
------------
D:\Tasks\Wget\wget.exe --proxy-user=win4k --proxy-password=111 -O D:\Tasks\download_drweb\drweb.htm  ftp://ftp.drweb.com/pub/drweb/bases/
D:\Tasks\Wget\wget.exe --mirror --proxy-user=win4k --proxy-password=111 --force-html -i D:\Tasks\download_drweb\drweb.htm --directory-prefix=D:\Tasks\download_drweb
-------------------
лог:
 
D:/Tasks/download_drweb/drweb.htm: Cannot resolve incomplete link dwrtoday.zip.
D:/Tasks/download_drweb/drweb.htm: Cannot resolve incomplete link dwrtoday.zip;type=i.
--10:18:24--  http://nnp-gate.nnp.ru:3128/squid-internal-static/icons/anthony-dirup.gif
           => `D:/Tasks/download_drweb/nnp-gate.nnp.ru+3128/squid-internal-stati
c/icons/anthony-dirup.gif'
Connecting to 192.168.100.20:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 147 [image/gif]
Server file no newer than local file `D:/Tasks/download_drweb/nnp-gate.nnp.ru+3128/squid-internal-static/icons/anthony-dirup.gif' -- not retrieving.
 
-----------
в результате сохранились только иконки.
Посмотрел в индексном файле - все ссылки почему-то на локальный диск ссылаются
например:
file:///D:/Tasks/download_drweb/drw43300.zip
 
не понятно это.
Может чего не так делаю?

Всего записей: 5 | Зарегистр. 02-05-2007 | Отправлено: 09:36 22-05-2007
igor_andreev

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

Цитата:
Может чего не так делаю?

Так все, эт у тебя прокси корячит индексный файл.
Без прокси индексный файл выглядит так index_direct_connect.html , а с прокси у тебя наверно такого плана выдает index_throw_proxy.html
 
 --mirror попробуй добавь в свой вариант скачивания, не из файла, wget.exe -r -l1 -np -nd -A.zip...

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 10:58 22-05-2007 | Исправлено: igor_andreev, 11:25 22-05-2007
b3nd3rster

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот есть список ссылок (все точно ведут на файлы без скриптов каких либо и переадресаци), штук 150, и их надо проверить на наличие ошибки 404, а затем неработающие записать в отдельный файл. Возможно ли такое реализовать? Если нет, как по проще моего вариана сделать, возможно ли такое? Читал в справке, что wget может быть сетевым пауком, но оно ли это?

Всего записей: 610 | Зарегистр. 17-08-2006 | Отправлено: 07:36 26-05-2007
Aushkin

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужна помощь. Задача такая. Нужно, что бы wget проверял указанный ftp и загружал его содержимое в указанную папку. Нужно так же, что бы при проверке, он смотрел, не менялись ли файлы и если они менялись, то загружал бы новые, заменяя локальную копию. Есть ещё одно "НО", локальные файлы могут меняться пользователем и оказаться по дате изменения новее тех, которые на ftp, но нужно, что бы локальные файлы были всегда только такими, какие на фтп, а не теми, которые накосячил пользователь.
Сделал так:
wget -c -r -np -nH -p ftp://мойфтп.ru -P "С:\Моя_папка"
Всё работает исправно, файлы сливаются, при изменении на серваке скачивается новая версия. Но вот проблема, если я локально вношу любое изменение в файл, то локально уже остается моя версия и версия этого же файла без изменений уже не берется с фтп.
Помогите разобраться, где ошибка. Заранее большое спасибо.

Всего записей: 349 | Зарегистр. 06-05-2004 | Отправлено: 11:49 31-05-2007
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aushkin
Для этого есть следующая опция

Цитата:
-N,  --timestamping           don't retrieve files if older than local.

Но если файлы локально были изменены пользователем то wget это никак не распознает
(Особенно если и размеры остались теми же)

Всего записей: 3469 | Зарегистр. 05-01-2006 | Отправлено: 12:13 31-05-2007
Aushkin

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
-N никак не влияет на ситуацию. Если меняется файл на сервере, то загружается его обновленный вариант, но если меняется локальный файл, естетсвенно меняется и его timestamping и размер, то wget не трогает его и не заменяет его на оригинальный файл.
А нужно, что бы в локальной папке всегда была копия только удаленной директории и соответственно оригинальных файлов.
Да и кстати, "don't retrieve files if older than local." означает "не загружать файл, если он старее, чем локальный", а в моём случае нужно, что бы файлы загружались так или иначе, при условии, что локальная версия отличается от удаленной.
По сути, нужно что бы происходил мироринг, но только в одну сторону.

Всего записей: 349 | Зарегистр. 06-05-2004 | Отправлено: 12:29 31-05-2007 | Исправлено: Aushkin, 12:47 31-05-2007
igor_andreev

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

Цитата:
 нужно что бы происходил мироринг, но только в одну сторону.

Ну так а ключ --mirror для чего по твоему существует?

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 12:59 31-05-2007
Aushkin

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
по моему --mirror существует для зеркалирования, но по моему зеркалирование оно понятие двустороннее, т.е. более новые файлы заменяют старые, как в одну, так и в другую стороны. Или я не прав?
что так:  
 
wget -c -r -np -nH -p ftp://мойфтп.ru -P "С:\Моя_папка"
 
 
что так:
 
wget -c -r -np -nH -p --mirror ftp://мойфтп.ru -P "С:\Моя_папка"
 
результат эдентичен.
 
Стоит внести изменения в локальный файл, всё, он не будет перезаписан до тех пор, пока на сервере не появится версия старще локальной. А нужно, что бы в локальной директории всегда было только и строго то, что на фтп и никак иначе, без вариантов. Сколько бы юзер не ковырял файлы, нужно, что бы при очередной синхронизации, все его художества были безжалостно убиты и заменены чистой копией оригинальных файлов с сервера. Естественно, если что-то локально менялось, если нет, то загружаются только новые.

Всего записей: 349 | Зарегистр. 06-05-2004 | Отправлено: 13:10 31-05-2007 | Исправлено: Aushkin, 13:21 31-05-2007
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тест с маленьким txt-файлом 2 Кб
 

Код:
wget http://www.nncron.ru/download/maillist_rules.txt
 
результат - `maillist_rules.txt' saved [2083/2083]
 
Сразу же запускаем повторно, но уже с опцией --mirror

Код:
wget -m http://www.nncron.ru/download/maillist_rules.txt
 
результат - Server file no newer than local file `maillist_rules.txt' -- not retrieving.
 
Теперь, имитируя дурного пользователя , открываем maillist_rules.txt в блокноте и в произвольном месте пишем слово "test", закрываем файл, на вопрос о сохранении изменений отвечаем утвердительно. Испортили локальный файл, так сказать... Запускаем опять:

Код:
wget -m http://www.nncron.ru/download/maillist_rules.txt
 
результат - The sizes do not match (local 2087) -- retrieving.
 
Ну если размер локального файла останется таким же, как на сервере, то тут уже (mithridat1 упоминал) ничего не попишешь.

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 14:11 31-05-2007 | Исправлено: igor_andreev, 14:13 31-05-2007
Aushkin

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как оно должно выглядеть с FTP и с таким учетом, что бы директория с названием FTP не создавалась, короче говоря, как в моём варианте, но с Вашим исправлением?
 
Вот я попробовал так:
 
wget -m -c -r -np -nH -p ftp://мойфтп.ru -P "С:\Моя_папка"
 
тоже получил после изменения файла т повторного запуска wget:
 
 
The sizes do not match (local 22) -- retrieving.
 
Но! В папке остался измененный мной файл! Я чего-то не верно делаю?

Всего записей: 349 | Зарегистр. 06-05-2004 | Отправлено: 16:41 31-05-2007
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aushkin
А если без -c?

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 18:16 31-05-2007
Aushkin

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно, но "-с" это:
 -c,  --continue                resume getting a partially-downloaded file.
эммм.... но работает. Спасибо большое!
 
В итоге получилась такая конструкция:
 
wget -m -r -np -nH -p -N ftp://мойфтп.ru -P "С:\Моя_папка"
 
но тогда вопрос, что будет с частично загруженным файлом, если во время загрузки связь разорвалась? -c и был добавлен, для того, что бы догружал.

Всего записей: 349 | Зарегистр. 06-05-2004 | Отправлено: 18:35 31-05-2007 | Исправлено: Aushkin, 18:36 31-05-2007
Открыть новую тему     Написать ответ в эту тему

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