Pengarsipan Situs Web

Baru-baru ini saya menyelami topik pengarsipan situs web. Saya ditanya oleh teman-teman yang takut kehilangan kendali atas pekerjaan mereka di Internet karena administrasi sistem yang buruk atau penghapusan yang tidak bersahabat. Ancaman semacam itu membuat pengarsipan situs web menjadi alat penting bagi administrator sistem apa pun. Ternyata, beberapa situs jauh lebih sulit untuk diarsipkan daripada yang lain. Artikel ini menunjukkan proses pengarsipan situs web tradisional dan menunjukkan bagaimana prosesnya tidak bekerja pada aplikasi satu halaman yang trendi yang mengipasi web modern.

Konversi Situs Sederhana


Hari-hari sudah lama berlalu ketika situs web ditulis secara manual dalam HTML. Sekarang mereka dinamis dan dibangun dengan cepat menggunakan kerangka JavaScript, PHP atau Python terbaru. Akibatnya, situs menjadi lebih rapuh: database lumpuh, pembaruan salah, atau kerentanan dapat menyebabkan hilangnya data. Dalam kehidupan saya sebelumnya sebagai pengembang web, saya harus menerima gagasan: pelanggan mengharapkan situs web berfungsi selamanya. Harapan ini tidak sesuai dengan prinsip pengembangan web "bergerak cepat dan memecahkan banyak hal." Bekerja dengan sistem manajemen konten Drupal terbukti sangat sulit dalam hal ini, karena pembaruan besar sengaja melanggar kompatibilitas dengan modul pihak ketiga, yang menyiratkan proses pembaruan mahal yang jarang mampu dibeli pelanggan. Solusinya adalah mengarsipkan situs-situs ini: ambil situs web dinamis dan dinamis - dan ubah menjadi file HTML sederhana yang dapat dikirimkan oleh server web mana pun selamanya. Proses ini berguna untuk situs dinamis Anda sendiri, serta untuk situs pihak ketiga yang di luar kendali Anda dan yang ingin Anda lindungi.

Situs sederhana atau statis ditangani oleh Wget yang terhormat. Meskipun Anda membutuhkan mantra nyata untuk mencerminkan seluruh situs:

$ nice wget --mirror --execute robots=off --no-verbose --convert-links \ --backup-converted --page-requisites --adjust-extension \ --base=./ --directory-prefix=./ --span-hosts \ --domains=www.example.com,example.com http://www.example.com/ 

Perintah ini memuat konten halaman web dan juga merayapi semua tautan di domain yang ditentukan. Sebelum memulai tindakan ini di situs favorit Anda, pertimbangkan kemungkinan konsekuensi dari perayapan. Perintah di atas dengan sengaja mengabaikan aturan robots.txt , seperti yang sekarang menjadi kebiasaan bagi arsiparis , dan mengunduh situs dengan kecepatan maksimum. Sebagian besar perayap memiliki opsi untuk menjeda antara panggilan dan batas bandwidth agar tidak membuat beban berlebihan di situs target.

Perintah ini juga menerima "detail halaman", yaitu, style sheet (CSS), gambar, dan skrip. Konten halaman dimuat sehingga tautan menunjuk ke salinan lokal. Kumpulan file yang dihasilkan dapat di-host di server web apa pun, yang mewakili salinan statis situs web asli.

Tapi ini saat semuanya berjalan baik. Siapa pun yang pernah bekerja dengan komputer tahu bahwa hal-hal jarang berjalan sesuai rencana: ada banyak cara menarik untuk mengganggu prosedur. Sebagai contoh, beberapa waktu yang lalu modis untuk menempatkan blok dengan kalender di situs. CMS akan membuat mereka dengan cepat dan mengirim crawler ke siklus tanpa akhir, mencoba untuk mendapatkan lebih banyak halaman baru. Pengarsip yang rumit dapat menggunakan ekspresi reguler (misalnya, Wget memiliki opsi --reject-regex ) untuk mengabaikan sumber daya yang bermasalah. Pilihan lain: jika antarmuka administrasi situs web tersedia, nonaktifkan kalender, formulir masuk, formulir komentar, dan area dinamis lainnya. Segera setelah situs menjadi statis, mereka akan berhenti bekerja, jadi masuk akal untuk menghapus kekacauan ini dari situs asli.

