Kesulitan menggunakan wget atau httrack untuk mencerminkan situs web yang diarsipkan

12

Saya mencoba menggunakan wget untuk membuat mirror lokal dari sebuah situs web. Tetapi saya menemukan bahwa saya tidak mendapatkan semua halaman yang terhubung.

Inilah situs webnya

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

Saya tidak ingin semua halaman yang dimulai dengan web.archive.org, tetapi saya ingin semua halaman yang dimulai http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/.

Ketika saya gunakan wget -r, dalam struktur file saya, saya menemukan

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

tetapi saya tidak memiliki semua file yang merupakan bagian dari database ini, mis

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

Mungkin httrack akan lebih baik, tetapi saat ini itu terlalu banyak.

Jadi, dengan cara apa mungkinkah untuk mengambil salinan lokal dari situs web yang diarsipkan dari Internet Archive Wayback Machine?

pengguna695322
sumber
Manusia! Saya mencoba untuk mencerminkan halaman yang persis sama (dan benar-benar marah karena saya tidak melakukannya ketika situs aslinya masih online, yang akan jauh lebih mudah). Saya pikir masalahnya adalah, bahwa tidak semua file dapat diakses di bawah 20110722080716snapshot, maka -npopsi wget tidak akan membantu.
mpy
Sudahkah Anda memeriksa secara manual bahwa halaman yang hilang sebenarnya diarsipkan? Archive.org tidak selalu mengarsipkan setiap halaman.
nitro2k01

Jawaban:

20

Meskipun bermanfaat, respons-respons sebelumnya gagal menyelesaikan pertanyaan yang mendasarinya secara ringkas, andal, dan berulang. Dalam posting ini, kami secara singkat merinci kesulitan dengan masing-masing dan kemudian menawarkan httracksolusi berbasis sederhana .

Latar Belakang

Namun sebelum kita membahasnya , pertimbangkan membaca respons mpy yang ditulis dengan baik. Dalam pos yang diabaikan dengan menyedihkan, mpy dengan cermat mendokumentasikan skema pengarsipan Wayback Machine yang tidak jelas (dan benar-benar membingungkan).

Tidak mengejutkan, itu tidak cantik. Daripada mengarsipkan situs secara sehat ke dalam satu direktori, The Wayback Machine secara singkat menyebarkan satu situs di dua atau lebih direktori saudara yang teridentifikasi secara numerik. Mengatakan bahwa ini memperumit pencerminan akan menjadi pernyataan yang meremehkan.

Memahami perangkap mengerikan yang disajikan oleh skema ini adalah inti untuk memahami ketidakmampuan solusi sebelumnya. Mari kita lanjutkan, oke?

Solusi Sebelumnya 1: wget

Pertanyaan StackOverflow terkait "Memulihkan situs web lama dari waybackmachine" mungkin merupakan pelaku terburuk dalam hal ini, merekomendasikan wgetuntuk mirroring Wayback. Tentu saja, rekomendasi itu pada dasarnya tidak sehat.

Dengan tidak adanya penulisan ulang URL eksternal yang kompleks (mis., Privoxy), wgetTidak dapat digunakan untuk mencerminkan situs yang diarsipkan Wayback dengan andal. Seperti detail mpy di bawah "Masalah 2 + Solusi," alat mirroring apa pun yang Anda pilih harus memungkinkan Anda untuk mengunduh secara non-transaktif hanya URL milik situs target. Secara default, sebagian besar alat mirroring mengunduh semua URL milik situs target dan situs yang ditautkan secara transitif dari situs itu - yang, dalam kasus terburuk, berarti "seluruh Internet."

Contoh konkret ada dalam urutan. Saat mencerminkan domain contoh kearescue.com, alat pencerminan Anda harus :

  • Sertakan semua URL yang cocok https://web.archive.org/web/*/http://kearescue.com. Ini adalah aset yang disediakan oleh situs target (misalnya, https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js).
  • Kecualikan semua URL lainnya. Ini adalah aset yang disediakan oleh situs lain yang hanya ditautkan dari situs target (misalnya, https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js).

