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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr, насколько мне известно, ни mail.ru, ни yandex.ru не используют базовую HTTP аутентификацию (а это ключи про нее, да).

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 14:03 19-05-2015 | Исправлено: ASE_DAG, 14:04 19-05-2015
srkr

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

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 19:05 19-05-2015
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
srkr
Ни с какими полями вгет не разбирается, он может отправить параметры со значениями через ПОСТ или ГЕТ, например.

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 19:09 19-05-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
srkr
 
Вы по ошибке неверно истолковали формат записи ключей. Если в описании любой UNIX утилиты указано длинное имя ключа начинающееся с "--" (короткое это символ "-" и следующая за ним буква обозначающая ключ), то после знака "=" если он есть в команду её вызова надо явно подставить значение параметра ключа.
 
В вашем случае:
 
--http-user=USER (set http user to USER)  
 --http-password=PASS (set http password to PASS)  
 
запись читается так:
 
--http-user=USER , где USER имя пользователя на данном сервере
 --http-password=PASS , где PASS пароль пользователя на данном сервере
 
которые вы должны явно указать в команде вызова Wget-а.

Отправлено: 19:18 19-05-2015 | Исправлено: Victor_VG, 19:25 19-05-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG, спасибо, но это азбука.

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 19:53 19-05-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
srkr
 
Естественно, а раз забыли - напомнил.

Отправлено: 19:55 19-05-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr
>> ни mail.ru, ни yandex.ru не используют базовую HTTP аутентификацию
> секьюрная или нет аутентификация — дело другое
 
Совершенно верно, «секьюрная или нет аутентификация — дело другое». Базовая HTTP аутентификация может и поверх TLS (то есть для HTTPS) работать. И тем не менее, ее редко кто использует, ибо слишком базово.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 19:56 19-05-2015 | Исправлено: ASE_DAG, 19:57 19-05-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ди в списке адресов, передаваемых ключом "-i" выборочно отключать строки. Т.е. некоторые страницы загружать не нужно, но до поры до времени. Когда понадобится, проверить.
Т.е., нет ли у wget ключика, который заставил отработать wget вхолостую?
 
Добавлено:
Увы, wget с передачей USER и PASS у меня не отработала.
 
Команда была такая:
 
wget --http-user=<мой логин> --http-password=<мой пароль> http://site.ru
 
Сохранился файл index.html, в котором отображены поля ввода логина и пароля.

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 01:37 25-05-2015
mithridat1



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

Цитата:
Увы, wget с передачей USER и PASS у меня не отработала.
 
Команда была такая:
 
wget --http-user=<мой логин> --http-password=<мой пароль> http://site.ru
 
Сохранился файл index.html, в котором отображены поля ввода логина и пароля.

Значит,на сайте не работает стандартная HTTP авторизация (что на самом деле давно уже норма).Для авторизации на таких ресурсах лучше использовать cookie.
 
Добавлено:

Цитата:
Можно ди в списке адресов, передаваемых ключом "-i" выборочно отключать строки. Т.е. некоторые страницы загружать не нужно, но до поры до времени. Когда понадобится, проверить.
Т.е., нет ли у wget ключика, который заставил отработать wget вхолостую?  

Вам лучше привести пример конкретной ситуации,иначе не совсем понятно что именно вы хотите.

Всего записей: 3469 | Зарегистр. 05-01-2006 | Отправлено: 08:10 25-05-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот пример. Команда
wget -iurl
где url - файл-список:
site1.ru
site2.ru
site3.ru
site4.ru
Две последних страницы загружать не нужно (они временне отсутствуют), а wget все равно дергается их грузить. В будущем эти страницы появятся, но чтобы не забыть о них, хотелось бы, чтобы они оставались в списке.
 
Я пробовал ставить перед ними какой-нибудь знак комментария, типа "#" или ";"ю. Это не прокатывает.
Сейчас я завел еще один файл на память "url-no" и перенес туда два последних.

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 10:27 25-05-2015
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr
Вы сами и ответили на свой вопрос - надо иметь два списка ссылок.

