Arşivlenmiş web sitesini yansıtmak için wget veya httrack kullanma sorunu


12

Bir web sitesinin yerel bir ayna oluşturmak için wget kullanmaya çalışıyorum. Ama bütün bağlantı sayfalarını alamadığımı görüyorum.

İşte web sitesi

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

İle başlayan tüm sayfaları istemiyorum web.archive.org, ancak ile başlayan tüm sayfaları istiyorum http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/.

Kullandığımda wget -rdosya yapımda

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

ancak bu veritabanının parçası olan tüm dosyalara sahip değilim, örneğin

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

Belki de httrack daha iyisini yapardı, ama şu anda bu çok fazla tutuyor.

Peki, arşivlenmiş bir web sitesinin yerel bir kopyasını İnternet Arşivi Wayback Makinesinden hangi yollarla elde etmek mümkündür ?


Adam! Tam olarak aynı sayfayı yansıtmaya çalıştım (ve orijinal site hala çevrimiçi olduğunda çok daha kolay olurdu ki ben de öfkelendim). Bence bir sorun, tüm dosyaların 20110722080716anlık görüntü altında erişilebilir olmaması , dolayısıyla wget'ın -npseçeneği yardımcı olmaz.
mpy

Eksik sayfaların gerçekten arşivlendiğini manuel olarak kontrol ettiniz mi? Archive.org her sayfayı her zaman arşivlemez.
nitro2k01

Yanıtlar:


20

Yararlı olsa da, önceki yanıtlar altta yatan soruyu özlü, güvenilir ve tekrarlanabilir bir şekilde çözemez. Bu yazıda, her biriyle ilgili zorlukları kısaca detaylandırıyoruz ve daha sonra mütevazı bir httrackçözüm sunuyoruz.

Arka fon

Bununla birlikte, buna başlamadan önce, mpy'nin iyi yazılmış tepkisine bakmayı düşünün . Ne yazık ki ihmal edilen bir görevde, mpy Wayback Machine'in belirsiz (ve dürüstçe gizemli) arşiv şemasını titizlikle belgelemektedir.

Şaşırtıcı olmayan bir şekilde, hoş değil. Siteleri tek bir dizine güvenli bir şekilde arşivlemek yerine, Wayback Machine geçici olarak tek bir siteyi sayısal olarak tanımlanmış iki veya daha fazla kardeş dizinine yayar. Bunun yansıtmayı zorlaştırdığını söylemek önemli bir eksikliktir.

Bu şema tarafından sunulan korkunç tuzakları anlamak, önceki çözümlerin yetersizliğini anlamak için temeldir. Hadi başlayalım, olur mu?

Önceki Çözüm 1: wget

İlgili StackOverflow sorusu "Eski web sitesini waybackmachine'den kurtar" muhtemelen wgetWayback yansıtma için önerilen en kötü suçludur . Doğal olarak, bu öneri temelde sağlamdır.

Karmaşık harici URL yeniden yazmanın (ör. Privoxy) Olmaması durumunda, wgetWayback arşivlenen siteleri güvenilir bir şekilde yansıtmak için kullanılamaz. As mpy seçtiğiniz yansıtma aracı olmayan geçişli indirmenizi izin vermelidir ne olursa olsun altında ayrıntıları "Sorun 2 + Çözüm," sadece hedef siteye ait URL'lerin. Varsayılan olarak, yansıtma araçlarının çoğu , hem hedef siteye hem de o siteye bağlı sitelere ait tüm URL'leri geçici olarak indirir. Bu, en kötü durumda "tüm İnternet" anlamına gelir.

Somut bir örnek verilebilir. Örnek etki alanını yansıtma zaman kearescue.com, sizin yansıtma aracı gerekir :

  • Eşleşen tüm URL'leri dahil et https://web.archive.org/web/*/http://kearescue.com. Bunlar, hedef site tarafından sağlanan varlıklardır (ör https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js.).
  • Diğer tüm URL'leri hariç tutun. Bunlar, yalnızca hedef siteden (örn https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js.) Bağlantılı diğer siteler tarafından sağlanan varlıklardır .