Gagal mengecualikan URL tersebut biasanya menarik semua atau sebagian besar Internet yang diarsipkan pada saat situs diarsipkan, terutama untuk situs yang menanamkan aset yang dihosting secara eksternal (misalnya, video YouTube).

Itu akan buruk. Meskipun wget memang menyediakan --exclude-directoriesopsi baris perintah yang menerima satu atau beberapa pola URL yang cocok untuk dikecualikan, ini bukan ekspresi reguler tujuan umum; mereka gumpalan sederhana yang *sintaksinya cocok dengan nol atau lebih karakter tidak termasuk/ . Karena URL yang dikecualikan mengandung banyak /karakter secara sewenang-wenang , wget tidak dapat digunakan untuk mengecualikan URL ini dan karenanya tidak dapat digunakan untuk mencerminkan situs yang diarsipkan dengan Wayback. Titik. Akhir dari kisah malang.

Masalah ini telah menjadi catatan publik setidaknya sejak tahun 2009. Masalah ini belum diselesaikan. Lanjut!

Solusi Sebelumnya 2: Scrapbook

Prinz merekomendasikan ScrapBook, sebuah plugin Firefox. Plugin Firefox.

Mungkin itu yang perlu Anda ketahui. Sementara ScrapBook's Filter by String...fungsi tidak alamat tersebut 'Masalah 2 + Solusi,' itu tidak mengatasi berikutnya 'Masalah 3 + Solusi' - yaitu, masalah duplikat asing.

Masih dipertanyakan apakah ScrapBookbahkan cukup mengatasi masalah sebelumnya. Seperti yang diakui mpy :

Meskipun Scrapbook gagal sejauh ini untuk mengambil situs sepenuhnya ...

Solusi yang tidak dapat diandalkan dan terlalu sederhana adalah non-solusi. Lanjut!

Solusi Sebelumnya 3: wget + Privoksi

mpy kemudian memberikan solusi yang kuat untuk meningkatkan keduanya wgetdan Privoxy. Sementara wget ini cukup sederhana untuk mengkonfigurasi, Privoxyadalah sesuatu tetapi wajar. Atau sederhana.

Karena rintangan teknis yang tidak dapat ditanggung untuk menginstal, mengkonfigurasi, dan menggunakan dengan benar Privoxy, kami belum mengkonfirmasi solusi mpy . Itu harus bekerja secara terukur, kuat. Mengingat adanya hambatan untuk masuk, solusi ini mungkin lebih sesuai untuk otomatisasi skala besar daripada rata-rata webmaster yang berusaha memulihkan situs skala kecil hingga menengah.

Apakah wget+ Privoxypatut dilihat? Benar. Tetapi sebagian besar pengguna super mungkin dilayani lebih baik dengan solusi yang lebih sederhana dan lebih mudah diterapkan.

Solusi Baru: httrack

Enter httrack, sebuah utilitas command-line yang mengimplementasikan superset dari wgetfungsionalitas mirroring. httrackmendukung pengecualian URL berbasis pola dan restrukturisasi situs sederhana. Yang pertama memecahkan "Masalah 2 + Solusi" mpy ; yang terakhir, "Masalah 3 + Solusi."

Dalam contoh abstrak di bawah ini, ganti:

  • ${wayback_url}oleh URL direktori tingkat atas yang mengarsipkan keseluruhan situs target Anda (mis., 'https://web.archive.org/web/20140517175612/http://kearescue.com').
  • ${domain_name}dengan nama domain yang sama hadir dalam ${wayback_url}mengecualikan awalan http://(misalnya, 'kearescue.com').

Kita mulai. Instal httrack, buka jendela terminal, cdke direktori lokal tempat Anda ingin situs Anda diunduh, dan jalankan perintah berikut:

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

Setelah selesai, direktori saat ini harus berisi satu subdirektori untuk setiap jenis file yang dicerminkan dari URL itu. Ini biasanya termasuk setidaknya:

  • css, mengandung semua stylesheet CSS cermin.
  • html, mengandung semua halaman HTML yang dipantulkan.
  • js, mengandung semua JavaScript yang dicerminkan.
  • ico, mengandung satu cermin favicon.

