Problemy z używaniem wget lub httrack do tworzenia kopii lustrzanej zarchiwizowanej witryny

12

Próbuję użyć wget do stworzenia lokalnego lustra strony internetowej. Ale odkrywam, że nie otrzymuję wszystkich stron z linkami.

Oto strona internetowa

http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/

Nie chcę wszystkich stron zaczynających się od web.archive.org, ale chcę wszystkich stron zaczynających się od http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/.

Kiedy używam wget -r, w mojej strukturze plików znajduję

web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,

ale nie mam wszystkich plików, które są częścią tej bazy danych, np

web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.

Być może httrack poradziłby sobie lepiej, ale w tej chwili to za dużo.

Więc w jaki sposób można pobrać lokalną kopię zarchiwizowanej strony z Internetowego urządzenia do archiwizacji?

użytkownik695322
źródło
Mężczyzna! Próbowałem wykonać kopię lustrzaną dokładnie tej samej strony (i naprawdę się denerwować, że nie zrobiłem tego, gdy oryginalna strona była jeszcze online, co byłoby znacznie łatwiejsze). Myślę, że problem polega na tym, że nie wszystkie pliki są dostępne pod 20110722080716migawką, dlatego -npopcja wget nie pomoże.
mpy
Czy sprawdziłeś ręcznie, czy brakujące strony są faktycznie archiwizowane? Archive.org nie zawsze archiwizuje każdą stronę.
nitro2k01

Odpowiedzi:

20

Chociaż pomocne, wcześniejsze odpowiedzi nie zwięźle, niezawodnie i powtarzalnie rozwiązują podstawowe pytanie. W tym poście krótko opisujemy trudności każdego z nich, a następnie oferujemy skromne httrackrozwiązanie.

tło

Zanim jednak do tego dojdziemy, zastanów się nad przeczytaniem dobrze napisanej odpowiedzi mpy . W h [is | er] niestety zaniedbanym poście mpy rygorystycznie dokumentuje niejasny (i szczerze zaciemniający) schemat archiwalny Wayback Machine.

Nic dziwnego, że to nie jest ładne. Zamiast dyskretnie archiwizować witryny w jednym katalogu, The Wayback Machine efemerycznie dzieli pojedynczą witrynę na dwa lub więcej identyfikowanych numerycznie katalogów rodzeństwa. Powiedzenie, że to komplikuje tworzenie kopii lustrzanych, byłoby poważnym niedopowiedzeniem.

Zrozumienie strasznych pułapek przedstawionych przez ten schemat ma kluczowe znaczenie dla zrozumienia nieadekwatności wcześniejszych rozwiązań. Przejdźmy do tego, prawda?

Wcześniejsze rozwiązanie 1: wget

Powiązane pytanie StackOverflow „Odzyskaj starą stronę internetową z waybackmachine” jest prawdopodobnie najgorszym przestępcą pod tym względem, polecając wgetdo dublowania Wayback. Oczywiście to zalecenie jest zasadniczo nieuzasadnione.

W przypadku braku złożonego przepisywania zewnętrznego adresu URL (np. Privoxy), wgetNie można go używać do niezawodnego kopiowania stron archiwizowanych przez Wayback. Jak mało szczegółowych informacji w części „Problem 2 + Rozwiązanie”, każde wybrane narzędzie do tworzenia kopii lustrzanych musi umożliwiać nietransportowe pobieranie tylko adresów URL należących do witryny docelowej. Domyślnie większość narzędzi do tworzenia kopii lustrzanych pobiera tranzytowo wszystkie adresy URL należące zarówno do strony docelowej, jak i do stron z nią powiązanych - co w najgorszym przypadku oznacza „cały Internet”.

Konkretny przykład jest w porządku. Podczas tworzenia kopii lustrzanej przykładowej domeny kearescue.comnarzędzie do tworzenia kopii lustrzanych musi :

  • Uwzględnij wszystkie pasujące adresy URL https://web.archive.org/web/*/http://kearescue.com. Są to zasoby dostarczane przez witrynę docelową (np https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js.).
  • Wyklucz wszystkie pozostałe adresy URL. Są to zasoby dostarczane przez inne witryny, do których linki są jedynie połączone z witryny docelowej (np https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js.).

Brak wykluczenia takich adresów URL zazwyczaj powoduje zebranie całego lub większości Internetu zarchiwizowanego w momencie archiwizacji witryny, szczególnie w przypadku witryn zawierających zasoby hostowane zewnętrznie (np. Filmy z YouTube).

