Как загрузить HTTP-каталог со всеми файлами и подкаталогами в том виде, в каком они отображаются в списке онлайн-файлов / папок?

У меня есть доступ к онлайн-каталогу HTTP. Я попытался загрузить все подкаталоги и файлы через wget. Но проблема в том, что когда wget загружает подкаталоги, он загружает index.html файл, который содержит список файлов в этом каталоге, без загрузки самих файлов.

Есть ли способ загрузить подкаталоги и файлы без ограничения глубины (как будто каталог, который я хочу загрузить, - это просто папка, которую я хочу скопировать на свой компьютер).

онлайн-каталог HTTP


person Omar    schedule 03.05.2014    source источник
comment
Этот ответ отлично сработал для меня: stackoverflow.com/a/61796867/316343   -  person Jahan    schedule 08.05.2021


Ответы (8)


Решение:

wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

Объяснение:

  • Он загрузит все файлы и подпапки в каталог ddd.
  • -r: рекурсивно
  • -np: не переходить в каталоги верхнего уровня, например ccc /…
  • -nH: файлы не сохраняются в папку с именем хоста
  • --cut-dirs=3: но сохранить его в ddd, пропустив первые 3 папки aaa, bbb, ccc
  • -R index.html: за исключением файлов index.html

Ссылка: http://bmwieczorek.wordpress.com/2008/10/01/wget-recursively-download-all-files-from-sure-directory-listed-by-apache/

person Mingjiang Shi    schedule 09.10.2014
comment
Спасибо! Кроме того, FYI в соответствии с этим вы можете использовать -R как -R css, чтобы исключить все файлы CSS, или использовать -A как -A pdf, чтобы загружать только файлы PDF. - person John; 13.04.2015
comment
Спасибо! Дополнительные советы взяты из справочной страницы wget When downloading from Internet servers, consider using the ‘-w’ option to introduce a delay between accesses to the server. The download will take a while longer, but the server administrator will not be alarmed by your rudeness. - person jgrump2012; 08.07.2016
comment
Я получаю эту ошибку «wget» не распознается как внутренняя или внешняя команда, работающая программа или командный файл. - person hamish; 05.03.2017
comment
@hamish, вам может потребоваться сначала установить wget, иначе wget отсутствует в вашем $ PATH. - person Mingjiang Shi; 07.03.2017
comment
Отличный ответ, но учтите, что если есть robots.txt файл, запрещающий загрузку файлов в каталоге, это не сработает. В этом случае вам нужно добавить -e robots=off . См. unix.stackexchange.com/a/252564/10312 - person Daniel Hershcovich; 16.04.2018
comment
Я установил wget и не могу заставить его работать. Вовсе не с cmd.exe, но несколько в Windows PowerShell. Если я просто введу wget someurl, он предоставит мне кучу информации, но если я попытаюсь добавить какой-либо из параметров, я получаю сообщение об ошибке, не может быть найден параметр, соответствующий имени параметра 'r' - person Chris L; 09.01.2019
comment
В Mac: Warning: Invalid character is found in given range. A specified range MUST Warning: have only digits in 'start'-'stop'. The server's response to this Warning: request is uncertain. curl: no URL specified! curl: try 'curl --help' or 'curl --manual' for more information нет результата - person user305883; 30.01.2019
comment
@ user305883 предупреждающее сообщение, которое вы опубликовали, пришло от curl? - person Mingjiang Shi; 31.01.2019
comment
@MingjiangShi из wget (командная строка из вашего ответа). Я также пробовал curl -O 'http://example.com/directory/', но не прошел: curl: Remote file name has no length! есть html-страница с <pre> <a href="name.pdf">name.pdf</a> <a href="name2.pdf">name2.pdf</a> <a href="image1.png">image1.png</a> <a href="name3.pdf">name3.pdf</a>...</pre>, и я хочу загрузить все перечисленные документы (в href). - person user305883; 31.01.2019
comment
а как насчет https? У меня есть предупреждение: OpenSSL: ошибка: 14077410: подпрограммы SSL: SSL23_GET_SERVER_HELLO: sslv3 alert handshake failure Невозможно установить соединение SSL. - person Yannis Dran; 04.05.2019
comment
Чтобы избавиться от всех типов индексных файлов (index.html? ... и т. Д.), Вам необходимо обязательно добавить: -R index.html * - person Jolly1234; 15.02.2020
comment
Как насчет загрузки файла определенного типа с помощью VisualWget? Можно ли загружать только файлы mp3 в каталог и его подкаталоги в VisualWget? - person ; 30.05.2020
comment
Кто-нибудь может мне помочь, у меня есть только 1 файл index.html.tmp и пустая папка, не могли бы вы помочь мне, в чем проблема? - person Mujtaba; 28.10.2020
comment
Я рекомендую вариант ниже: --reject-regex (. *) \? (. *) - person Namo; 14.11.2020
comment
php все пустые - person ßiansor Å. Ålmerol; 12.06.2021
comment
Эта команда у меня работает. И еще одно: если есть другие символы UTF-8, мы можем добавить еще один параметр --restrict-file-names = nocontrol. - person MadHatter; 20.07.2021