Karena secara httrackinternal menulis ulang semua konten yang diunduh untuk mencerminkan struktur ini, situs Anda sekarang dapat dijelajahi sebagaimana adanya tanpa modifikasi. Jika Anda menghentikan perintah di atas secara prematur dan ingin melanjutkan pengunduhan, tambahkan --continueopsi ke perintah yang sama persis dan coba lagi.

Itu dia. Tidak diperlukan liuk eksternal, penulisan ulang URL yang rawan kesalahan, atau server proxy berbasis aturan.

Selamat menikmati, sesama pengguna super.

Cecil Curry
sumber
Saya senang mendengar bahwa setidaknya satu orang membaca jawaban saya dengan seksama. Dan terima kasih atas analisis lebih lanjut dan solusi httrack. +1
mpy
1
Solusi httrack sempurna, terima kasih banyak!
ChrisChinchilla
Senang menjadi bantuan kecil, kawan. Mengingat betapa dahsyatnya permadani dan tipu muslihat ini untuk diurai, saya hanya harus membagikan temuan saya.
Cecil Curry
Untuk menghapus batas transfer rate, tambahkan parameter ini: --disable-security-limit --max-rate = 0
Oswaldo
7

Sayangnya tidak ada jawaban yang mampu memecahkan masalah membuat mirror lengkap dari situs web yang diarsipkan (tanpa menduplikasi setiap file puluhan kali). Jadi saya meretas pendekatan lain. Diretas adalah kata yang penting karena solusi saya bukan solusi umum atau sangat sederhana (baca: salin & tempel). Saya menggunakan Privoxy Proxy Server untuk menulis ulang file on-the-fly sambil mirroring dengan wget.

Tetapi pertama-tama, apa yang begitu sulit untuk dicerminkan dari Wayback Machine ?

Masalah 1 + Solusi

Toolback Wayback berguna untuk penggunaan interaktif, tetapi mungkin mengganggu wget. Jadi singkirkan dengan aturan filter privoxy

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

Masalah 2 + Solusi

Saya ingin menangkap seluruh situs, sehingga diperlukan kedalaman rekursi yang tidak terlalu kecil. Tapi saya tidak ingin merayapi seluruh server. Biasanya Anda menggunakan no-induk pilihan -npdari wget untuk tujuan itu. Tetapi itu tidak akan berhasil di sini, karena Anda ingin mendapatkannya

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

tetapi juga

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

(perhatikan cap waktu yang diubah di jalur). Mengabaikan -npakan berakhir dengan merayap hingga (...)http://cst-www.nrl.navy.mil, dan akhirnya mengambil seluruh navi.milsitus. Saya pasti tidak menginginkan itu! Jadi filter ini mencoba meniru -npperilaku dengan mesin 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

Saya akan meninggalkannya sebagai latihan untuk menggali sintaksis. Apa yang dilakukan oleh filter ini adalah sebagai berikut: Ini mengganti semua URL Wayback http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/dengan http://some.local.server/404selama tidak mengandung http://cst-www.nrl.navy.mil/lattice/.

Anda harus menyesuaikan http://some.local.server/404. Ini untuk mengirim kesalahan 404 ke wget. Mungkin privoxy bisa melakukan itu dengan lebih elegan. Namun, cara termudah bagi saya adalah hanya menulis ulang tautan ke halaman yang tidak ada di server http lokal, jadi saya terjebak dengan ini.

Dan, Anda juga perlu menyesuaikan kedua kejadian dari http://cst-www.nrl.navy.mil/lattice/untuk mencerminkan situs yang ingin cermin.

Masalah 3 + Solusi

Dan akhirnya beberapa versi halaman yang diarsipkan mungkin menautkan ke halaman dalam snapshot lain. Dan itu untuk satu lagi. Dan seterusnya ... dan Anda akan mendapatkan banyak snapshot dari halaman yang sama - dan wget tidak akan pernah berhasil menyelesaikannya sampai ia mengambil semua snapshot. Aku benar-benar tidak menginginkan itu! Ini sangat membantu, bahwa mesin Wayback sangat cerdas. Anda dapat meminta file

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

