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

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
igor_andreev
Действительно твой вариант работает. До этого я использовал вариант подсказанный на форуме такой
set http_proxy=http://xxx:xxx
wget.exe --proxy-user=xxxxxx --proxy-passwd=xxxxxx -i DrWeb.txt -a!drweb.log -c
 
C учетом подстановки юзера и пароля в твой вариант получил такую строчку
wget -e "ftp_proxy=xxx:xxx" -e "use_proxy=on" --proxy-user=xxxxxx --proxy-passwd=xxxxxx -i DrWeb.txt -a!drweb.log -c
 
Проблема в том, что такой вариант вместо непринятых файлов скачивает html страничку от прокси юзергейта такого содержания

Не удалось установить связь с сервером \"ftp.drweb.com\"!
Запрос: RETR /pub/drweb/bases/drw44435.zip  
Получен ответ: 550 Failed to open file.  

И сохраняет эту html-ку с именем drw44435.zip размером 2,5КБ. То есть по идее в следующем скачивании wget начнет докачивать этот файл и естественно будет битый архив. Как сделать чтоб отсутствующие файлы вообще не появлялись? По http таких проблем не было.

Всего записей: 977 | Зарегистр. 10-08-2005 | Отправлено: 01:33 07-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JekaRus
Сугубо имхо - базы доктора "весят" с гулькин нос и докачивать там нечего, лучше применять не --continue, а --mirror. Тем более, что у докторвеб-овцев есть дурная привычка перевыпускать базы Через неделю они этот drw44435.zip заменят и нечего там будет --continue, перекачивать только по новой.
 
А что у тебя в DrWeb.txt и откуда ты берешь его содержимое?  
 

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

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В файле DrWeb.txt пути к антивирусным базам.
 
ftp://ftp.drweb.com/pub/drweb/bases/drw44435.zip
ftp://ftp.drweb.com/pub/drweb/bases/drw44436.zip и тд
 
Вручную написал и пару раз в неделю батник запускаю для проверки.
Ни разу не слышал чтоб файлы баз заменяли. Заменяют полный комплект и файл вирусов на сегодняшний день drwtoday. А если я буду использовать миррор и каждый раз по новой скачивать, то с моим обрывистым нетом будет у меня по сто раз скачивать одно и то же. У меня очень отстойный инет. А файлы баз весят иногда по 400кил. Без докачки скачать нереально. Пока на фтп базы не положили было очень все удобно.

Всего записей: 977 | Зарегистр. 10-08-2005 | Отправлено: 06:48 07-04-2008
igor_andreev

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

Цитата:
Вручную написал и пару раз в неделю батник запускаю для проверки.  

А у тебя вообще нет возможности напрямую с ftp скачивать, что-бы нормальный index.html получать с содержимым папки bases\ ? Можно из файла .listing еще имена текущих zip вытаскивать, всяко актуальней список будет.

Цитата:
Ни разу не слышал чтоб файлы баз заменяли.

На info.drweb.com почаще заходи. Или подпишись там на rss (оранжевый значок в верхнем правом углу).
http://info.drweb.com/show/3286/ru
http://info.drweb.com/show/3289/ru
http://info.drweb.com/show/3293/ru
...  

Цитата:
А если я буду использовать миррор и каждый раз по новой скачивать

При --mirror скачивается только то, что отсутствует в локальной папке или старее файла, лежащего на ftp.
 

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 08:16 07-04-2008
Aeismann



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JekaRus, зачем придумывать такие сложности? Первым делом скачиваешь индексный хтмл, вторым заходом скармливаешь вгету в качестве источника.

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aeismann
Это при прямом соединении с ftp. А прокси "корячит" index.html, делает из него черт знает что

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



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

Код:
 
@echo off
 
set DrWeb=C:\Soft\System\DrWeb\
 
rem set Log=--output-file wget.log
set WGETRC=%CD%\.wgetrc
 
wget -O.\Archive\list.html http://www.drweb.ru/download/50/
wget -Azip -P .\Archive -i.\Archive\list.html -F
 
7za e Archive\*.zip -oUnpack -aos -x!*.txt
7za e Archive\*today*.zip -oUnpack -aoa -x!*.txt
 
xcopy Unpack\*.* %DrWeb% /Y /C
 
pause
 

 
настройки:
 

Код:
 
    # connection
timeout = 10
tries = 3
retry_connrefused = yes
waitretry = 10
    # download
timestamping = yes
recursive = no
    # proxy
http_proxy = 192.168.12.хх:8080
 

Всего записей: 174 | Зарегистр. 24-10-2006 | Отправлено: 11:41 09-04-2008 | Исправлено: Aeismann, 11:43 09-04-2008
igor_andreev

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

Цитата:
Или ты имеешь в виду листинг фтп-директории?

