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

Редактировать | Цитировать | Сообщить модератору
Ключи для GNU Wget 1.15.20-8e5e-dirty Ru-Board Variant и если что пример wget.ini. С остальным позже по времени гляну как работу закончу.

Отправлено: 23:50 10-11-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HelioSS, насколько мне известно, информация по сочетанию ключей -cN в шапке все еще актуальна.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 00:36 11-11-2014
HelioSS



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

Цитата:
 информация по сочетанию ключей -cN в шапке все еще актуальна

А вот GUI WGet (VisualGet) нормально как-то докачивает

Всего записей: 3912 | Зарегистр. 26-11-2007 | Отправлено: 10:47 11-11-2014
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
 
Подскажите, с какими настройками получить изображения с этих ссылок? —
 

Код:
https://500px.com/photo/87615383/d-e-e-p-dirty-p-o-o-l-by-anton-belovodchenko?from=user
https://500px.com/photo/87614909/d-e-e-p-dirty-p-o-o-l-by-anton-belovodchenko?from=user
https://500px.com/photo/87507099/d-e-e-p-dirty-p-o-o-l-by-anton-belovodchenko?from=user

 
Не получается ни одной программой.

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 02:31 14-11-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D, Вэ-гетом — никакими, он яваскрипты не умеет.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 03:38 14-11-2014
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Ясно. А просто страницы скачать возможно? (Ссылки на изо я потом отдельно достану).

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 14:28 14-11-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D, забавные у вас приоритеты сложности — страницу загрузить есть проблема, а вычленить из нее ссылку на картинку — ерунда. Может наоборот, нет?
 
Ладно с вами, держите однострочником и то, и другое:
 
$ URI="http://500px.com/photo/87615383/d-e-e-p-dirty-p-o-o-l-by-anton-belovodchenko?from=user"
$ wget -O - "$URI" |\
    tidy 2>&- -asxml -utf8 -numeric |\
    xmlstarlet sel -t -m '//_:meta[@property="og:image"]' -v '@content' -n |\
    wget -i -

 
Обработку уникальных имен добавьте по вкусу.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 22:14 15-11-2014
D1D1D1D

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Спасибо, но почему-то код у меня не срабатывает ни с одной из версий wget. Даже вот так не работает:
 
wget "http://500px.com/photo/87615383/d-e-e-p-dirty-p-o-o-l-by-anton-belovodchenko?from=user"
 
По-моему, достать ссылки с помощью PowerGrep, куда проще))
 
Которой Вы пользуетесь?

Всего записей: 392 | Зарегистр. 04-04-2010 | Отправлено: 00:34 16-11-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D> но почему-то код у меня не срабатывает
 
Не вижу.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 21:40 16-11-2014
mithridat1



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

Всего записей: 3469 | Зарегистр. 05-01-2006 | Отправлено: 15:25 09-12-2014
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я так понимаю, wget не может писать уже в существующий файл, замещая старые байты на новые, может какая другая утиль может?  
Задача: Скачать первые 75 mb 100mb -ного файла, и вставить их в уже существующий 75 mb файл без его удаления, переименования и т д, то есть на лету.

Всего записей: 2093 | Зарегистр. 17-07-2006 | Отправлено: 16:53 11-12-2014
popkov

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

Цитата:
Задача: Скачать первые 75 mb 100mb -ного файла, и вставить их в уже существующий 75 mb файл без его удаления, переименования и т д, то есть на лету.

Если файл скачивался от начала, то с ключом -c wget будет дописывать недостающее, причем (насколько помню) последние несколько байт будут скачаны заново и сверены с имеющимися в файле на всякий случай. Если же файл скачивался в несколько потоков, то, конечно, wget не поможет - нужен FlashGet, GetRight или им подобные продвинутые качалки.

Всего записей: 1780 | Зарегистр. 22-03-2003 | Отправлено: 18:33 11-12-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven, popkov
 
То ли я вопроса не понял, то ли ответ дан на какой-то другой вопрос.
 
king_stiven
> скачать первые 75 Mb 100-Mb-ого файла, и вставить их в уже существующий 75-Mb-ый файл без его удаления
 
Было бы понятнее, если вы пояснили, что вам в итоге нужно, я например вашу задачу по части того, куда писать, не понял. Но вообще, нет, Вэ-гет не настолько низкоуровневая штука, тут определенно нужен curl:
 
