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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Каким способом можно из консоли заполнить поля web-формы?
wget может?

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 03:34 12-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr, не любую. application/x-www-form-urlencoded — да, multipart/form-data — нет. curl может и то, и другое, и вообще для этой цели удобнее.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 04:05 12-07-2015
srkr

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

Цитата:
curl может и то, и другое, и вообще для этой цели удобнее

Его тоже можно виндовый юзать? Или виндовый не стоит? Я уже вижу,ч то виндовый есть, но насколько оправдано его использование для моей задачи? И да, на странице загрузки несколько сборок под винды разных людей.... Пробовать нужно?
 
А если wget, то вот эти ключи использовать?

Код:
--post-data=STRING          use the POST method; send STRING as the data
--post-file=FILE            use the POST method; send contents of FILE
--method=HTTPMethod         use method "HTTPMethod" in the request
--body-data=STRING          send STRING as data. --method MUST be set
--body-file=FILE            send contents of FILE. --method MUST be set

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 15:33 12-07-2015 | Исправлено: srkr, 15:42 12-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr
 
> [curl] тоже можно виндовый юзать? Или виндовый не стоит?
 
А что, большой выбор?
 
> насколько оправдано его использование для моей задачи?
 
Откуда мне знать — вы же не озвучивали свою задачу.
 
> несколько сборок под винды разных людей
 
Поставьте уже себе Цигвин и не мучайтесь.
 
> А если...
 
Да.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 17:51 12-07-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача: заполнить поля web-формы и "нажать" кнопку [Опубликовать]
 
Вот пример использования ключа:

Код:
wget --save-cookies cookies.txt \
--post-data 'user=foo&password=bar' \
http://example.org/auth.php

Ссылка:
https://ru.wikipedia.org/wiki/Wget
 
Вот html-кусок формы, которую мне нужно заполнить (и опубликовать):

Код:
 
<!--              id int not null auto_increment,    
datenews date default '0000-00-00' not null,
srok int,
dateudal date default '0000-00-00' not null,
razd int,
name  varchar(30),
cyti varchar(25),
antext text NOT NULL,
primary KEY (id),-->    
<P>
 
        <form action="form.phtml?n=11" method="post" target="body">
<table width="95%" border="0">
<tr><td width='35%'    style='main'  class='td_sta14'>Имя:    </td><td  width='65%'><INPUT type='text' name='name' value='' size='35' maxlength='150'></td></tr><tr><td style='main'  class='td_sta14'>Город:</td><td>            <INPUT type='text' name='cyti' size='15' maxlength='25' value=''></td></tr>
<tr><td style='main'  class='td_sta14'>Срок:</td><td><select name='srok'>
                <option value='7'>1 неделя</option>
                <option value='14'>2 недели</option>
                <option value='21'>3 недели</option>
                <option value='31'>1 месяц</option>
                
            </SELECT></td></tr><tr><td style='main'  class='td_sta14'>Разделы:</td><td><INPUT type='checkbox' name='razd3' size='2' maxlength='2' value='1'>Продажа<br><INPUT type='checkbox' name='razd4' size='2' maxlength='2' value='1'>Купля<br><INPUT type='checkbox' name='razd5' size='2' maxlength='2' value='1'>Услуги<br><INPUT type='checkbox' name='razd6' size='2' maxlength='2' value='1'>Предложения<br><INPUT type='checkbox' name='razd7' size='2' maxlength='2' value='1'>Работа<br><INPUT type='checkbox' name='razd8' size='2' maxlength='2' value='1'>Разное<br></td></tr><tr><td style='main'  class='td_sta14'>Тема:</td><td>            <INPUT type='text' name='tema' size='40' maxlength='200'  value=''></td></tr>                    <tr><td style='main'  class='td_sta14'>Текст объявления:</td>            <td><textarea cols='50' rows='6' name='antext'></textarea></td></tr>            
<tr><td colspan="2"><HR></td></tr>
            <tr><td><input type="submit" name="edit_rec" value="Опубликовать"></td>
            <td><INPUT type="reset" value="Отмена"></td></tr>
 