Bu tür URL'lerin hariç tutulmaması, genellikle sitenin arşivlendiği sırada, özellikle harici olarak barındırılan varlıkları (ör. YouTube videoları) gömen siteler için arşivlenen İnternet'in tamamının veya çoğunun tamamını çeker.

Bu kötü olur. İken wget yaptığı bir komut satırı sağlamak --exclude-directorieshariç tutulacak URL'leri eşleşen bir veya daha fazla desen kabul seçeneği, bunlar değil genel amaçlı düzenli ifadeler; *sözdizimi sıfır veya daha fazla karakter hariç/ , basit globlardır . Hariç tutulacak URL'ler keyfi pek içerdiğinden /karakterleri, wget olamaz bu URL'leri dışlamak için kullanılabilir ve dolayısıyla olamaz ayna Wayback-arşivlenmiş sitelere kullanılabilir. Dönemi. Talihsiz hikayenin sonu.

Bu konu en az 2009'dan beri kamuya açık durumda. Henüz çözülmedi. Sonraki!

Önceki Çözüm 2: Not Defteri

PrinzScrapBook , bir Firefox eklentisi önerir . Bir Firefox eklentisi.

Muhtemelen bilmeniz gereken tek şey buydu. İken ScrapBookbireyin Filter by String...işlevselliğini yapar adresi yukarıda bahsedilen 'Sorun 2 + Çözüm,' o mu değil 'Sorun 3 + Çözümü' sonradan ele - yabancı çiftleri yani sorunu.

ScrapBookEski sorunu yeterince ele alıp almadığı tartışmalıdır . Mpy'ın belirttiği gibi :

Karalama Defteri şimdiye kadar siteyi tamamen ele geçirememiş olsa da ...

Güvenilmez ve aşırı basit çözümler çözüm değildir. Sonraki!

Önceki Çözüm 3: wget + Privoxy

mpy daha sonra hem wgetve hem de sağlam bir çözüm sunar Privoxy. Yapılandırılması oldukça basit olsa da wget , makul bir Privoxyşey değildir. Veya basit.

Nedeniyle düzgün yüklemek, yapılandırmak ve kullanmak ölçülemez teknik engel için Privoxy, biz onaylamak henüz mpy 'ın çözümü. Bu gerektiğini ölçeklenebilir, sağlam bir şekilde çalışır. Giriş engelleri düşünüldüğünde, bu çözüm büyük ölçekli otomasyon için küçük ve orta ölçekli siteleri kurtarmaya çalışan ortalama bir web yöneticisinden muhtemelen daha uygundur.

wget+ Privoxydeğerinde bir göz? Kesinlikle. Ancak çoğu süper kullanıcıya daha basit, daha kolay uygulanabilir çözümlerle daha iyi hizmet verilebilir.

Yeni Çözüm: httrack

Enter httrack, wgetyansıtma işlevinin bir üst kümesini uygulayan bir komut satırı yardımcı programı . httrackhem kalıp tabanlı URL hariç tutma hem de basit site yeniden yapılandırmasını destekler. İlki mpy'nin "Problem 2 + Çözümü" nü çözer ; ikincisi, "Sorun 3 + Çözüm."

Aşağıdaki soyut örnekte değiştirin:

  • ${wayback_url}hedef sitenizin tamamını arşivleyen üst düzey dizinin URL'sine göre (ör 'https://web.archive.org/web/20140517175612/http://kearescue.com'.).
  • ${domain_name}${wayback_url}önek hariç tutulan aynı alan adıyla http://(ör 'kearescue.com'.).

İşte başlıyoruz. Yükleyin httrack, cdsitenizin indirilmesini istediğiniz yerel dizine bir terminal penceresi açın ve aşağıdaki komutu çalıştırın:

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

Tamamlandığında, geçerli dizin o URL'den yansıtılan her dosya türü için bir alt dizin içermelidir. Bu genellikle en azından şunları içerir:

  • css, tüm yansıtılmış CSS stil sayfalarını içerir.
  • html, tüm yansıtılmış HTML sayfalarını içerir.
  • js, yansıtılmış tüm JavaScript’leri içerir.
  • icoyansıtılmış bir favicon içerir.