Да, тот файл index.html, что создает wget, если ему отдать ftp-url с завершающим обратным слешем(он сразу думает - раз слеш в конце - значит это не файл, а папка, ну ка я щас ее проиндексирую)

Цитата:
В любом случае, у меня отлично пашет вот такая конструкция

Работала неделю назад, загляни в свою папку с базами Там какая-то реорганизация, я не вникал, drweb.ru и drweb.com - это теперь одно и то-же. Ссылка http://www.drweb.ru/download/50/  
 тоже на drweb.com ведет.
 
Сейчас наверно вот так актуально будет:

Код:

wget -O "%temp%\drweb.tmp" http://download.drweb.com/bases/
type "%temp%\drweb.tmp" | find "ftp://" | geturls>drweb.lst

И в файле drweb.lst - готовый список для закачки(зеркалирования)
geturls - это geturls.zip (32 Кб), рульная штука для вытаскивания на свет божий всех http\ftp адресов из stdin  
 

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



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

Цитата:
Работала неделю назад, загляни в свою папку с базами

Угу, обнаружил... сижу, чешу репу... почему-то базы вообще не качаются, хотя адреса выкусываются нормально.
Конструкция
Цитата:
type "%temp%\drweb.tmp" | find "ftp://" | geturls>drweb.lst
любопытна, однако почему бы не доверить парсинг самому вгету?

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

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

Цитата:
любопытна, однако почему бы не доверить парсинг самому вгету?

Можно доверить, почему бы и нет? Я уже привык просто geturls пользоваться. Там мусора на странице все равно много, так можно:

Код:

wget -O "%temp%\drweb.tmp" http://download.drweb.com/bases/  
type "%temp%\drweb.tmp" | find "ftp://" >drweb.lst
wget --force-html --mirror -i drweb.lst

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 12:50 09-04-2008
BakLAN



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

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 00:35 10-04-2008
f_serg



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

Цитата:
Народ, а кто-нибудь компилить пробовал Wget ?

И неоднократно. А в чем вопрос-то?

----------
Serg

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
В том, что никак не могу скомпилить с поддержкой SSL. Использую компилятор GCC. Вначале какое-то время - где-то секунд 30 - проходит компиляция, а потом возникают ошибки в стиле: не могу найти ssl.h и т.д. Путь к папке, где установлен SSL - OpenSSL 0.9.8g - прописал в makefile, но это не помогает...

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



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

Код:
 wget -c http://host.ru/YYY.exe

Бывает что хост в дауне и закачать файт не получиться ((((
Вопрос:
Можно ли как то перенаправить закачку с запасного линка, если с первого не закачивает???
Спасибо.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 20:20 10-04-2008
igor_andreev

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

Цитата:
Можно ли как то перенаправить закачку с запасного линка, если с первого не закачивает???

wget -c "основной url" "запасной url"

Всего записей: 1595 | Зарегистр. 08-12-2004 | Отправлено: 20:28 10-04-2008 | Исправлено: igor_andreev, 20:31 10-04-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev, СПАСИБО!
А как сделать чтобы файл скачивался в ту директорию где и сам wget ?
Если использую так:
wget -c http://host.ru/111/222/YYY.exe  
то скачивает в ту директорию где и сам wget  
А если так:
wget --mirror "основной url" "http://host.ru/111/222/YYY.exe"
то файл скачивался вместе с кучей папок, в которых он и находился: host.ru/111/222/YYY.exe

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 20:40 10-04-2008 | Исправлено: XXXXL, 20:41 10-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
  -nd, --no-directories           don't create directories

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev, большое СПАСИБО!!!

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 21:02 10-04-2008
f_serg



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

Цитата:
не могу найти ssl.h и т.д.

Обрати внимание, что заголовочные файлы OpenSSL должны лежать в подкаталоге openssl. Соответственно, если ты пишешь -I C:/local/include , то у тебя должен быть каталог C:/local/include/openssl , в котором уже и находится ssl.h.

----------
Serg

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
Я уже что только не ставил в пути к  OpenSSL. Изначально написано, что нужно указать путь, где установлены они самые, я и поставил: OPENSSL_PATH = c:/openssl-0.9.8g, пробовал также OPENSSL_PATH = c:/openssl-0.9.8g/include, хотя заголовочные файлы лежат здась: OPENSSL_PATH = c:/openssl-0.9.8g/include/openssl. Наклон слешей тоже менял. Результат один и тот же. Подробнее...
 
 
Добавлено:
Я уже просто задолбался. Принёс всё на пары по Си. Учитель проделал те же самые действия и НИКАКИХ ПРОБЛЕМ! В чём могут быть грабли ума не приложу...

Всего записей: 2788 | Зарегистр. 15-12-2003 | Отправлено: 22:36 11-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:41 (c) xForumSaver