To by było złe. Chociaż wget nie zapewniają wiersza poleceń --exclude-directoriesopcję akceptując jedną lub więcej wzorów pasujących adresów należy wykluczyć, to nie wyrażenia regularne ogólnego przeznaczenia; są to uproszczone globusy, których *składnia odpowiada zero lub więcej znaków z wyłączeniem/ . Ponieważ wykluczane adresy URL zawierają dowolnie wiele /znaków, wget nie można ich używać do wykluczania tych adresów URL, a zatem nie można ich używać do tworzenia kopii lustrzanych witryn archiwizowanych przez Wayback. Kropka. Koniec niefortunnej historii.

Ten problem jest notowany od co najmniej 2009 roku. Nie został jeszcze rozwiązany. Kolejny!

Wcześniejsze rozwiązanie 2: notatnik

Prinz zaleca ScrapBookwtyczkę Firefox. Wtyczka do Firefoksa.

To chyba wszystko, co musiałeś wiedzieć. Natomiast ScrapBook„S Filter by String...funkcjonalność nie adres wspomnianego«Problem 2 + Solution», to jest nie rozwiązać późniejsza«3 Problem + rozwiązanie»- a mianowicie problemu zewnętrznych powtórzeń.

Wątpliwe jest, czy ScrapBooknawet odpowiednio rozwiązuje ten pierwszy problem. Jak przyznaje mpy :

Chociaż Scrapbook jak dotąd nie udało się całkowicie pobrać strony ...

Nierzetelne i zbyt uproszczone rozwiązania nie są rozwiązaniami. Kolejny!

Wcześniejsze rozwiązanie 3: wget + Privoxy

mpy następnie zapewnia solidne rozwiązanie wykorzystujące zarówno wgeti Privoxy. Chociaż wget jest dość prosty w konfiguracji, nie Privoxyjest uzasadniony. Lub proste.

Ze względu na nieprzezwyciężoną przeszkodę techniczną związaną z prawidłową instalacją, konfiguracją i użytkowaniem Privoxy, musimy jeszcze potwierdzić rozwiązanie mpy . To powinno działać w skalowalnym, dynamiczny sposób. Biorąc pod uwagę bariery wejścia, to rozwiązanie jest prawdopodobnie bardziej odpowiednie dla automatyzacji na dużą skalę niż przeciętny webmaster próbujący odzyskać małe i średnie witryny.

Czy wget+ Privoxywarto zobaczyć? Absolutnie. Ale większość superużytkowników może być lepiej obsługiwana przez prostsze, łatwiejsze do zastosowania rozwiązania.

Nowe rozwiązanie: httrack

Enter httrack, narzędzie wiersza polecenia implementujące nadzbiór wgetfunkcji dublowania. httrackobsługuje zarówno wykluczanie adresów URL oparte na wzorcach, jak i uproszczoną restrukturyzację witryny. Ten pierwszy rozwiązuje „Problem 2 + Solution” mpy ; drugi „Problem 3 + Rozwiązanie”.

W poniższym abstrakcyjnym przykładzie zamień:

  • ${wayback_url}przez adres URL katalogu najwyższego poziomu, który archiwizuje całą witrynę docelową (np 'https://web.archive.org/web/20140517175612/http://kearescue.com'.).
  • ${domain_name}przez tę samą nazwę domeny obecną w ${wayback_url}wykluczeniu prefiksu http://(np 'kearescue.com'.).

No to ruszamy. Zainstaluj httrack, otwórz okno terminala cddo katalogu lokalnego, do którego chcesz pobrać witrynę, i uruchom następujące polecenie:

httrack\
    ${wayback_url}\
    '-*'\
    '+*/${domain_name}/*'\
    -N1005\
    --advanced-progressinfo\
    --can-go-up-and-down\
    --display\
    --keep-alive\
    --mirror\
    --robots=0\
    --user-agent='Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5'\
    --verbose

Po zakończeniu bieżący katalog powinien zawierać jeden podkatalog dla każdego typu pliku dublowanego z tego adresu URL. Zwykle obejmuje to co najmniej:

  • css, zawierający wszystkie lustrzane arkusze stylów CSS.
  • html, zawierający wszystkie lustrzane strony HTML.
  • js, zawierający wszystkie dublowane skrypty JavaScript.
  • ico, zawierający jeden dublowany favicon.