Beri httrackiçten bu yapısını yansıtacak şekilde tüm indirilen içeriğin yeniden yazar değişiklik yapılmadan olduğu gibi, siteniz artık göz atılabilir olmalıdır. Yukarıdaki komutu zamanından önce durdurduysanız ve indirmeye devam etmek istiyorsanız, --continueseçeneği tam olarak aynı komuta ekleyin ve tekrar deneyin.

Bu kadar. Harici bükülme, hataya açık URL yeniden yazma veya kural tabanlı proxy sunucuları gerekmez.

Keyfini çıkarın, diğer süper kullanıcılar.


En az bir kişinin cevabımı iyice okuduğunu duyduğuma sevindim. Ve daha fazla analiz ve httrack çözümü için teşekkürler. +1
mpy

1
Httrack çözümü mükemmeldi, çok teşekkür ederim!
ChrisChinchilla

Küçük bir yardımdan memnunum çocuklar. Bu keder ve aldatmacanın gobleninin ne kadar korkunç olduğunu müthiş göz önüne alındığında, bulgularımı paylaşmak zorunda kaldım .
Cecil Curry

Ücret aktarım sınırını kaldırmak için şu parametreleri ekleyin: --disable-security-limits --max-rate = 0
Oswaldo

7

Ne yazık ki cevapların hiçbiri, arşivlenmiş bir web sitesinden tam bir ayna oluşturma sorununu çözemedi (her dosyayı onlarca kez çoğaltmadan). Bu yüzden başka bir yaklaşımı hackledim. Çözümüm ne genel bir çözüm ne de çok basit (okuma: kopyalama ve yapıştırma) olduğu için saldırıya uğramış önemli kelime. Wget ile yansıtma sırasında anında dosyaları yeniden yazmak için Privoxy Proxy Server kullandım .

Ama önce, Wayback Makinesinden yansıtma konusunda bu kadar zor olan ne ?

Sorun 1 + Çözüm

Wayback araç çubuğu etkileşimli kullanım için kullanışlıdır, ancak wget'i engelleyebilir. Bir privoxy filtre kuralı ile kurtulun

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

Sorun 2 + Çözüm

Tüm siteyi yakalamak istedim, bu yüzden çok küçük olmayan bir özyineleme derinliğine ihtiyaç duydum. Ama tüm sunucuyu taramak istemiyorum. Genellikle bu amaç için wget'in ebeveyn olmayan seçeneğini kullanırsınız -np. Ama bu burada çalışmayacak, çünkü sen almak istiyorsun

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

Ayrıca

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

(yollardaki değişen zaman damgasına dikkat edin). Atlama -np, wget'in taranmasını (...)http://cst-www.nrl.navy.milve sonunda tüm navi.milsiteyi almasını sağlar . Kesinlikle istemiyorum! Bu filtre -np, Wayback makinesiyle davranışı taklit etmeye çalışır :

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

Sözdizimine girmeye alıştırma olarak bırakacağım. Ne bu filtre yapar şudur: Bu gibi tüm Wayback URL'ler değiştirir http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/ile http://some.local.server/404onlar do sürece kadar değil içerirler http://cst-www.nrl.navy.mil/lattice/.

Ayarlamak zorundasınız http://some.local.server/404. Bu, wget'e 404 hatası göndermektir. Muhtemelen privoxy bunu daha zarif yapabilir. Ancak, benim için en kolay yolu sadece yerel bir http sunucusunda varolmayan bir sayfaya bağlantı yeniden yazmak oldu, bu yüzden bu sıkışmış.

Ve, aynı zamanda ayarlamanız gerekir hem oluşumları arasında http://cst-www.nrl.navy.mil/lattice/aynaya istediğiniz siteyi yansıtmak için.

Sorun 3 + Çözüm

Son olarak, bir sayfanın arşivlenmiş bazı sürümleri başka bir anlık görüntüdeki sayfaya bağlanabilir. Ve bunu bir başkasına. Ve böylece ... ve aynı sayfanın bir çok anlık görüntüsü elde edeceksiniz - ve wget tüm anlık görüntüleri getirene kadar bitirmeyi asla başaramayacak . Bunu gerçekten istemiyorum, ne de! Burada çok yardımcı oluyor, Wayback makinesi çok akıllı. Bir dosya isteyebilirsiniz

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