Всего записей: 3469 | Зарегистр. 05-01-2006 | Отправлено: 12:20 25-05-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
srkr
 
Похоже вам этот ключ комстроки поможет:
 
-reject-regex=REGEX  - регулярное выражение соответствующее игнорируемым URL
 
описываете ненужные вам URL перловой регуляркой (вот в неё можно задать и точные имена страниц) и вгет их пропустит. по крайней мере у версии 1.16 возможность есть, более старые проверить просто: wget --help > wget.txt и прочитать этот текст.

Отправлено: 12:25 25-05-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
-reject-regex=REGEX -- в виндовом вгет этого ключа нету. А жаль...

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 13:46 25-05-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
srkr
 
Есть, просто используйте сборку версии Wget v1.16.1.36-4781-dirty от Alex_Piggy или TumaGonx Zakkum v1.14 из шапки. В старых версиях много чего нет, но время не стоит на месте, а в  сборке Alex_Piggy и русская локализация есть. И возможно вы неточно искали по формату ключа, надо было искать по его названию reject-regex.

Отправлено: 14:19 25-05-2015 | Исправлено: Victor_VG, 14:31 25-05-2015
srkr

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

Цитата:
GNU Wget 1.11.4
 
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://www.gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
Originally written by Hrvoje Niksic <[email protected]>.
Currently maintained by Micah Cowan <[email protected]>.

Я сделал wget -h > wget.txt
Поискал подстроки - ничего не нашел.

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 15:47 25-05-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr
 
> нет ли у wget ключика, который заставил отработать wget вхолостую?
 
Есть, --spider.
 
> Можно ди в списке адресов, передаваемых ключом -i выборочно отключать строки.
 
Нет, нельзя.
 
> Две последних страницы загружать не нужно (они временно отсутствуют), а wget все равно дергается их грузить.
 
И почему это есть проблема?
 
> Я пробовал ставить перед ними какой-нибудь знак комментария
 
Ничто не мешает вам переложить чтение файла «уровнем повыше» — с wgetа ($ wget -iurl) на командный интерпретатор — и задать сколь угодно сложные правила его разбора. Ну, например:

Код:
#!/bin/bash
 
while read line; do
    [[ $line != '#'* ]] || continue
    wget "$line"
done < "$1"

 
$ thatscript url

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 17:56 25-05-2015 | Исправлено: ASE_DAG, 18:00 25-05-2015
srkr

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

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 18:06 25-05-2015
Victor_VG

Редактировать | Цитировать | Сообщить модератору
srkr
 
Те сборки вгета для винды и будут в ней работать. Проще всего использовать их, а тот же bash/sh есть в составе CygWin-а и Msys, но зачем их вам ставить коли есть нативная MinGW-а виндовая сборка??

Отправлено: 18:48 25-05-2015
Skif_off

Редактировать | Цитировать | Сообщить модератору
srkr

Цитата:
У меня ж Windows

Вам дали направление/пример построчной обработки списка, если не можете сами, то есть темы, где можно попросить: батники, скрипты JScript, VBScript, PowerShell, AutoIt, AutoHotkey и прочие. Часть соответствующих тем есть в этом разделе, часть (vbs-скрипты в частности) - в прикладном программировании.

Отправлено: 20:15 25-05-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr> У меня ж Windows
 
Сочувствую. Но что с того?
 
Если вам кажется, что Винда не осилит последовательный запуск N + 1 процессов, то во-первых, это не так — прекрасно осилит; а во-вторых, можно и фиксированным числом обойтись:  
 
$ awk '$1 !~ /^#/' url | wget -i -

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 21:45 25-05-2015 | Исправлено: ASE_DAG, 21:47 25-05-2015
Открыть новую тему     Написать ответ в эту тему

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