Jak pobrać katalog HTTP ze wszystkimi plikami i podkatalogami wyświetlanymi na liście plików / folderów online?

188

Istnieje internetowy katalog HTTP, do którego mam dostęp. Próbowałem pobrać wszystkie podkatalogi i pliki za pośrednictwem wget. Problem polega jednak na tym, że podczas wgetpobierania podkatalogów pobiera index.htmlplik zawierający listę plików w tym katalogu bez pobierania samych plików.

Czy istnieje sposób na pobranie podkatalogów i plików bez ograniczenia głębokości (tak jakby katalog, który chcę pobrać, jest tylko folderem, który chcę skopiować na mój komputer).

katalog HTTP online

Omar
źródło

Odpowiedzi:

356

Rozwiązanie:

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

Wyjaśnienie:

  • Pobierze wszystkie pliki i podfoldery z katalogu ddd
  • -r : rekurencyjnie
  • -np: nie przechodząc do wyższych katalogów, takich jak ccc /…
  • -nH : nie zapisuje plików w folderze nazwy hosta
  • --cut-dirs=3: ale zapisując go do ddd , pomijając pierwsze 3 foldery aaa , bbb , ccc
  • -R index.html: z wyłączeniem plików index.html

Odniesienie: http://bmwieczorek.wordpress.com/2008/10/01/wget-recursively-download-all-files-from-certain-directory-listed-by-apache/

Mingjiang Shi
źródło
17
Dziękuję Ci! Ponadto, zgodnie z FYI to można użyć -Rjak -R csswykluczyć wszystkie pliki CSS lub użyj -Ajak -A pdftylko do pobierania plików PDF.
Jan
7
Dzięki! Dodatkowe porady zaczerpnięte ze strony 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
Otrzymuję ten błąd: „wget” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy.
hamish
1
@hamish może być konieczne najpierw zainstalowanie wget lub wget nie znajduje się w Twojej ŚCIEŻCE $.
Mingjiang Shi
16
Świetna odpowiedź, ale zauważ, że jeśli w robots.txtkatalogu znajduje się plik uniemożliwiający pobieranie plików, to nie zadziała. W takim przypadku musisz dodać -e robots=off . Zobacz unix.stackexchange.com/a/252564/10312
Daniel Hershcovich
45

Dzięki temu postowi wykorzystującemu VisualWGet udało mi się to uruchomić . Działa mi to świetnie. Ważną częścią wydaje się być sprawdzenie -recursiveflagi (patrz zdjęcie).

Stwierdziłem również, że -no-parentflaga jest ważna, w przeciwnym razie spróbuje pobrać wszystko.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

mateuscb
źródło
2
Właśnie to znalazłem - grudzień 2017 r. Działa dobrze. Mam go na sourceforge.net/projects/visualwget
SDsolar
2
Działa dobrze na komputerze z systemem Windows, nie zapomnij sprawdzić opcji wymienionych w odpowiedzi, w przeciwnym razie to nie zadziała
csharpcoder
Nie działa z niektórymi https. @DaveLucre, jeśli próbowałeś z wget w rozwiązaniu cmd, możesz również pobrać, ale niektóre serwery na to nie pozwalają
Yannis Dran
co robi sprawdzane --no-parent?
T.Todua
1
Praca w marcu 2020 roku!
Pan Programator
7
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

Z man wget

„-r” „--recursive” Włącz pobieranie rekurencyjne. Aby uzyskać więcej informacji, zobacz Pobieranie rekurencyjne. Domyślna maksymalna głębokość to 5.

'-np' '--no-parent' Nigdy nie wchodź do katalogu nadrzędnego podczas pobierania rekurencyjnego. Jest to przydatna opcja, ponieważ gwarantuje, że zostaną pobrane tylko pliki poniżej określonej hierarchii. Aby uzyskać więcej informacji, zobacz Limity oparte na katalogach.

„-nH” „--no-host-katalogi” Wyłącza generowanie katalogów z prefiksem hosta. Domyślnie wywołanie Wget z opcją „-r http://fly.srk.fer.hr/ ” spowoduje utworzenie struktury katalogów zaczynających się od fly.srk.fer.hr/. Ta opcja wyłącza takie zachowanie.

'--cut-dirs = number' Ignoruj ​​komponenty katalogu numerów. Jest to przydatne do uzyskania dokładnej kontroli nad katalogiem, w którym zostaną zapisane rekurencyjne pobieranie.