</TABLE>

Вот прототип команды для wget:

Код:
wget --save-cookies cookies.txt --post-data "name=&cyti=&srok=7&razd8=1&tema=test&antext=text&edit_rec=Опубликовать" http://www.target_site.ru/form.phtml?n=9

Если ставить одинарные кавычки, то cmd.exe ругается на & (воспринимает, как соединение команд). Поэтому я использовал двойные кавычик. Не понимаю, как имитировать нажатие кнопки "Опубликовать". Если даю приведенную команду, то скачивается текст формы. Но команда отрабатывет долго. Там еще простая капча есть, но я ее в коде не привел. Код усеченный.

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 18:27 12-07-2015 | Исправлено: srkr, 19:20 12-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr, из Интернета, страница, я полагаю, не доступна? В любом случае, вы как минимум не туда запрос отправляете. Куда надо, вы увидите в той части формы, которую почему-то решили не приводить, а именно под form[action]. Плюс, имейте в виду, что не всякий сервер согласится принять частично заполненную форму — вы же пару полей, я вижу, опустили.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 18:52 12-07-2015 | Исправлено: ASE_DAG, 18:54 12-07-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я добавил кода сверху.
Да, урл фиктивного сайта.
Спасибо за участие. Ночью плотнее поработаю. Пустые заполню - это не вопрос. Меня больше интересует, как "нажать" кнопку.
 
Если http://www.target_site.ru/form.phtml?n=9
набрать в браузере - выпадает форма.
Если вставить в wget - скачивает эту форму. И сохраняет в файле
form.phtml-n=9.htm
 
Там сайт с 2-мя фреймами. Есть шапка и пункты меню, где n=1...11. 9 - это как раз форма - остальные рубрики.

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr
 
> урл фиктивного сайта
 
Кэп?
 
> Если http://www.target_site.ru/form.phtml?n=9 набрать в браузере — выпадает форма.
> Если вставить в wget — скачивает эту форму. И сохраняет в файле form.phtml-n=9.htm
 
Еще раз — куда отравлять POST-запрос написано в атрибуте action тэга form.

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> Куда отравлять POST-запрос написано в атрибуте action тэга form
Не пойму, что мне нужно делать в соответствии с этим предложением.

Код:
<form action="doska_table.phtml?n=11" method="post" target="body">

Атрибут action="doska_table.phtml?n=11"
значение атрибута - относительный урл (показывает категоию по-умолчанию), который если использовать как параметр для wget, не будет работать. wget нужно давать полный урл.
Относительный в html-тексте только браузер понимает правильно.
 
Вроде у меня поля заполняются. Потому что в результате скачивается страница, где написано, что неправильно вбита капча.
 
А есть ли какой-то способ подсмотреть, правильно ли значения попадают в поля?
 
> Кэп?
Что это?

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 11:04 13-07-2015 | Исправлено: srkr, 12:58 13-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr
> Не пойму, что мне нужно делать в соответствии с этим предложением.
> Атрибут action="doska_table.phtml?n=11", значение атрибута — относительный урл, который если использовать как параметр для wget, не будет работать. wget нужно давать полный урл.
 
Ну вы же сами и ответили себе, что делать, — давать абсолютный URI: http://www.target_site.ru/doska_table.phtml?n=11
 
> А есть ли какой-то способ подсмотреть, правильно ли значения попадают в поля?  
 
В каком смысле? Вы думаете, что вы пишете это ваше cyti, а wget не может этого терпеть, обращается к aspell, и исправляет на city? :-) Программы GNU не настолько интегрированы.
 
>> Кэп?  
> Что это?
 
https://lurkmo.re/К._О.

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
>>> Кэп?  
>> Что это?  
>https://lurkmo.re/К._О.
 
Понятно. Это как в анекдоте?