Ponieważ httrackwewnętrznie przepisuje całą pobraną zawartość, aby odzwierciedlić tę strukturę, Twoja witryna powinna być dostępna do przeglądania bez zmian. Jeśli przedwcześnie zatrzymałeś powyższe polecenie i chcesz kontynuować pobieranie, dołącz --continueopcję do dokładnie tego samego polecenia i spróbuj ponownie.

Otóż ​​to. Nie są wymagane zewnętrzne zniekształcenia, podatne na błędy przepisywanie adresów URL ani serwery proxy oparte na regułach.

Cieszcie się, koledzy superużytkownicy.

Cecil Curry
źródło
Cieszę się, że przynajmniej jedna osoba dokładnie przeczytała moją odpowiedź. Dziękujemy za dalszą analizę i rozwiązanie httrack. +1
mpy
1
Rozwiązanie httrack było idealne, dziękuję bardzo!
ChrisChinchilla,
Cieszę się, że pomogłem chłopaki. Biorąc pod uwagę jak gut-wrenchingly okropny ten gobelin nieszczęścia i oszustwa było rozwikłać, po prostu musiał podzielić się moje wyniki.
Cecil Curry,
Aby usunąć limit transferu prędkości, dodaj następujące parametry: --disable-security-limit - max-rate = 0
Oswaldo
7

Niestety, żadna z odpowiedzi nie była w stanie rozwiązać problemu stworzenia kompletnego serwera lustrzanego ze zarchiwizowanej witryny (bez powielania każdego pliku kilkadziesiąt razy). Więc zhakowałem razem inne podejście. Włamanie to ważne słowo, ponieważ moje rozwiązanie nie jest ani rozwiązaniem ogólnym, ani bardzo prostym (czytaj: kopiuj i wklej). Użyłem Privoxy Proxy Server do przepisania plików w locie podczas tworzenia kopii lustrzanej za pomocą wget.

Ale po pierwsze, co jest takiego trudnego w tworzeniu kopii lustrzanej z Wayback Machine ?

Problem 1 + Rozwiązanie

Pasek narzędzi Wayback jest przydatny do użytku interaktywnego, ale może zakłócać działanie wget. Pozbądź się tego dzięki regule filtru prywatnego

FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s

Problem 2 + Rozwiązanie

Chciałem uchwycić całą stronę, więc potrzebowałem niezbyt małej głębokości rekurencji. Ale nie chcę, aby wget przeszukiwał cały serwer. Zwykle do tego celu używasz opcji wget bez rodzica-np . Ale to nie zadziała tutaj, ponieważ chcesz dostać

http://web.archive.org/web/ 20110722080716 /http://cst-www.nrl.navy.mil/lattice/struk/hcp.html

ale również

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

(zauważ zmieniony znacznik czasu na ścieżkach). Pominięcie -npspowoduje, że wget zacznie się czołgać (...)http://cst-www.nrl.navy.mili w końcu pobierze całą navi.milwitrynę. Zdecydowanie tego nie chcę! Tak więc ten filtr próbuje naśladować -npzachowanie na maszynie Wayback:

