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

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

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

Вряд ли. Так и не понял, какого рода ссылки Вы подставляли/какую строку использовали. Если wget "http://rutracker.org/forum/viewtopic.php?p=49981517#49981517" --load-cookies=cookies.txt , то может действительно просто нужно переавторизоватся?

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

Ищете все "<input" между "<form" и "</form>" В сокращенном виде для LJ это

Код:
 
<form action="https://www.livejournal.com/login.bml?ret=1" id="login" method="post" name="login">
<input type='hidden' name='mode' value='login' />
<input type="text" class="txt" name="user" value="username" id="login_user" value="username" />                                    
<input type="password" name="password" class="txt lj_login_password" id="login_password" />
<input id="loginlj_submit" name="_submit" type="submit" value="Вход "/>                                            <input type="checkbox" name="remember_me" value="1" id="login-rememb" class="rememb">
</form>
 

Собираете все id (или name?) в строку с их value
Результат - что-то вроде "https://www.livejournal.com/login.bml?ret=1&mode=login&login_user=LOGIN&login_password=PASSWORD&loginlj_submit=%D0%92%D1%85%D0%BE%D0%B4%20&login-rememb=1"
Или "https://www.livejournal.com/login.bml" --post-data=" ret=1&mode=login&login_user=LOGIN&login_password=PASSWORD&loginlj_submit=%D0%92%D1%85%D0%BE%D0%B4%20&login-rememb=1"
wget --keep-session-cookies --load-cookies=cookies.txt --save-cookies=cookies.txt "https://www.livejournal.com/login.bml" --post-date="ret=1&mode=login&login_user=LOGIN&login_password=PASSWORD&loginlj_submit=%D0%92%D1%85%D0%BE%D0%B4%20&login-rememb=1"
Не проверял.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 16:37 04-12-2013
tolyn77



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

Всего записей: 1423 | Зарегистр. 07-09-2004 | Отправлено: 09:34 09-12-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tolyn77, если ключ --default-page, который вы, конечно, легко нашли в мане — это не то, что вам нужно, то нет, нельзя.

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Благодарю и приветствую!
 
По поводу Рутрекера имелось в виду, что если после перехода по этой ссылке скопировать адрес одной из 17-ти страниц результатов кроме первой и выполнить:  
 

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

 
скачанная страница вернёт текст "сессия устарела", хотя если ту же ссылку открыть в браузере - ее содержимое отобразится.
 
К примеру, адрес третьей страницы, в настоящий момент имеет следующий вид: http://rutracker.org/forum/search.php?id=TTKHmxnN401G&start=60 (сочетание букв и цифр в ссылке между "php?id=" и "&start=" от сессии к сессии меняется) и через определенное время станет нерабочей также и в браузере и потребуется заново перезапустить первую страницу результатов чтобы обновить сессию.

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 21:13 15-12-2013 | Исправлено: D1D1D1D, 18:39 02-01-2014
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, D1D1D1D
Странно. Не могу подтвердить. Логинюсь в броузере, захожу на страницу поиска, копирую ссылку. Логинюсь в Wget, передаю ему эту ссылку. Страница скачивается.
К сожалению, мне неясна Ваша цель. Вариант того что придумал/понял для cmd с использованием sed -  

Код:
 
