Simpan satu halaman web (dengan gambar latar belakang) dengan Wget

73

Saya ingin menggunakan Wget untuk menyimpan halaman web tunggal (tidak secara rekursif, tidak seluruh situs) untuk referensi. Sama seperti Firefox "Web Page, complete".

Masalah pertama saya adalah: Saya tidak bisa membuat Wget untuk menyimpan gambar latar belakang yang ditentukan dalam CSS. Bahkan jika itu memang menyimpan file gambar latar belakang saya tidak berpikir --convert-links akan mengkonversi URL gambar latar belakang dalam file CSS untuk menunjuk ke gambar latar belakang yang disimpan secara lokal. Firefox memiliki masalah yang sama.

Masalah kedua saya adalah: Jika ada gambar pada halaman yang ingin saya simpan yang di-host di server lain (seperti iklan) ini tidak akan dimasukkan. --span-hosts tampaknya tidak menyelesaikan masalah dengan baris di bawah ini.

Saya menggunakan: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html

pengguna14124
sumber
1
baris yang persis sama (wget --tidak ada orangtua --timestamping --convert-links --halaman-syarat --tidak ada direktori --tidak ada host-direktori -erobot = off domain.tld) ​​sebenarnya menyimpan gambar latar belakang yang dirujuk dari CSS setelah memperbarui ke 1.12. Manual mengatakan: "Dengan url http, Wget mengambil dan mem-parsing html atau css dari url yang diberikan, mengambil file yang dirujuk oleh dokumen, melalui markup seperti href atau src, atau nilai css uri yang ditentukan menggunakan fungsionalitas 'url ()' notasi. " Masalah kedua masih perlu diselesaikan
user14124

Jawaban:

106

Dari halaman manual Wget :

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://www.example.com/

Juga dalam kasus robots.txtini adalah melarang Anda menambahkan-e robots=off

vvo
sumber
Tampaknya itu hanya menulis ulang js dan css ke url absolut
Greg Dean
1
tidak masalah, itu robots.txt melarang saya memperbarui jawaban dengan solusi
Greg Dean
19
Diperluas:wget --adjust-extension --span-hosts --convert-links --backup-converted --page-requisites [url]
sam
4
Atau lebih baik lagi wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows[url]
Petah
@ {etah: Saya mencoba perintah Anda dengan argumen Anda, itu akan mengunduh halaman web lain selain yang ditentukan untuk itu.
Tim
7

The wgetperintah menawarkan opsi --mirror, yang melakukan hal yang sama seperti:

$ wget -r -N -l inf --no-remove-listing

Anda juga dapat melempar -xuntuk membuat hierarki direktori seluruh situs, termasuk nama host.

Anda mungkin tidak dapat menemukan ini jika Anda tidak menggunakan versi terbaru wget.

Ernie Dunbar
sumber
1
Ini kemungkinan akan merayapi seluruh situs web dengan sub-url-nya
4253wyerg4e
2

Kedengarannya seperti wgetdan Firefox tidak mem-parsing CSS untuk tautan untuk memasukkan file-file itu dalam unduhan. Anda dapat mengatasi keterbatasan itu dengan memberikan apa yang Anda bisa, dan membuat skrip ekstraksi tautan dari CSS atau Javascript apa pun dalam file yang diunduh untuk menghasilkan daftar file yang Anda lewatkan. Kemudian proses kedua wgetpada daftar tautan itu dapat mengambil apa pun yang terlewat (gunakan -ibendera untuk menentukan URL daftar file).

Jika Anda suka Perl, ada modul CSS :: Parser di CPAN yang dapat memberi Anda cara mudah untuk mengekstrak tautan dengan cara ini.

Perhatikan bahwa wgethanya mem-parsing markup html tertentu ( href/ src) dan css uris ( url()) untuk menentukan syarat halaman yang harus diterima. Anda dapat mencoba menggunakan add-on Firefox seperti DOM Inspector atau Firebug untuk mencari tahu apakah gambar pihak ketiga yang tidak Anda dapatkan ditambahkan melalui Javascript - jika demikian, Anda harus menggunakan skrip atau plugin Firefox untuk mendapatkannya terlalu.

quack quixote
sumber
Seperti yang saya katakan di komentar untuk posting pertama saya, sepertinya sudah diperbaiki di v1.12. Saya masih tidak tahu bagaimana cara memasukkan gambar yang ada di server lain.
user14124
ya, parsing CSS baru di wget v1.12, itu di bagian atas changelog: freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04
quack quixote
Coba tambahkan opsi -H ke daftar. Itu adalah singkatan --span-hosts dan memungkinkan pengunduhan konten dari host eksternal.
Michael
2

Saya membuat Webtografi untuk tujuan serupa: https://webjay.github.io/webtography/

Ini menggunakan Wget dan mendorong situs ke repositori di akun GitHub Anda.

Saya menggunakan argumen ini:

--user-agent=Webtography
--no-cookies
--timestamping
--recursive
--level=1
--convert-links
--no-parent
--page-requisites
--adjust-extension
--max-redirect=0
--exclude-directories=blog

https://github.com/webjay/webtography/blob/master/lib/wget.js#L15-L26

webjay
sumber