Мне удалось заставить это работать благодаря к этому сообщению с использованием VisualWGet. У меня это сработало. Похоже, что важной частью является проверка флага -recursive (см. Изображение).

Также обнаружено, что флаг -no-parent важен, иначе он попытается загрузить все.

введите описание изображения здесь введите описание изображения здесь

person mateuscb    schedule 16.06.2014
comment
Только что нашел это - декабрь 2017 года. Работает нормально. Я получил его на sourceforge.net/projects/visualwget - person SDsolar; 09.12.2017
comment
Работает нормально на машине с Windows, не забудьте проверить параметры, упомянутые в ответе, иначе это не сработает. - person coder3521; 28.12.2017
comment
Не работает с некоторыми https. @DaveLucre, если вы попытаетесь использовать wget в решении cmd, вы также сможете загрузить, но некоторые серверы не позволяют этого, я думаю - person Yannis Dran; 04.05.2019
comment
что делает проверенный --no-parent? - person T.Todua; 08.08.2019
comment
это тот же параметр, что и wget (как один из других ответов здесь): ‘-np’ ‘--no-parent’ Никогда не переходить в родительский каталог при рекурсивном извлечении. Это полезный вариант, поскольку он гарантирует, что будут загружены только файлы, расположенные ниже определенной иерархии. Дополнительные сведения см. В разделе «Ограничения на основе каталога». - person mateuscb; 08.08.2019
comment
Работаем в марте 2020 года! - person Mr Programmer; 11.03.2020
comment
Как насчет загрузки файла определенного типа с помощью VisualWget? Можно ли загружать только файлы mp3 в каталог и его подкаталоги в VisualWget? - person ; 30.05.2020

wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

От man wget

‘-r’ ‘--recursive’ Включите рекурсивное получение. Подробнее см. Рекурсивная загрузка. Максимальная глубина по умолчанию - 5.

‘-np’ ‘--no-parent’ Никогда не переходить в родительский каталог при рекурсивном извлечении. Это полезный вариант, поскольку он гарантирует, что будут загружены только файлы, расположенные ниже определенной иерархии. Дополнительные сведения см. В разделе «Ограничения на основе каталога».

‘-nH’ ‘--no-host-directories’ Отключить создание каталогов с префиксом хоста. По умолчанию вызов Wget с '-r http://fly.srk.fer.hr/' создаст структуру каталогов, начинающуюся с fly.srk.fer.hr/. Эта опция отключает такое поведение.

‘--cut-dirs = number’ Игнорировать компоненты телефонного справочника. Это полезно для получения детального контроля над каталогом, в котором будет сохраняться рекурсивный поиск.

Возьмем, например, каталог 'ftp://ftp.xemacs.org/pub/xemacs/ < / а> '. Если вы получите его с помощью «-r», он будет сохранен локально в ftp.xemacs.org/pub/xemacs/. Хотя опция «-nH» может удалить часть ftp.xemacs.org/, вы все равно застряли с pub / xemacs. Вот тут-то и пригодится --cut-dirs; это заставляет Wget не «видеть» количество компонентов удаленного каталога. Вот несколько примеров того, как работает опция «--cut-dirs».

Без параметров -> ftp.xemacs.org/pub/xemacs/ -nH -> pub / xemacs / -nH --cut-dirs = 1 -> xemacs / -nH --cut-dirs = 2 ->.

--cut-dirs = 1 -> ftp.xemacs.org/xemacs/ ... Если вы просто хотите избавиться от структуры каталогов, этот параметр аналогичен комбинации «-nd» и «-P». Однако, в отличие от '-nd', '--cut-dirs' не проигрывает с подкаталогами - например, с '-nH --cut-dirs = 1' подкаталог beta / будет помещен в xemacs / beta, так как можно было ожидать.