@echo off
set "uid=7351924"
set "user=USER"
set "pass=PASS"
wget --keep-session-cookies --save-cookies cookies.txt --post-data "login_username=%user%&login_password=%pass%&login=Вход" --no-check-certificate http://login.rutracker.org/forum/login.php -O- > nul
wget "http://rutracker.org/forum/search.php?uid=%UID%&search_author=1" --load-cookies cookies.txt -O - | sed -n -e "/window.location/s/.*search.php?id=\(.*\)&.*/\1/p" > session.txt
set /p "session=" < session.txt
:loop  
echo %session%
set /p "task=Please enter page number for download ('exit' for exit)"
if "%task%"=="exit" exit
set /a "postnumber=(task-1)*30"
wget --load-cookies cookies.txt "http://rutracker.org/forum/search.php?id=%session%&start=%postnumber%" -O "%UID%_%task%.htm"
goto :loop
 


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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy спасибо, судя по коду, это то что нужно, но вот задействовать что-то не могу: почему-то сейчас каждая попытка залогиниться возвращает login.php с требованием ввести код подтверждения с картинки, хотя неделю назад с тем же кодом такого близко не наблюдал. Что бы причиной?

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

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, D1D1D1D
Всегда пожалуйста.
Слишком много попыток залогинится с одного IP. Просто перелогиньтесь в броузере.

Всего записей: 1537 | Зарегистр. 07-08-2002 | Отправлено: 18:30 16-12-2013
D1D1D1D

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

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 19:49 16-12-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
 
Подскажите, как можно скачать список ссылок с сайта, блокирующего автоматические запросы wget'a.
Мои ссылки и команда:

Цитата:
http://blogs.yandex.ru/search.xml?text=author%3D%22lj%22&holdres=mark&ft=comments&p=1
http://blogs.yandex.ru/search.xml?text=author%3D%22lj%22&holdres=mark&ft=comments&p=2
http://blogs.yandex.ru/search.xml?text=author%3D%22lj%22&holdres=mark&ft=comments&p=3


Код:
wget  -i links.txt -O "result.html"

 
Может, можно задержку какую поставить?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 18:05 30-12-2013 | Исправлено: D1D1D1D, 18:07 30-12-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
D1D1D1D
 
Я бы поставил реферер на браузер.

Отправлено: 18:44 30-12-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
Имелось в виду так? —

Код:
wget --referer="http://blogs.yandex.ru/" -i links.txt -O "result.html"

Так тоже блокируется.

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 20:00 30-12-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
D1D1D1D
 
Я неверно сказал:
 
  -U,  --user-agent=АГЕНТ идентифицировать себя как АГЕНТ вместо Wget/ВЕРСИЯ.
 
вот так. И как агента поставить к примеру  
 
--user-agent="Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0 SeaMonkey/2.23"
 
и пусть выдаёт себя за симанку 2.23 работающую на ХР.

Отправлено: 20:41 30-12-2013 | Исправлено: Victor_VG, 20:42 30-12-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
Т.е. у Вас такая команда со всеми условиями работает? —

Код:
wget --user-agent="Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0 SeaMonkey/2.23" -i links.txt -O "result.html"

На моей ХР не идёт.

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 21:24 30-12-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
Я бы её так задал:
wget --user-agent="Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0 SeaMonkey/2.23" --input-file=links.txt -O "result.html"  
 
но без links.txt получен result.html с длинной равной нулю.

Отправлено: 22:31 30-12-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня такая команда тоже не пошла. А какую версию wget используете?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 23:09 30-12-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
D1D1D1D
 
GNU Wget 1.14.90-4415-dirty

Отправлено: 23:50 30-12-2013
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
Можно ссылку, а то я обыскался что-то?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 13:07 31-12-2013
Victor_VG

Редактировать | Цитировать | Сообщить модератору
D1D1D1D
 
В шапке, вдобавок у меня ещё и старый вариант. Надо обновить свой, но наверное подожду исправлений в Far - больно неприятная ошибка вылезла.

Отправлено: 13:49 31-12-2013
D1D1D1D

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

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 22:01 01-01-2014
henz0

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как правильно передать POST-строку с символами = & и т.д.? Как ее заключать в кавычки, одинарные ли, двойные ли? Использую wget.exe из командной строки Windows
 
Правилен будет такой вариант?
 
wget.exe URL --post-data="моя&строка" ?

Всего записей: 1 | Зарегистр. 29-08-2013 | Отправлено: 23:01 02-01-2014
Открыть новую тему     Написать ответ в эту тему

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