20110801041529anlık görüntüye dahil olmasa bile . Sizi otomatik olarak doğru olana yönlendirir:

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

Yani, tüm anlık görüntüleri en sonuncusuna yeniden yazmak için başka bir privoxy filtresi

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

Etkilenen her 14 basamaklı sayı /.../ile değiştirilir 20120713212803(bunu istediğiniz sitenin en son anlık görüntüsüne ayarlayın). Site yapısında Wayback makinesinden gelmeyen bu tür sayılar varsa bu bir sorun olabilir. Mükemmel değil, ama Strukturtypen sitesi için iyi .

Bununla ilgili güzel olan şey, bu wget'in yönlendirildiği yeni konumu yok sayar ve dosyayı yukarıdaki incelemede - olarak kaydeder web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html.

Arşivlenmiş siteyi yansıtmak için wget kullanma

Son olarak user.filter, user.actionaracılığıyla etkinleştirilen bu privoxy filtreleri (içinde tanımlanmış ) ile

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

wget'i her zamanki gibi kullanabilirsiniz. Wget'e proxy'yi kullanmasını söylemeyi unutmayın:

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

Bu seçenekleri kullandım, ama -mçalışmalıyım. Sonunda klasörler olacak

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

Wayback makinesi görüntüleri ( im_), stil sayfalarını ( cs_) vb. ayırırken, her şeyi bir araya getirdim ve ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/latticebuna göre çirkin göreceli bağlantıları ( ) değiştirmek için biraz sihir kullandım . Ama bu gerçekten gerekli değil.


1
Bu çok değerli bir cevaptı. Wayback Machine'in dahili site yapısını kesin olarak incelemeniz, sonunda tökezlediğim httrack tabanlı çözümün anahtarı oldu . Sen sallanıyorsun, mpy.
Cecil Curry

5

wget

--page-Requisites
Bu seçenek, Wget'in belirli bir HTML sayfasını düzgün görüntülemek için gereken tüm dosyaları indirmesine neden olur. Bu, eğik görüntüler, sesler ve başvurulan stil sayfaları gibi şeyleri içerir.

Normalde, tek bir HTML sayfası indirilirken, düzgün bir şekilde görüntülenmesi için gerekli olabilecek belgeler indirilmez. -R'yi -l ile birlikte kullanmak yardımcı olabilir, ancak Wget normal olarak harici ve satır içi belgeler arasında ayrım yapmadığından, genellikle gerekli olmayan "yaprak belgeler" ile bırakılır.

Örneğin, 1.html dokümanı, 1.gif referanslı bir "" etiketi ve 2.html harici dokümanı işaret eden bir "" etiketi içerdiğini varsayalım. 2.html öğesinin benzer olduğunu, ancak görüntüsünün 2.gif olduğunu ve 3.html dosyasına bağlandığını varsayalım. Diyelim ki bu, keyfi olarak yüksek sayıda devam ediyor.

-m
--mirror

Aynalamaya uygun seçenekleri açın. Bu seçenek özyineleme ve zaman damgasını açar, sonsuz özyineleme derinliğini ayarlar ve FTP dizini listelerini tutar. Şu anda -r -N -l inf --no-remove-listeleme ile eşdeğerdir.

Wget'in -r belirtilmiş gibi davranacağını, ancak yalnızca o tek sayfanın ve gereksinimlerinin indirileceğini unutmayın. Bu sayfadan harici belgelere bağlantılar izlenmez. Aslında, tek bir sayfayı ve tüm gereksinimlerini (ayrı web sitelerinde mevcut olsalar bile) indirmek ve lotun yerel olarak düzgün görüntülendiğinden emin olmak için, bu yazar -p'ye ek olarak birkaç seçenek kullanmayı sever:

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 sizin için en iyi takım olacak. Ama başka bir araç, bir firefoxuzantı öneriyorumscrapbook

karalama defteri

