Udawaj, że chciałem pobrać prostą kopię strony na mój HD w celu trwałego przechowywania. Nie szukam głębokiego rekurencyjnego pobierania, tylko pojedynczej strony, ale także wszelkich zasobów załadowanych przez tę stronę, które również powinny zostać pobrane.
Przykład: https://www.tumblr.com/
Oczekiwać:
- Indeks.html
- Wszelkie załadowane obrazy
- Wszelkie załadowane pliki JS
- Wszelkie załadowane pliki CSS
- Wszelkie obrazy załadowane do pliku CSS
- linki do zasobów strony zlokalizowanych do pracy z pobranymi kopiami (brak zależności od sieci)
Chcę wiedzieć, czy możesz mi pomóc znaleźć najlepszą składnię wget lub inne narzędzie, które to zrobi. Narzędzia, których wypróbowałem, zwykle nie ładują obrazów przez CSS, więc strona nigdy nie wygląda poprawnie, gdy jest ładowana lokalnie. Dziękuję Ci!
Rozwiązanie styczne
Znalazłem sposób na to za pomocą FireFox. Domyślne zapisywanie jest zepsute i istnieje dodatek o nazwie „Zapisywanie zakończone”, który najwyraźniej może z tym zrobić dobrą robotę. Nie można go jednak pobrać, ponieważ mówi, że nie jest obsługiwany w bieżącej wersji FireFox. Powodem jest to, że został on dodany do tego dodatku: „Mozilla Archive Format”. Zainstaluj to, a następnie, gdy użyjesz opcji Plik> „Zapisz stronę jako…”, pojawi się nowa opcja o nazwie „Strona internetowa zakończona”, która jest zasadniczo starym dodatkiem, który naprawia standardową implementację używaną przez FireFox (co jest okropne). To nie jest rozwiązanie WGET, ale zapewnia realne rozwiązanie.
EDYCJA: Kolejna niedorzeczna kwestia dla każdego, kto może śledzić to pytanie w przyszłości, próbując to zrobić. Spraw, aby dodatek działał poprawnie, musisz Narzędzia> Format archiwum Mozilli i zmienić (straszne) ustawienie domyślne „rób wierną migawkę strony” na „zachowaj skrypty i źródła za pomocą Zapisz zakończone”, w przeciwnym razie dodatek opróżni wszystko pliki skryptów i zamień je na tekst „/ * Skrypt usunięty przez zapisanie migawki * /”.
Odpowiedzi:
wget -p -k http://ExampleSite.com
-P dostarczy ci wszystkich wymaganych elementów do poprawnego przeglądania strony (css, obrazy itp.). -K zmieni wszystkie linki (w tym te do CSS i obrazów), aby umożliwić ci przeglądanie strony offline, tak jak wyglądała online.
Aktualizacja: dotyczy konkretnej witryny przykładowej: tumblr.com
Podział:
-H = Pozwala wgetowi przejść do obsługi zagranicznego hosta. Wymagane, ponieważ tumblr nie ma swoich zdjęć na pierwszej stronie pod tym samym adresem, korzystają z secure.assets.tumblr.com patrz uwaga na temat wykluczania domen
-N = pobierze tylko te pliki, które są nowsze niż te, które aktualnie masz, na wypadek, gdyby z czasem ponownie pobierałeś tę samą stronę
-k = przekonwertuj swoje linki, aby poprawnie wyświetlić je offline
-p = pobiera wszystkie wymagane elementy, aby wyświetlić go poprawnie (css, obrazy itp.)
--exclude-domains = ponieważ strona główna tumblr.com zawiera link do quantserve.com i domyślam się, że nie chcesz tego, musisz wykluczyć go z pobierania wget. Uwaga : jest to bardzo ważna funkcja, której powinieneś używać z -H, ponieważ jeśli wejdziesz na stronę i mają one wiele linków do zewnętrznych hostów (pomyśl o reklamodawcach i materiałach analitycznych), to również będziesz chciał pobrać te rzeczy!
- nie jest wymagany certyfikat-check, ponieważ tumblr używa https
-U zmienia klienta użytkownika. W tym przypadku nie jest to konieczne, ponieważ pozwala domyślnemu klientowi użytkownika wget, ale wiem, że niektóre strony go zablokują. Właśnie go tu wrzuciłem, na wypadek gdybyś napotkał jakieś problemy na innych stronach. W przykładowym fragmencie, który podałem, pojawia się jako Mozilla Firefox 6.02a
wreszcie masz stronę: https://www.tumblr.com
źródło
W przypadku konkretnej witryny, o której wspomniałeś, i wielu innych zakodowanych jak wget (i curl) po prostu nie będzie działać. Problem polega na tym, że niektóre łącza zasobów wymagane do renderowania strony w przeglądarce są tworzone przez javascript. Wget oczekuje na uruchomienie funkcji javascript:
http://wget.addictivecode.org/FeatureSpecifications/JavaScript
Jednak do tego czasu strony budujące linki do zasobów za pomocą javascript nie będą klonowane za pomocą wget. Najłatwiejszym rozwiązaniem jest znalezienie narzędzia, które faktycznie buduje DOM i analizuje javascript, tak jak silnik przeglądarki (tj. Wspomniana metoda firefox).
źródło
Możesz to również zrobić automatycznie (lub programowo, jeśli wykonujesz kodowanie), wydając polecenie przez powłokę za pomocą wget:
Spowoduje to pobranie strony i plików wewnętrznych oraz uczynienie linków lokalnymi.
źródło
Myślę, że to wszystko złapie, ale spróbuj i przekonaj się.
źródło
$ ( człowiek wget ):
źródło