bahkan jika itu tidak termasuk dalam 20110801041529snapshot. Secara otomatis mengarahkan Anda ke yang benar:

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

Jadi, filter privoxy lain untuk menulis ulang semua snapshot ke yang terbaru

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

Secara efektif setiap 14 digit angka yang disertakan /.../akan diganti dengan 20120713212803(sesuaikan dengan snapshot terbaru dari situs yang Anda inginkan). Ini mungkin menjadi masalah jika ada angka seperti itu dalam struktur situs yang tidak berasal dari mesin Wayback. Tidak sempurna, tetapi baik untuk situs Strukturtypen .

Yang menyenangkan tentang itu adalah, bahwa wget mengabaikan lokasi baru itu diarahkan ke dan menyimpan file - dalam contoh di atas - sebagai web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html.

Menggunakan wget untuk mencerminkan situs yang diarsipkan

Jadi, akhirnya dengan filter privoksi ini (didefinisikan dalam user.filter) diaktifkan user.actionmelalui

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

Anda bisa menggunakan wget seperti biasa. Jangan lupa beri tahu wget untuk menggunakan 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

Saya menggunakan opsi ini, tetapi -mharus bekerja juga. Anda akan berakhir dengan folder

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

sebagai mesin Wayback memisahkan gambar ( im_), style sheet ( cs_) dll. Saya menggabungkan semuanya bersama dan menggunakan beberapa sihir sed untuk mengganti tautan relatif jelek ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice) yang sesuai. Tapi ini tidak terlalu penting.

mpy
sumber
1
Ini adalah jawaban yang sangat berharga. Diseksi tepat Anda dari struktur situs internal The Wayback Machine adalah kunci untuk solusi berbasis- httrack yang akhirnya saya temukan. Kamu batu, mpy.
Cecil Curry
5

wget

--page-requisites
Opsi ini menyebabkan Wget mengunduh semua file yang diperlukan untuk menampilkan halaman HTML yang diberikan dengan benar. Ini termasuk hal-hal seperti gambar inline, suara, dan lembar gaya yang direferensikan.

Biasanya, saat mengunduh satu halaman HTML, dokumen yang diperlukan untuk menampilkannya dengan benar tidak diunduh. Menggunakan -r bersama-sama dengan l dapat membantu, tetapi karena Wget biasanya tidak membedakan antara dokumen eksternal dan inline, seseorang umumnya dibiarkan dengan "dokumen daun" yang kehilangan persyaratan mereka.

Misalnya, katakanlah dokumen 1.html berisi tag "" yang merujuk 1.gif dan tag "" yang menunjuk ke dokumen eksternal 2.html. Katakan bahwa 2.html serupa tetapi gambarnya 2.gif dan terhubung ke 3.html. Katakan ini berlanjut hingga beberapa angka tinggi yang sewenang-wenang.

-m
--mirror

Aktifkan opsi yang cocok untuk mirroring. Opsi ini mengaktifkan rekursi dan cap waktu, menetapkan kedalaman rekursi tak terbatas dan membuat daftar direktori FTP. Saat ini setara dengan -r -N -l inf --tidak-hapus-daftar.

Perhatikan bahwa Wget akan berperilaku seolah-olah telah ditentukan, tetapi hanya satu halaman dan syaratnya akan diunduh. Tautan dari halaman itu ke dokumen eksternal tidak akan diikuti. Sebenarnya, untuk mengunduh satu halaman dan semua persyaratannya (bahkan jika ada di situs web terpisah), dan memastikan lot ditampilkan dengan benar secara lokal, penulis ini suka menggunakan beberapa opsi selain -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 akan menjadi pakaian terbaik Anda untuk Anda. Tapi saya merekomendasikan alat lain, firefoxekstensiscrapbook

buku kliping

ScrapBook adalah ekstensi Firefox, yang membantu Anda menyimpan halaman Web dan mengelola koleksi dengan mudah. Fitur utamanya adalah kemudahan, kecepatan, ketepatan, dan dukungan multi-bahasa. Fitur utama adalah:
* Simpan halaman Web
* Simpan cuplikan halaman Web
* Simpan situs Web
* Atur koleksi dengan cara yang sama seperti Penanda
* Pencarian teks lengkap dan pencarian pemfilteran cepat koleksi
* Pengeditan halaman web yang dikumpulkan
* Teks / HTML sunting fitur menyerupai Opera's Notes