Цитата:
Муж с женою ругается: "Ты такая тупая, такая тупая, что..." Стучит костяшками паьцев об стол. Жена бросается к входной двери. Муж (кричит): "Сиди, дура, я сам открою!!!"

 
А вот вопрос про POST, GET. Если я браузером открываю страницу формы, затем ее заполняю и нажимаю "Отправить". Вот во всей этой цепочке исполняется два запроса: сначала GET, а затем POST?
 
А если, как я вегетом делаю (заполняю поля из командной строки), то только POST?

Всего записей: 48 | Зарегистр. 14-12-2009 | Отправлено: 20:58 13-07-2015 | Исправлено: srkr, 01:12 14-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
srkr> А если, как я вегетом делаю (заполняю поля из командной строки), то только POST?
 
Ну да. Что там в за форма и как ее заполнять, вы один раз посмотрели.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 00:39 14-07-2015
chAlx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи, кто пользуется ВГетом для обновления файлов (-N), обратите внимание: на винде это может не работать. Т.е. файл-то обновляется, но каждый раз скачивается независимо от наличия такой же версии. А с Линуксовым билдом всё нормально.

Всего записей: 1490 | Зарегистр. 19-03-2003 | Отправлено: 15:12 12-08-2015
useretail



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chAlx
последняя версия 1.16.3, у вас 1.13.4

Всего записей: 496 | Зарегистр. 14-09-2007 | Отправлено: 04:21 15-08-2015
srkr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как загрузить страницк с картинками?
Использовать ключ "-A" с расширениями?
Без рекурсии?
 
Есть еще ключ "-p"
 
-p,  --page-requisites           get all images, etc. needed to display HTML page
 
Но у меня по этому ключу закачиваются css и прочие вспомогательные файлы.

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



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
srkr
Проще потом удалить все лишнее. А без рекурсии или -p ничего не закачается, кроме самой страницы.

Всего записей: 3758 | Зарегистр. 11-03-2002 | Отправлено: 09:35 15-08-2015
chAlx

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

Цитата:
последняя версия 1.16.3, у вас 1.13.4

К чему бы это? ;)
Я уверен, что в Линуксе могу использовать хоть v1.0, и в ней опция проверки даты файла будет работать нормально (если она там уже есть). Но мне не приходило в голову перезакачивать файл для проверки, не обновился ли он (конкретно этот файл -- браузерное расширение с встроенным автообновлением, его вообще нет смысла вручную проверять).
 
Мой комментарий касался тех, кто на десктопной Винде делает лишние проверки неправильно настроенным софтом, которые не нужны и не работают. Из за чего не работают (кривые параметры запуска, кривое системное время, криво устанавливаемая дата скачиваемого файла, кривой путь скаченного ранее файла, кривой билд Wget и т.д.), я не знаю. Но сервер настроен верно и при корректной проверке всё работает.
 
Минимум половина кривых запросов идёт с Рубордовского билда, поэтому и пишу здесь: ребята, вы что-то делаете не так.

Всего записей: 1490 | Зарегистр. 19-03-2003 | Отправлено: 22:29 16-08-2015
useretail



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

Цитата:
ребята, вы что-то делаете не так

1. Какое решение Вы предлагаете?
2. Почему Вы думаете что здесь кто-то что-то делает не так, если Вы даже не пробовали последнюю версию? Или пробовали?
 
Версии 1.0 не существует в природе, так как ранее проект wget назывался geturl. Кроме того, опции -N там просто нет.

Всего записей: 496 | Зарегистр. 14-09-2007 | Отправлено: 22:57 16-08-2015
chAlx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
useretail:
 
Вы качаете файл flashplay_download.xpi Вгетом? С какими ключами? Зачем? ;)

Всего записей: 1490 | Зарегистр. 19-03-2003 | Отправлено: 11:06 17-08-2015
useretail



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chAlx
Товарищ, что Вы курите?
Я Вам подсказываю готовое решение, а Вы мне отвечаете в стиле «сам дурак».

Всего записей: 496 | Зарегистр. 14-09-2007 | Отправлено: 18:56 17-08-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:48:13 (c) xForumSaver