person Natalie Ng    schedule 19.06.2017
comment
Некоторые объяснения были бы замечательными. - person Benoît Latinier; 19.06.2017
comment
Как насчет загрузки файла определенного типа с помощью VisualWget? Можно ли загружать только файлы mp3 в каталог и его подкаталоги в VisualWget? - person ; 30.05.2020

вы можете использовать lftp, мощный армейский нож загрузки, если у вас есть файлы большего размера, вы можете добавить --use-pget-n=10 в команду

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'
person nwgat    schedule 14.05.2020
comment
работал отлично и очень быстро, это максимально увеличило мою интернет-линию, загружающую тысячи небольших файлов. Очень хороший. - person n13; 27.06.2020
comment
Объясните, пожалуйста, что эти параметры делают - person leetbacoon; 26.11.2020
comment
-c = continue, mirror = отражает содержимое локально, parallel = 100 = загружает 100 файлов,; exit = выходит из программы, use-pget = разбивает файлы большего размера на сегменты и загружает параллели - person nwgat; 17.12.2020
comment
У меня были проблемы с этой командой. Некоторые видео, которые я пытался скачать, были сломаны. Если я загружаю их в обычном режиме и по отдельности из браузера, все работает отлично. - person Hassen Ch.; 30.12.2020
comment
Решение, получившее наибольшее количество голосов, не имеет проблем ни с одним файлом. Все хорошо! - person Hassen Ch.; 30.12.2020
comment
Спасибо @nwgat, он отлично сработал и соответствует моим требованиям. - person Jahan; 08.05.2021

Никакого программного обеспечения или плагина не требуется!

(можно использовать, только если вам не нужен рекурсивный отдел)

Используйте букмарклет. Перетащите эту ссылку в закладки, затем отредактируйте и вставьте этот код:

(function(){ var arr=[], l=document.links; var ext=prompt("select extension for download (all links containing that, will be downloaded.", ".mp3"); for(var i=0; i<l.length; i++) { if(l[i].href.indexOf(ext) !== false){ l[i].setAttribute("download",l[i].text); l[i].click(); } } })();

и перейдите на страницу (откуда вы хотите загрузить файлы) и щелкните этот букмарклет.

person T.Todua    schedule 20.01.2018
comment
Открывает ли это диалоговое окно save as для каждого файла? - person akkk3; 10.06.2021

wget - бесценный ресурс, которым я пользуюсь сам. Однако иногда в адресе есть символы, которые wget идентифицируют как синтаксические ошибки. Я уверен, что для этого есть исправление, но поскольку этот вопрос не касался конкретно wget, я подумал, что предлагаю альтернативу тем людям, которые, несомненно, наткнутся на эту страницу в поисках быстрого исправления, не требующего обучения.

Есть несколько расширений браузера, которые могут это сделать, но большинство из них требует установки менеджеров загрузки, которые не всегда бесплатны, обычно вызывают утомление и используют много ресурсов. Вот тот, у которого нет ни одного из этих недостатков:

Download Master - это расширение для Google Chrome, которое отлично подходит для загрузки из каталогов. Вы можете отфильтровать типы файлов для загрузки или загрузить весь каталог.

https://chrome.google.com/webstore/detail/download-master/dljdacfojgikogldjffnkdcielnklkce

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

http://monadownloadmaster.blogspot.com/

person Moscarda    schedule 21.02.2016

Вы можете использовать это Дополнение Firefox для загрузки всех файлов в каталог HTTP.

https://addons.mozilla.org/en-US/firefox/addon/http-directory-downloader/

person Rushikesh Tade    schedule 06.03.2019

wget обычно работает таким образом, но на некоторых сайтах могут возникать проблемы, и он может создавать слишком много ненужных файлов html. Чтобы упростить эту работу и предотвратить создание ненужных файлов, я делюсь своим скриптом getwebfolder, который является первым скриптом Linux, который я написал для себя. Этот сценарий загружает все содержимое веб-папки, указанной в качестве параметра.

Когда вы пытаетесь загрузить открытую веб-папку с помощью wget, которая содержит более одного файла, wget загружает файл с именем index.html. Этот файл содержит список файлов веб-папки. Мой скрипт преобразует имена файлов, записанные в файле index.html, в веб-адреса и загружает их с помощью wget.

Протестировано на Ubuntu 18.04 и Kali Linux, может работать и в других дистрибутивах.

Использование :

  • извлеките файл getwebfolder из zip-файла, представленного ниже

  • chmod +x getwebfolder (только в первый раз)

  • ./getwebfolder webfolder_URL

например ./getwebfolder http://example.com/example_folder/

Ссылка для скачивания

Подробная информация в блоге

person Byte Bitter    schedule 10.02.2019