JavaScript mimpi buruk


Sayangnya, beberapa situs web lebih dari sekadar HTML. Misalnya, di situs satu halaman, browser web itu sendiri membuat konten dengan menjalankan program JavaScript kecil. Agen pengguna sederhana seperti Wget tidak akan berhasil mengembalikan salinan statis yang bermakna dari situs-situs ini, karena tidak mendukung JavaScript sama sekali. Secara teoritis, situs harus mendukung peningkatan progresif sehingga konten dan fungsionalitas dapat diakses tanpa JavaScript, tetapi arahan ini jarang diikuti, karena siapa pun yang menggunakan plugin seperti NoScript atau uMatrix akan mengonfirmasi .

Metode pengarsipan tradisional terkadang gagal dengan cara paling bodoh. Ketika saya mencoba membuat cadangan surat kabar lokal, saya menemukan bahwa WordPress menambahkan string kueri (misalnya ?ver=1.12.4 ) di akhir sertakan. Ini membingungkan untuk mendeteksi tipe konten pada server web yang melayani arsip karena mereka bergantung pada ekstensi file untuk menghasilkan header Content-Type benar. Ketika arsip seperti itu diunduh ke browser, itu tidak dapat memuat skrip, yang merusak situs web dinamis.

Ketika browser secara bertahap menjadi mesin virtual untuk menjalankan kode arbitrer, metode pengarsipan berdasarkan analisis HTML murni harus diadaptasi. Solusi untuk masalah ini adalah untuk merekam (dan memainkan) header HTTP yang dikirimkan oleh server selama perayapan, dan pengarsip yang benar-benar profesional menggunakan pendekatan ini.

Membuat dan menampilkan file WARC


Dalam arsip Internet, Brewster Calais dan Mike Burner mengembangkan format ARC (ARChive) pada tahun 1996: cara untuk menggabungkan jutaan file kecil yang dibuat selama pengarsipan. Pada akhirnya, format tersebut distandarisasi sebagai spesifikasi WARC (Web ARChive), dirilis sebagai standar ISO pada 2009 dan direvisi pada 2017. Upaya standardisasi yang dipimpin oleh International Conservation Consortium (IIPC). Menurut Wikipedia, itu adalah "organisasi internasional perpustakaan dan organisasi lain yang diciptakan untuk mengoordinasikan upaya untuk melestarikan konten Internet untuk masa depan," dan termasuk anggota seperti Library of Congress dan Internet Archive. Yang terakhir menggunakan format WARC dalam perayap Heritrix Java-nya.

File WARC menggabungkan beberapa sumber daya dalam satu arsip terkompresi, seperti header HTTP, konten file, dan metadata lainnya. Dengan mudah, format ini juga didukung oleh perayap Wget dengan --warc . Sayangnya, browser tidak dapat secara langsung menampilkan file WARC, sehingga diperlukan penampil khusus untuk mengakses arsip. Atau Anda harus mengubahnya. Penampil paling sederhana yang saya temukan adalah pywb , paket Python. Ini meluncurkan server web sederhana dengan antarmuka seperti Wayback Machine untuk melihat konten file WARC. Serangkaian perintah berikut akan memetakan file WARC ke http://localhost:8080/ :

  $ pip install pywb $ wb-manager init example $ wb-manager add example crawl.warc.gz $ wayback 

Omong-omong, para pengembang layanan Webrecorder menciptakan alat ini, yang menyimpan konten dinamis halaman menggunakan browser.

Sayangnya, pywb tidak dapat memuat file WARC yang dihasilkan oleh Wget karena mematuhi persyaratan spesifikasi WARC 1.0 yang salah , yang diperbaiki di versi 1.1 . Sampai Wget atau pywb memperbaiki masalah ini, file WARC yang dibuat oleh Wget tidak cukup andal, jadi saya pribadi mulai mencari alternatif lain. Perhatian saya tertuju pada crawler di bawah penjelajahan nama yang sederhana. Begini caranya:

  $ crawl https://example.com/ 