Cara mirror situs
Instal scrapbook dan mulai ulang firefox

  1. Muat halaman di browser [halaman web yang akan dicerminkan]
  2. Klik kanan pada halaman -> Simpan halaman sebagai ...
  3. pilih level dari In depth Save dan tekan save masukkan deskripsi gambar di sini
  4. pilih Restrict to Drirectory/ Domaindari Filter
    masukkan deskripsi gambar di sini

Tunggu hingga mirroring selesai. Setelah mirroring Anda dapat mengakses situs web secara offline dari ScrapBookmenu.

Prinz
sumber
Meskipun Scrapbook gagal sejauh ini untuk mengambil situs sepenuhnya, itu lebih dekat ke solusi yang mungkin daripada saran lainnya. Terutama opsi Filter by String ... lebih membantu daripada memfilter berdasarkan host / domain. Karenanya, saya menghadiahkan hadiah itu untuk Anda:)
mpy
0

Berhati-hatilah dengan perintah di bawah ini karena itu banyak sekali Angka 1 setelah tanda 'l' memberitahukannya untuk mengambil semua halaman untuk tautan di situs yang sedalam 1 tingkat. Jika Anda ingin laba-laba mengubah ini lebih dalam menjadi 2 tetapi mungkin tidak pernah berakhir karena bisa terjebak dalam satu lingkaran.

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

Saya tidak yakin bagian mana dari situs yang ingin Anda pertahankan dan bagian mana yang tidak Anda pedulikan tetapi Anda mungkin harus membuat daftar putih dan / atau memasukkan daftar hitam bagian-bagian berbeda dari situs untuk mendapatkan hanya apa yang Anda inginkan dan untuk mencegah diri Anda dari mengunduh semua archive.org atau internet.

Gunakan -D www.examle.com,www.another.example.comuntuk daftar putih hanya domain yang Anda inginkan atau gunakan --exclude-domains www.examle.com,www.another.example.com untuk daftar hitam apa yang tidak Anda inginkan.

Michael Yasumoto
sumber
Terima kasih, tetapi masalah dengan daftar putih / hitam adalah bahwa semua situs web yang diarsipkan berasal dari web.archive.orgtuan rumah. Saya ingin mencerminkan segala sesuatu yang wget -npakan dicerminkan setelah situs asli masih online. -ltidak membantu banyak, karena harus ditingkatkan menjadi 3 atau 4, sehingga mengakibatkan naiknya hirarki situs web terlalu banyak.
mpy
0

Format URL untuk Internet Archive termasuk tanggal dan waktu situs diarsipkan. Untuk menghemat aset ruang yang belum berubah ditautkan kembali ke versi situs sebelumnya.

Misalnya dalam url ini http://web.archive.org/web/20000229123340/http://www.yahoo.com/ tanggal situs dirayapi adalah 29 Februari 2000 pada 12:33 dan 40 detik.

Jadi untuk mendapatkan Anda semua http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/perlu mulai dari itu tetapi juga ambil semua aset yang ditautkan dari http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.

Brian
sumber
Tepat, dan itulah masalahnya. Katakanlah halaman A menautkan ke B. Jadi, versi saat ini A menautkan ke versi lama B. Tapi B juga menyertakan tautan ke A. Jadi, versi lama A akan diambil juga, dan menautkan lagi ke versi yang lebih lama. Ini (pada kedalaman crawl (diperlukan) dari 4) mengarah ke hasil, bahwa Anda berakhir dengan puluhan versi halaman indeks, tetapi tidak semua file yang dibutuhkan.
mpy
0

Sudah ada alat yang melakukan itu dengan lebih baik:

wayback_machine_downloader domain.org 

Untuk mendapatkannya, Anda harus menginstal ruby. Lalu:

gem install wayback_machine_downloader
Eduard Florinescu
sumber