Bagaimana Anda menggunakan WGET untuk mencerminkan kedalaman 1 level situs, memulihkan JS, sumber daya CSS termasuk gambar CSS?

11

Berpura-pura saya ingin salinan halaman sederhana diunduh ke HD saya untuk penyimpanan permanen. Saya tidak mencari cara rekursif yang mendalam, hanya satu halaman, tetapi juga sumber daya apa pun yang dimuat oleh halaman itu untuk diunduh juga.

Contoh: https://www.tumblr.com/

Mengharapkan:

  • Index.html
  • Gambar apa pun yang dimuat
  • File JS apa pun yang dimuat
  • File CSS apa pun yang dimuat
  • Gambar apa saja yang dimuat dalam file CSS
  • tautan untuk sumber daya halaman yang dilokalkan untuk bekerja dengan salinan yang diunduh (tidak ada ketergantungan web)

Saya tertarik untuk mengetahui apakah Anda dapat membantu saya menemukan sintaks wget terbaik atau alat lain yang akan melakukan ini. Alat yang saya coba biasanya gagal mendapatkan gambar dimuat oleh CSS, sehingga halaman tidak pernah terlihat benar ketika dimuat secara lokal. Terima kasih!

Solusi Tangen

Saya menemukan cara untuk melakukan ini menggunakan FireFox. Simpan default rusak dan ada addon yang disebut "Simpan Lengkap" yang tampaknya dapat melakukan pekerjaan dengan baik dengan ini. Namun, Anda tidak dapat mengunduhnya karena dikatakan tidak didukung dalam versi FireFox saat ini. Alasannya adalah itu dimasukkan ke dalam addon ini: "Mozilla Archive Format". Instal itu, maka ketika Anda menggunakan File> "Save Page As .." ada opsi baru yang disebut "Web Page, complete" yang pada dasarnya adalah addon lama, yang memperbaiki implementasi stok yang digunakan FireFox (yang mengerikan). Ini bukan solusi WGET tetapi memberikan solusi yang bisa diterapkan.

EDIT: Masalah konyol lain bagi siapa saja yang mungkin mengikuti pertanyaan ini di masa depan, mencoba melakukan ini. Agar addon berfungsi dengan benar, Anda perlu Tools> Mozilla Archive Format dan ubah pengaturan default (buruk) dari "ambil snapshot setia halaman" menjadi "simpan skrip dan sumber menggunakan Simpan Lengkap", jika tidak addon akan mengosongkan semua file skrip Anda dan ganti dengan teks "/ * Script dihapus oleh snapshot save * /".

Lana Miller
sumber
file> save as di firefox atau browser lain akan mengunduh semua gambar, file js dan css
user31113
Apakah Anda benar-benar menginginkan file, atau Anda hanya ingin versi halaman yang diberikan dengan benar?
Saya ingin file, mereka akan diminta untuk membuat halaman dengan benar. Jika Anda tidak memilikinya akan terlihat berbeda. File> Save As tidak berfungsi di Firefox. Jika Anda melakukan ini, Anda tidak mendapatkan gambar css. Cobalah di tumblr.com/login . Gambar latar belakang hilang, gambar bg untuk bidang input hilang.
Tidak ada solusi wget yang bekerja untuk saya. Solusi Tangent Saya adalah metode terbaik untuk mencapai penghematan situs semacam ini. Namun, saya telah melihatnya gagal pada halaman yang sangat rumit seperti apple.com , mungkin karena banyak jalur sumber daya dihasilkan secara dinamis dengan mengeksekusi javascript, beberapa tidak langsung tetapi selama beberapa jenis eksekusi ajax.
Lana Miller

Jawaban:

12

wget -p -k http://ExampleSite.com

-P akan memberi Anda semua elemen yang diperlukan untuk melihat situs dengan benar (css, gambar, dll). -K akan mengubah semua tautan (termasuk tautan untuk CSS & gambar) untuk memungkinkan Anda melihat halaman secara offline saat muncul secara online.

Pembaruan: Ini khusus untuk situs contoh Anda: tumblr.com

wget -H -N -k -p --exclude-domains quantserve.com --no-check-certificate -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2" https://www.tumblr.com

Kerusakan:

-H = Memungkinkan wget untuk pergi ke span host asing. Diperlukan karena tumblr tidak memiliki gambar di halaman depan pada alamat yang sama, mereka menggunakan secure.assets.tumblr.com lihat catatan tentang tidak termasuk domain

-N = hanya akan mengambil file yang lebih baru dari yang Anda miliki saat ini, jika Anda mengunduh halaman yang sama lagi dari waktu ke waktu

-k = konversi tautan Anda untuk melihatnya offline dengan benar

-p = meraih semua elemen yang diperlukan untuk melihatnya dengan benar (css, gambar, dll)

--exclude-domains = karena beranda tumblr.com memiliki tautan untuk quantserve.com dan saya rasa Anda tidak menginginkan hal ini, Anda harus mengecualikannya dari unduhan wget Anda. Catatan : Ini adalah salah satu yang cukup penting yang harus Anda gunakan dengan -H karena jika Anda pergi ke sebuah situs dan mereka memiliki beberapa tautan untuk host luar (pikirkan pengiklan & analitik) maka Anda akan mengambil barang itu juga!