Weźmy na przykład katalog „ ftp://ftp.xemacs.org/pub/xemacs/ ”. Jeśli odzyskasz go za pomocą „-r”, zostanie on zapisany lokalnie pod ftp.xemacs.org/pub/xemacs/. Chociaż opcja „-nH” może usunąć część ftp.xemacs.org/, nadal utkniesz w pub / xemacs. Tutaj przydaje się „--cut-dirs”; sprawia, że ​​Wget nie „widzi” składników zdalnych katalogów. Oto kilka przykładów działania opcji „--cut-dirs”.

Brak opcji -> ftp.xemacs.org/pub/xemacs/ -nH -> pub / xemacs / -nH --cut-dirs = 1 -> xemacs / -nH --cut-dirs = 2 ->.

--cut-dirs = 1 -> ftp.xemacs.org/xemacs/ ... Jeśli chcesz pozbyć się struktury katalogów, ta opcja jest podobna do kombinacji „-nd” i „-P”. Jednak w przeciwieństwie do „-nd”, „--cut-dirs” nie przegrywa z podkatalogami - na przykład z „-nH --cut-dirs = 1”, podkatalog beta / zostanie umieszczony w xemacs / beta, ponieważ można się spodziewać.

Natalie Ng
źródło
3
Niektóre wyjaśnienia byłyby świetne.
Benoît Latinier
Co z pobieraniem określonego typu pliku za pomocą VisualWget ? Czy w VisualWget można pobierać tylko pliki mp3 z katalogu i jego podkatalogów ?
Jason
3

wgetjest nieocenionym zasobem i czymś, z czego korzystam sam. Jednak czasami w adresie występują znaki wgetidentyfikujące jako błędy składniowe. Jestem pewien, że jest na to poprawka, ale ponieważ pytanie nie dotyczyło konkretnie wget, pomyślałem, że zaoferuję alternatywę dla tych osób, które bez wątpienia natkną się na tę stronę, szukając szybkiej poprawki bez wymaganej krzywej uczenia się.

Istnieje kilka rozszerzeń przeglądarki, które mogą to zrobić, ale większość z nich wymaga zainstalowania menedżerów pobierania, które nie zawsze są bezpłatne, zwykle powodują ból i zużywają wiele zasobów. Oto taki, który nie ma żadnej z tych wad:

„Download Master” to rozszerzenie dla Google Chrome, które świetnie nadaje się do pobierania z katalogów. Możesz filtrować typy plików do pobrania lub pobrać cały katalog.

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

Aby uzyskać aktualną listę funkcji i inne informacje, odwiedź stronę projektu na blogu programisty:

http://monadownloadmaster.blogspot.com/

Moscarda
źródło
2

Nie wymaga oprogramowania ani wtyczki!

(nadaje się tylko, jeśli nie potrzebujesz rekursywnego deptch)

Użyj bookmarkletu. Przeciągnij ten link w zakładkach, a następnie edytuj i wklej ten kod:

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

i przejdź na stronę (skąd chcesz pobrać pliki) i kliknij tę zakładkę.

T.Todua
źródło
2

możesz użyć lftp, eleganckiego scyzoryka pobierania, jeśli masz większe pliki, które możesz dodać --use-pget-n=10do polecenia

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'
nwgat
źródło
działało idealnie i bardzo szybko, dzięki czemu moja linia internetowa pobrała tysiące małych plików. Bardzo dobrze.
n13
-1

wget ogólnie działa w ten sposób, ale niektóre strony mogą mieć problemy i może tworzyć zbyt wiele niepotrzebnych plików HTML. Aby ułatwić to działanie i zapobiec niepotrzebnemu tworzeniu plików, udostępniam skrypt getwebfolder, który jest pierwszym skryptem dla systemu Linux, który sam napisałem. Ten skrypt pobiera całą zawartość folderu internetowego wprowadzonego jako parametr.

Kiedy próbujesz pobrać otwarty folder internetowy przez wget, który zawiera więcej niż jeden plik, wget pobiera plik o nazwie index.html. Ten plik zawiera listę plików folderu internetowego. Mój skrypt konwertuje nazwy plików zapisane w pliku index.html na adresy internetowe i pobiera je wyraźnie za pomocą wget.

Testowany na Ubuntu 18.04 i Kali Linux, może działać również na innych dystrybucjach.

Stosowanie :

  • rozpakuj plik getwebfolder z pliku zip podanego poniżej

  • chmod +x getwebfolder (tylko za pierwszym razem)

  • ./getwebfolder webfolder_URL

Jak na przykład ./getwebfolder http://example.com/example_folder/

Link do pobrania

Szczegóły na blogu

Byte Bitter
źródło