Program ini mendukung beberapa parameter baris perintah, tetapi sebagian besar nilai default cukup fungsional: ia mengunduh sumber daya seperti CSS dan gambar dari domain lain (jika -exclude-related tidak ditentukan), tetapi rekursi tidak akan melampaui host yang ditentukan. Secara default, sepuluh koneksi bersamaan dimulai: parameter ini diubah dengan flag -c . Tapi yang paling penting, file WARC yang dihasilkan memuat baik-baik saja di pywb.

Pekerjaan di masa depan dan alternatifnya


Ada banyak sumber daya untuk menggunakan file WARC. Secara khusus, ada pengganti Wget yang disebut Wpull , yang dirancang khusus untuk pengarsipan situs web. Ini memiliki dukungan PhantomJS eksperimental dan integrasi dengan youtube-dl , yang memungkinkan Anda untuk memuat situs JavaScript yang lebih kompleks dan mengunduh media streaming, masing-masing. Program ini adalah dasar dari alat pengarsipan ArchiveBot , yang sedang dikembangkan oleh "tim arsiparis, programmer, penulis, dan pembicara nakal" gratis dari ArchiveTeam dalam upaya untuk "menyimpan cerita sebelum menghilang selamanya." Tampaknya integrasi PhantomJS tidak sebagus yang kita inginkan, jadi ArchiveTeam menggunakan banyak alat lain untuk mencerminkan situs yang lebih kompleks. Sebagai contoh, snscrape memindai profil media sosial dan menghasilkan daftar halaman untuk dikirim ke ArchiveBot. Alat lain adalah crocoite , yang menjalankan Chrome dalam mode tanpa kepala untuk mengarsipkan situs dengan banyak JavaScript.

Artikel ini tidak akan lengkap tanpa menyebutkan "situs Xerox" dari HTTrack . Seperti Wget, program HTTrack membuat salinan situs lokal, tetapi, sayangnya, itu tidak mendukung penyimpanan ke WARC. Fitur interaktif mungkin lebih menarik bagi pengguna pemula yang tidak terbiasa dengan baris perintah.

Dalam nada yang sama, selama penelitian saya, saya menemukan alternatif untuk Wget disebut Wget2 dengan dukungan untuk pekerjaan multi-threaded, yang mempercepat program. Namun, beberapa fitur Wget tidak ada di sini, termasuk templat, menyimpan dukungan WARC dan FTP, tetapi dukungan RSS, caching DNS, dan dukungan TLS yang ditingkatkan telah ditambahkan.

Akhirnya, impian pribadi saya untuk alat tersebut adalah mengintegrasikannya dengan sistem bookmark yang ada. Saat ini saya menyimpan tautan menarik di Wallabag , layanan penyimpanan lokal untuk laman menarik, dikembangkan sebagai alternatif untuk program Pocket gratis (sekarang dimiliki oleh Mozilla). Tetapi Wallabag dalam desainnya hanya menciptakan versi artikel yang "dapat dibaca" alih-alih salinan lengkap. Dalam beberapa kasus, "versi yang dapat dibaca" sebenarnya tidak dapat dibaca , dan Wallabag terkadang tidak dapat menangani parsing . Alih-alih, alat lain, seperti bookmark-archiver atau reminescence , menyimpan tangkapan layar halaman bersama dengan HTML lengkap, tetapi, sayangnya, tidak mendukung format WARC, yang akan memberikan pemutaran yang lebih akurat.

Kebenaran menyedihkan dari pencerminan dan pengarsipan saya adalah bahwa data sedang sekarat. Untungnya, arsiparis amatir memiliki alat untuk menyimpan konten menarik di Internet. Bagi mereka yang tidak ingin melakukan ini sendiri, ada arsip Internet, serta grup ArchiveTeam, yang bekerja untuk membuat salinan cadangan dari arsip Internet itu sendiri .

Source: https://habr.com/ru/post/id431222/


All Articles