--tidak perlu periksa sertifikat karena tumblr menggunakan https

-U mengubah agen-pengguna. Tidak benar-benar diperlukan dalam hal ini karena memungkinkan agen pengguna wget default tapi saya tahu beberapa situs akan memblokirnya. Saya hanya melemparkannya di sini sehingga jika Anda mengalami masalah di situs lain. Dalam cuplikan contoh yang saya berikan, muncul sebagai Mozilla Firefox 6.02a

akhirnya Anda memiliki situs: https://www.tumblr.com


sumber
1
Saya mencoba ini, tidak mendapatkan file JS atau CSS atau gambar. Apakah kamu?
Jika Anda menggunakannya pada tumblr (contoh Anda di atas), Anda mungkin harus menentukan --tidak-periksa-sertifikat.
Saya pikir Anda benar, mungkin memang perlu opsi itu. Namun tetap tidak ada kecuali index.html. Ada yang hilang ...
@LanaMiller Saya memperbarui jawaban saya. Beri tahu saya jika ada masalah.
Tidak bisakah Anda melakukan sesuatu seperti -exclude-domain! = Tumblr.com?
alpha1
3

Untuk situs spesifik yang Anda sebutkan dan banyak lainnya yang dikodekan seperti itu wget (dan curl) tidak akan berfungsi. Masalahnya adalah bahwa beberapa tautan aset yang diperlukan untuk membuat halaman di browser dibuat sendiri melalui javascript. Wget memiliki permintaan fitur yang tertunda untuk menjalankan javascript:

http://wget.addictivecode.org/FeatureSpecifications/JavaScript

Namun hingga itu selesai, situs yang membangun tautan aset menggunakan javascript tidak akan dapat dikloning menggunakan wget. Solusi termudah adalah menemukan alat yang benar-benar membangun DOM dan mem-parsing javascript seperti mesin browser (yaitu metode firefox yang Anda sebutkan).

jumlahnya banyak
sumber
1

Anda juga dapat melakukan ini secara otomatis (atau secara terprogram jika Anda melakukan pengkodean) dengan mengeluarkan perintah via shell menggunakan wget:

wget --convert-links -r http://www.yourdomain.com

Ini akan mengunduh halaman dan file internal dan membuat tautan lokal.

Jhourlad Estrella
sumber
1
Ini akan mendapatkan segalanya . Baca pertanyaannya.
evgeny
-1
wget -r http://www.example.com

Saya pikir itu akan mengambil segalanya, tetapi mencobanya dan mencari tahu.


sumber
1
Itu mendapatkan segalanya yang terlalu banyak. Sejauh ini solusi FireFox yang saya temukan adalah solusi kerja terbaik. Ia mendapatkan apa yang Anda butuhkan dan tidak lebih.
-1

$ ( man wget ):

p

--halaman-syarat

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 "<IMG>" yang merujuk pada 1.gif dan tag "<A>" 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.

Jika seseorang menjalankan perintah:

wget -r -l 2 http: // <site> /1.html

kemudian 1.html, 1.gif, 2.html, 2.gif, dan 3.html akan diunduh. Seperti yang Anda lihat, 3.html tanpa syarat 3.gif karena Wget hanya menghitung jumlah hop (hingga 2) dari 1.html untuk menentukan di mana harus menghentikan rekursi. Namun, dengan perintah ini:

wget -r -l 2 -p http: // <site> /1.html

semua file di atas dan 3.html yang diperlukan 3.gif akan diunduh. Demikian pula,

wget -r -l 1 -p http: // <site> /1.html

akan menyebabkan 1.html, 1.gif, 2.html, dan 2.gif diunduh. Orang mungkin berpikir bahwa:

wget -r -l 0 -p http: // <site> /1.html

akan mengunduh hanya 1.html dan 1.gif, tapi sayangnya ini tidak terjadi, karena -l 0 setara dengan -l inf --- yaitu rekursi tak terbatas. Untuk mengunduh satu halaman HTML (atau beberapa di antaranya, semua ditentukan pada baris perintah atau dalam file input -i-i) dan persyaratannya (atau mereka), cukup tinggalkan -r dan -l:

wget -p http: // <site> /1.html

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 & gt ;

Untuk menyelesaikan topik ini, perlu diketahui bahwa gagasan Wget tentang tautan dokumen eksternal adalah URL apa pun yang ditentukan dalam tag "<A>", tag "<AREA>", atau tag "<LINK>" selain dari "< LINK REL = "stylesheet"> ".

James Sumners
sumber
2
Bagian mana yang menurut Anda menyerupai solusinya? Karena saya mencoba membaca isi halaman manual dan saya tidak melihat solusi yang tepat di sini. Apakah Anda mencoba semua ini sendiri? Menurut Anda perintahnya adalah yang membahas pertanyaan secara khusus.