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


188

Є онлайн-каталог HTTP, до якого я маю доступ. Я спробував завантажити всі підкаталоги та файли через wget. Але проблема полягає в тому, що при wgetзавантаженні підкаталогів він завантажує index.htmlфайл, який містить список файлів у цьому каталозі, не завантажуючи самі файли.

Чи є можливість завантажити підкаталоги та файли без обмеження глибини (начебто каталог, який я хочу завантажити - це лише папка, яку я хочу скопіювати на свій комп’ютер).

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

Відповіді:


356

Рішення:

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-certain-directory-listed-by-apache/


17
Дякую! Також FYI відповідно до цього ви можете використовувати -Rяк -R cssдля виключення всіх CSS-файлів, так і -Aяк -A pdfзавантаження тільки PDF-файлів.
Джон

7
Дякую! Додаткова порада, взята зі сторінки wget man 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.
jgrump2012

3
Я отримую цю помилку 'wget' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл.
хаміш

1
@hamish вам може знадобитися спочатку встановити wget або ж wget не є у вашому $ PATH.
Mingjiang Shi

16
Чудова відповідь, але зауважте, що якщо у robots.txtкаталозі є файл, який забороняє завантажувати файли, це не спрацює. У цьому випадку вам потрібно додати -e robots=off . Дивіться unix.stackexchange.com/a/252564/10312
Даніель Гершкович

45

Мені вдалося змусити це працювати завдяки цій публікації, що використовує VisualWGet . Це чудово працювало для мене. Важливою частиною здається перевірка -recursiveпрапора (див. Зображення).

Також встановлено, що -no-parentпрапор важливий, інакше він спробує завантажити все.

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


2
Щойно знайшли це - грудень 2017. Це прекрасно працює. Я отримав це на sourceforge.net/projects/visualwget
SDsolar

2
Працювало чудово на машині Windows, не забудьте перевірити параметри, згадані у відповіді, інакше це не буде працювати
csharpcoder

Не працює з певними https. @DaveLucre, якщо ви спробували з wget у cmd-рішенні, ви також можете завантажити, але деякі сервери цього не дозволяють, я думаю
Yannis

що робить перевірений --no-parent?
Т.Тодуа

1
Працюємо в березні 2020 року!
Містер-програміст

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

З man wget

'-r' '--рекурсивний' Увімкніть рекурсивне отримання. Докладнішу інформацію див. У розділі Рекурсивне завантаження. Максимальна глибина за замовчуванням - 5.

'-np' '--no-parent' Ніколи не піднімайтеся до батьківського каталогу при рекурсивному пошуку. Це корисна опція, оскільки гарантує, що завантажуватимуться лише файли, що знаходяться нижче певної ієрархії. Докладнішу інформацію див. У розділі Обмеження на основі каталогу.

'-nH' '- no-host-каталоги' Вимкнення генерації каталогів з префіксом хосту. За замовчуванням виклик Wget з '-r http://fly.srk.fer.hr/ ' створить структуру каталогів, починаючи з fly.srk.fer.hr/. Цей варіант вимикає таку поведінку.

'--cut-dirs = число' Ігнорувати компоненти каталогу каталогів. Це корисно для отримання тонкодисперсного контролю над каталогом, де буде збережено рекурсивне пошук.

Візьмемо, наприклад, каталог за адресою ' 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', бета / підкаталог буде розміщений на xemacs / beta, як можна було б очікувати.


3
Деякі пояснення були б чудовими.
Benoît Latinier

Що з завантаженням певного типу файлів за допомогою VisualWget ? Чи можна завантажувати лише файли mp3 у каталог та його підкаталоги у VisualWget ?
Джейсон

3

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

Є декілька розширень браузера, які можуть це зробити, але більшість вимагає встановлення менеджерів завантажень, які не завжди є безкоштовними, як правило, мають багато очей і використовують багато ресурсів. Ось такий, у якого немає жодного з цих недоліків:

"Master Download" - це розширення для Google Chrome, яке чудово працює для завантаження з каталогів. Ви можете відфільтрувати типи файлів для завантаження або завантажити весь каталог.

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

Щоб отримати оновлений список функцій та іншу інформацію, відвідайте сторінку проекту в блозі розробника:

http://monadownloadmaster.blogspot.com/



2

Не потрібно програмне забезпечення або плагін!

(корисний лише у випадку, якщо вам не потрібна рекурсивна дептч)

Використовуйте закладку. Перетягніть це посилання у закладках, потім відредагуйте та вставте цей код:

(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(); } } })();

і перейдіть на сторінку (звідки ви хочете завантажити файли) та натисніть цю закладку.


2

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

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'

працював ідеально і дуже швидко, це викреслило мою лінію інтернет, завантажуючи тисячі маленьких файлів. Дуже добре.
n13

-1

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/

Посилання для завантаження

Деталі в блозі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.