FILTER: blocknonparentpages emulate wget -np option
s|/web/([0-9].*)/http://cst-www.nrl.navy.mil/lattice/|THIS_IS_A_GOOD_$1_ADDRESS|gU
s|/web/(.*)/http(.*)([" ])|http://some.local.server/404$3|gU
s|THIS_IS_A_GOOD_(.*)_ADDRESS|/web/$1/http://cst-www.nrl.navy.mil/lattice/|gU

Zostawię to jako ćwiczenie do zagłębiania się w składnię. Filtr działa w następujący sposób: Zastępuje wszystkie adresy URL typu Wayback, http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/o http://some.local.server/404ile nie zawierają http://cst-www.nrl.navy.mil/lattice/.

Musisz się dostosować http://some.local.server/404. To jest wysłanie błędu 404 do wget. Prawdopodobnie privoxy może to zrobić bardziej elegancko. Jednak najprostszym sposobem dla mnie było przepisanie linku do nieistniejącej strony na lokalnym serwerze http, więc utknąłem przy tym.

I, trzeba także dopasować zarówno wystąpień o http://cst-www.nrl.navy.mil/lattice/odzwierciedlać witrynę, którą chcesz lustro.

Problem 3 + Rozwiązanie

I wreszcie niektóre zarchiwizowane wersje strony mogą zawierać linki do strony w innej migawce. I to do jeszcze jednego. I tak dalej ... a skończysz z wieloma migawkami tej samej strony - i wget nigdy nie skończy, dopóki nie pobierze wszystkich migawek. Naprawdę też tego nie chcę! Tutaj bardzo pomaga fakt, że maszyna Wayback jest bardzo inteligentna. Możesz poprosić o plik

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

nawet jeśli nie jest to uwzględnione w 20110801041529migawce. To automatycznie przekieruje Cię do właściwego:

http://web.archive.org/web/ 20110731225728 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

Kolejny filtr Privoxy do przepisania wszystkich migawek na najnowszy

FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g

W efekcie każda 14-cyfrowa liczba zawarta w /.../jest zamieniana na 20120713212803(dostosuj ją do najnowszej migawki żądanej witryny). Może to stanowić problem, jeśli w strukturze witryny występują takie liczby niepochodzące z maszyny Wayback. Nie idealne, ale w porządku dla strony Strukturtypen .

Zaletą jest to, że wget ignoruje nową lokalizację, do której jest przekierowywany i zapisuje plik - w powyższym przykładzie - jako web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html.

Korzystanie z wget do tworzenia kopii lustrzanej zarchiwizowanej witryny

Wreszcie te filtry prywatne (zdefiniowane w user.filter) włączone w user.actionvia

{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org

możesz używać wget jak zwykle. Nie zapomnij powiedzieć wget, aby używał proxy:

export http_proxy="localhost:8118"
wget -r -p -k -e robots=off http://web.archive.org/web/20120713212803/http://cst-www.nrl.navy.mil/lattice/index.html

Użyłem tych opcji, ale też -mpowinno działać. Skończysz z folderami

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

ponieważ maszyna Wayback oddziela obrazy ( im_), arkusze stylów ( cs_) itp. Połączyłem wszystko razem i użyłem trochę magii sed, aby odpowiednio zastąpić brzydkie linki względne ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice). Ale to nie jest naprawdę konieczne.

mpy
źródło
1
To była nieoceniona odpowiedź. Twoje dokładne rozeznanie wewnętrznej struktury strony Wayback Machine było kluczem do rozwiązania opartego na httrack , na które ostatecznie natknąłem się. Kołyszesz, mpy.
Cecil Curry,
5

wget

--page-Requisites
Ta opcja powoduje, że Wget pobiera wszystkie pliki niezbędne do prawidłowego wyświetlenia danej strony HTML. Obejmuje to między innymi wstawiane obrazy, dźwięki i odnośne arkusze stylów.

Zwykle podczas pobierania pojedynczej strony HTML wszelkie wymagane dokumenty, które mogą być potrzebne do jej prawidłowego wyświetlenia, nie są pobierane. Używanie opcji -r razem z opcją -l może pomóc, ale ponieważ Wget zwykle nie rozróżnia dokumentów zewnętrznych od dokumentów wstawianych, zazwyczaj pozostawia się „dokumenty liściowe”, które nie spełniają swoich wymagań.

Powiedzmy na przykład, że dokument 1.html zawiera znacznik „” odwołujący się do 1.gif i znacznik „” wskazujący na dokument zewnętrzny 2.html. Powiedz, że 2.html jest podobny, ale jego obraz to 2.gif i że prowadzi do 3.html. Powiedzmy, że trwa to do dowolnej arbitralnie wysokiej liczby.

-m
--mirror

Włącz opcje odpowiednie do tworzenia kopii lustrzanych. Ta opcja włącza rekurencję i znaczniki czasu, ustawia nieskończoną głębokość rekurencji i utrzymuje listę katalogów FTP. Obecnie jest to odpowiednik opcji -r -N -l inf --no-remove-listing.

Zauważ, że Wget będzie zachowywał się tak, jakby podano -r, ale zostanie pobrana tylko ta jedna strona i jej wymagania. Odsyłacze z tej strony do dokumentów zewnętrznych nie będą śledzone. W rzeczywistości, aby pobrać pojedynczą stronę i wszystkie jej wymagania (nawet jeśli istnieją na osobnych stronach internetowych) i upewnić się, że działka wyświetla się lokalnie, autor lubi używać kilku opcji oprócz -p:

wget -E -H -k -K -p http://<site>/<document>

SO wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice będzie dla ciebie najlepszym garniturem. Ale polecam inne narzędzie, firefoxrozszerzeniescrapbook

album na wycinki

ScrapBook to rozszerzenie przeglądarki Firefox, które pomaga zapisywać strony internetowe i łatwo zarządzać kolekcjami. Kluczowe cechy to lekkość, szybkość, dokładność i obsługa wielu języków. Główne cechy to:
* Zapisz stronę internetową
* Zapisz fragment strony internetowej
* Zapisz stronę internetową
* Organizuj kolekcję w taki sam sposób jak Zakładki
* Wyszukiwanie pełnotekstowe i szybkie filtrowanie wyszukiwania kolekcji
* Edycja zebranej strony internetowej
* Tekst / HTML funkcja edycji przypominająca uwagi Opery

Jak wykonać kopię lustrzaną strony
Zainstaluj notatnik i uruchom ponownie Firefox

  1. Załaduj stronę w przeglądarce [strona internetowa do skopiowania]
  2. Kliknij stronę prawym przyciskiem myszy -> Zapisz stronę jako ...
  3. wybierz poziom z opcji Głębokie Zapisz i naciśnij Zapisz wprowadź opis zdjęcia tutaj
  4. wybierz Restrict to Drirectory/ Domainz filtra
    wprowadź opis zdjęcia tutaj

Poczekaj na zakończenie tworzenia kopii lustrzanej. Po wykonaniu kopii lustrzanej można uzyskać dostęp do strony internetowej offline z ScrapBookmenu.

Prinz
źródło
Chociaż Scrapbook jak dotąd nie udało się całkowicie przejąć strony, był bliżej możliwego rozwiązania niż inne sugestie. Zwłaszcza opcja Filtruj według ciągu ... była bardziej pomocna niż filtrowanie według hosta / domeny. Dlatego :)
przyznam
0

Zachowaj ostrożność przy użyciu poniższego polecenia, ponieważ bardzo dużo ono chwyta. 1 po „l” nakazuje pobranie wszystkich stron z linkami w witrynie o głębokości 1 poziomu. Jeśli chcesz, aby pająk był głębszy, zmień to na 2, ale może się nigdy nie skończyć, ponieważ może zostać złapany w pętlę.

wget -rHpkl 1 -e robots=off http://www.example.com/

Nie jestem pewien, które części witryny chcesz zachować, a które części Cię nie obchodzą, ale prawdopodobnie powinieneś umieścić białą listę i / lub czarną listę różnych części witryny, aby uzyskać tylko to, czego chcesz i zapobiec pobieranie całego archiwum.org lub Internetu.

Użyj, -D www.examle.com,www.another.example.comaby dodać do białej listy tylko te domeny, których chcesz, lub użyj, --exclude-domains www.examle.com,www.another.example.com aby umieścić na czarnej liście to, czego nie chcesz.

Michael Yasumoto
źródło
Dzięki, ale problem z białą / czarną listą polega na tym, że wszystkie zarchiwizowane witryny pochodzą od web.archive.orghosta. Chcę wykonać kopię lustrzaną wszystkich elementów, które wget -npbyłyby dublowane, gdy oryginalna witryna była nadal online. -lteż niewiele pomaga, ponieważ należy go zwiększyć do 3 lub 4, co powoduje zbyt duże zwiększenie hierarchii witryny.
mpy
0

Format adresów URL archiwum internetowego obejmuje datę i godzinę zarchiwizowania witryny. Aby zaoszczędzić miejsce, zasoby, które nie uległy zmianie, są powiązane z poprzednią wersją witryny.

Na przykład w tym adresie URL http://web.archive.org/web/20000229123340/http://www.yahoo.com/ data przeszukania witryny to 29 lutego 2000 r. O godz. 12:33 i 40 sekund.

Tak więc, aby uzyskać wszystko http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/, musisz zacząć od tego, ale także pobrać wszystkie powiązane zasoby http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.

Brian
źródło
Dokładnie i to jest problem. Powiedzmy, że strona A prowadzi do B. Tak więc bieżąca wersja A prowadzi do starej wersji B. Ale B zawiera również łącze do A. Tak więc stara wersja A jest również pobierana i ponownie łączy się ze starszą wersją. To (przy (potrzebnej) głębokości indeksowania 4) prowadzi do tego, że powstaje dziesiątki wersji strony indeksu, ale nie wszystkie potrzebne pliki.
mpy
0

Istnieje już narzędzie, które robi to lepiej:

wayback_machine_downloader domain.org 

Aby go zdobyć, musisz mieć zainstalowany rubin. I wtedy:

gem install wayback_machine_downloader
Eduard Florinescu
źródło