$ curl --range "0-$((75 * 2**20))" 'http://example.org/file' > file
 
Здесь $((75 * 2**20)) — это башевская арифметика, если у вас другой шелл, подправляйте под него; 75 Мб запишутся в file, который, если существует, удален не будет, но будет очищен.

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 16:57 12-12-2014 | Исправлено: ASE_DAG, 16:58 12-12-2014
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
 
Интересно. Под виндой. Качает указанные  байты, но либо уменьшает размер файла(до нуля, как и вгет), либо удаляет его перед скачкой, что нельзя делать, надо писать в существующий файл, не меняя размера. dd не подходит, так как не даёт читать файл при своей работе.
 
Есть файл, который должен видеться системой неизменным по размеру, в него надо скачать чаcть файла из инета, не меняя размера этого файла, либо, чтобы при начале скачки было зарезервировано за скачиваемым файлом 200 mb сразу, как у aria2c, но скачиваемый файл больше 200 mb, и aria2c тут не подходит. Скачка должна вестись последовательно от 0до 200 mb.

Всего записей: 2093 | Зарегистр. 17-07-2006 | Отправлено: 17:33 12-12-2014 | Исправлено: king_stiven, 17:45 12-12-2014
Skif_off

Редактировать | Цитировать | Сообщить модератору
Кроме ссылок в шапке, под Win есть варианты?

Отправлено: 18:32 12-12-2014 | Исправлено: Skif_off, 10:49 13-12-2014
Jetr0

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уже весь мозг вынес - никак не получается, по этому прошу помощи:
 
Нужно сделать следующее:

Цитата:
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

Короче говоря, на сайте нужно перебрать порядка 100 миллионов страниц, но вот незадача - такое количество консоль не воспринимает, нужно запускать максимум по 25 000 страниц. И если запускать по столько вручную... то это крыша поехать может. Решил на шелле нарисовать скриптик, который сам подставляет нужные значения, да еще и фйлы по папкам разбрасывает. Сделал. Начал проверять, и... три часа себе мозг выносил... вообще муть какая-то получается.
 
Собственно сама проблема:
 
Запускаю с консоли команду:

Код:
 
wget -E "http://example.org/index?page="{1..100}
 

Все ок, начинает лопатить как надо.
Добираемся до скрипта:

Код:
 
#!/bin/bash
 
wget -E "http://example.org/index?page="{1..100}
 

И начинается загрузка страницы "http://example.org/index?page=%7B1..100%7D"
 
Изменяю на второй вариант:

Код:
 
#!/bin/bash
 
for i in {1..100}; do wget -E "http://example.org/index?page=$i"; done
 

Та-же байда.
 

Код:
 
#!/bin/bash
 
for ((i=1;i<=100;i++));; do wget -E "http://example.org/index?page=$i"; done
 

Ошибка:
Syntax error: Bad for loop variable
 
С этой вот проблемой я реально три часа мозг выносил - ну вот не пойму из за чего такое поведение. Кто подскажет?

Всего записей: 68 | Зарегистр. 09-01-2009 | Отправлено: 02:28 13-12-2014 | Исправлено: Jetr0, 11:48 13-12-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jetr0
 
Что это у вас в начале строки?
 
#!/bin/bash
 
$ for i in {1..100}; do wget -E "http://example.org/index?page=$i"; done
^^

 
Добавлено:
Skif_off> Кроме ссылок в шапке, по Win есть варианты?
 
Эмм... Лично я не понял, что вы спросили.


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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 10:04 13-12-2014
Skif_off

Редактировать | Цитировать | Сообщить модератору
ASE_DAG
В шапке есть одна строка со словом Windows -  Под Windows есть варианты:, вышедшего на днях релиза 1.16.1 там нет, единственное, что может придти в голову: я тупо не дожал клавишу "Д" в предлоге под. Исправил.

Отправлено: 10:55 13-12-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Skif_off> вышедшего на днях релиза 1.16.1 там нет
 
Есть.
 
Плюс, разумеется, вы всегда можете собрать его сами.
 
А что именно, если не секрет, такого нужного появилось / исправлено в этой версии?

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

Всего записей: 8468 | Зарегистр. 11-05-2005 | Отправлено: 11:28 13-12-2014
Jetr0

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Случайно поставил здесь, на странице. В скрипте такого нет.

Всего записей: 68 | Зарегистр. 09-01-2009 | Отправлено: 11:49 13-12-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:47:25 (c) xForumSaver