ScrapBook, Web sayfalarını kaydetmenize ve koleksiyonları kolayca yönetmenize yardımcı olan bir Firefox eklentisidir. Temel özellikler hafiflik, hız, doğruluk ve çoklu dil desteğidir. Başlıca özellikleri şunlardır:
* Web sayfasını kaydet * Web sayfasının
snippet'ini kaydet
* Web sitesini kaydet
* Koleksiyonu Yer İmleri gibi düzenleyin
* Tam metin arama ve koleksiyonun hızlı filtreleme araması
* Toplanan Web sayfasının düzenlenmesi
* Metin / HTML Opera Notlarına benzeyen düzenleme özelliği

Bir siteyi yansıtma Karalama defteri
yükleyin ve firefox'u yeniden başlatın

  1. Sayfayı tarayıcıya yükle [yansıtılacak web sayfası]
  2. Sayfayı sağ tıklayın -> Sayfayı farklı kaydet ...
  3. Derinlik Kaydet'ten seviyeyi seçin ve kaydet'e basın resim açıklamasını buraya girin
  4. seçmek Restrict to Drirectory/ Domaindan Filtre
    resim açıklamasını buraya girin

Yansıtmanın tamamlanmasını bekleyin. Yansıtmadan sonra web sitesinden ScrapBookmenüden çevrimdışı olarak erişebilirsiniz .


Karalama Defteri şimdiye kadar siteyi tamamen ele geçiremese de, diğer önerilere göre olası bir çözüme daha yakındı. Özellikle Dizeye Göre Filtrele ... seçeneği, ana makineye / alana göre filtrelemekten daha yararlı oldu. Dolayısıyla, sana lütuf verirler:)
mpy

0

Aşağıdaki komutlara dikkat edin, çünkü çok tutuyor. 'L' işaretinden sonraki 1, sitedeki 1 düzey derinlikte bağlantılar için tüm sayfaları almasını söyler. Örümcek daha derin olmasını istiyorsanız bunu 2 olarak değiştirin, ancak asla bitmeyebilir çünkü bir döngüye yakalanabilir.

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

Sitenin hangi bölümlerini saklamak istediğinizden ve hangi bölümleri önemsemediğinizden emin değilim, ancak yalnızca istediğiniz şeyi almak ve kendinizi önlemek için sitenin farklı bölümlerini beyaz listeye almalı ve / veya kara listeye almalısınız. tüm archive.org veya internet indiriliyor.

Kullanım -D www.examle.com,www.another.example.comistediğiniz veya kullanım beyaz listesi yalnızca etki etmek --exclude-domains www.examle.com,www.another.example.com istemediğiniz neyi Kara listeye.


Teşekkürler, ancak beyaz / kara listeleme ile ilgili sorun, tüm arşivlenmiş web sitelerinin web.archive.organa bilgisayardan gelmesidir. wget -npOrijinal site hala çevrimiçi olduğunda yansıtabilecek her şeyi yansıtmak istiyorum . -l3 veya 4'e yükseltilmesi gerektiğinden çok fazla yardımcı olmaz, bu nedenle web sitesi hiyerarşisine çok fazla yükselir.
mpy

0

İnternet Arşivi için URL'lerin biçimi, sitenin arşivlendiği tarih ve saati içerir. Değişmeyen alan varlıklarını kaydetmek, sitenin önceki sürümüne bağlanır.

Örneğin bu url'de http://web.archive.org/web/20000229123340/http://www.yahoo.com/ sitenin tarandığı tarih 29 Şubat 2000, 12:33 ve 40 saniyeydi.

Yani http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/hepiniz bunun için başlamak gerekir ama aynı zamanda bağlı tüm varlıkları kapmak gerekir http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.


Kesinlikle, ve sorun bu. Diyelim ki A sayfası B'ye bağlanıyor. Dolayısıyla, mevcut A sürümü eski B sürümüne bağlanır. Ancak B ayrıca A'ya bir bağlantı içerir. Böylece A'nın eski sürümü de geri alınır ve tekrar eski sürüme bağlanır. Bu (4 numaralı (gerekli) tarama derinliğinde), sonuçta dizin sayfasının düzinelerce sürümüyle sonuçlanır, ancak tüm gerekli dosyaları almazsınız.
mpy

0

Bunu daha iyi yapan bir araç zaten var:

wayback_machine_downloader domain.org 

Bunu elde etmek için yakutun yüklü olması gerekir. Ve sonra:

gem install wayback_machine_downloader
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.