Pernyataan kami: kami adalah Geonode dan kami menjual layanan proxy, yang hampir tidak pernah diperlukan untuk hal ini. Menyalin situs yang telah Anda dapatkan izin untuk disalin adalah tugas dengan sumber tunggal dan volume sedang yang dapat dijalankan dengan lancar melalui koneksi Anda sendiri. Jika Anda mempertimbangkan penggunaan proxy untuk hal ini, itu biasanya berarti Anda sedang membuat mirror dengan kecepatan yang tidak disetujui oleh situs tersebut, dan solusi yang tepat adalah memperlambat kecepatan, bukan mendistribusikannya. Ada satu pengecualian yang sah — membuat mirror konten khusus wilayah — dan hal ini dijelaskan di bawah. Semua hal lain dalam artikel ini dapat dilakukan dari laptop tanpa infrastruktur apa pun.
Apa yang Sebenarnya Dilakukan Alat-Alat Ini
Empat langkah, pada setiap alat dalam kategori ini.
Mengambil halaman. Mengunduh kode HTML. Mencari aset. Menganalisis gambar, lembar gaya, skrip, dan font, serta melacaknya juga. Ikuti tautan-tautan tersebut. Temukan halaman-halaman lain dalam cakupan yang Anda tentukan. Menulis ulang referensi. Mengubah URL absolut menjadi jalur relatif agar salinan tersebut dapat berfungsi dari sistem file Anda.
Langkah keempat itulah yang membedakan ripper dari crawler. Crawler mengumpulkan data; ripper menghasilkan salinan lokal yang dapat dijelajahi, dan penulisan ulang tautan adalah perbedaannya.
Penggunaan yang sah tidaklah luar biasa: mengarsipkan situs sebelum situs tersebut offline, menyimpan dokumentasi secara offline untuk keperluan perjalanan atau jaringan yang dibatasi, migrasi antar platform, menyimpan catatan kepatuhan, dan melestarikan karya Anda sendiri ketika host ditutup.
wget: Pilihan Standar
Sudah tersedia di sebagian besar sistem Unix, dan memadai untuk sebagian besar tugas.
wget --mirror --convert-links --adjust-extension --page-requisites \
--no-parent --wait=1 --random-wait \
https://example.com/docs/
Setiap opsi memiliki fungsinya masing-masing, dan panduan wget menjelaskannya dengan rinci.
**--mirror
** "mengaktifkan opsi yang sesuai untuk mirroring. Opsi ini mengaktifkan rekursi dan penandaan waktu, menetapkan kedalaman rekursi tak terbatas, serta menyimpan daftar direktori FTP. Saat ini, opsi ini setara dengan -r -N -l inf --no-remove-listing
."
**--page-requisites
** "menyebabkan Wget mengunduh semua berkas yang diperlukan untuk menampilkan halaman HTML tertentu dengan benar. Ini mencakup hal-hal seperti gambar yang disematkan, suara, dan lembar gaya yang dirujuk." Tanpa opsi ini, Anda akan mendapatkan HTML tanpa gaya dan tanpa gambar.
**--convert-links
** menulis ulang referensi "setelah pengunduhan selesai... agar sesuai untuk ditampilkan secara lokal", yang memengaruhi "tidak hanya hyperlink yang terlihat, tetapi juga bagian mana pun dari dokumen yang menautkan ke konten eksternal".
**--adjust-extension
** menambahkan ekstensi .html
ke halaman yang disajikan sebagai HTML tanpa ekstensi HTML — panduan ini memberikan contoh "membuat salinan cermin dari situs jarak jauh yang menggunakan halaman .asp, tetapi Anda ingin halaman salinan cermin tersebut dapat dilihat di server Apache standar Anda".
**--no-parent
** memastikan "bahwa hanya berkas di bawah hierarki tertentu yang akan diunduh", yang membatasi tugas ini pada /docs/
alih-alih seluruh situs.
**--wait=1
** adalah bendera sopan santun, dan panduan tersebut merekomendasikannya secara eksplisit: "Penggunaan opsi ini direkomendasikan, karena mengurangi beban server dengan membuat permintaan menjadi lebih jarang." Gunakan bersama dengan --random-wait
, yang menurut panduan "terinspirasi oleh rekomendasi yang kurang bijak untuk memblokir banyak pengguna yang tidak terkait dari sebuah situs web hanya karena tindakan satu orang".
Ada dua opsi lain yang perlu diketahui. -Q
menetapkan kuota unduhan agar mirror yang tidak terbatas tidak mengisi penuh disk Anda. Dan -l
menetapkan kedalaman rekursi jika pengaturan "infinite" terlalu longgar.
Keterbatasan wget memang nyata: wget tidak menjalankan JavaScript, penulisan ulang tautannya bagus tetapi tidak sempurna pada situs yang kompleks, dan wget tidak memiliki antarmuka grafis. Untuk situs dokumentasi atau blog statis, semua itu tidak menjadi masalah.
HTTrack: Klasik Berantarmuka Grafis
HTTrack adalah alat khusus paling terkenal di kategorinya, bersifat open source, lintas platform, serta dilengkapi antarmuka grafis dan baris perintah. Proyek ini masih aktif.
Keunggulannya dibandingkan wget: antarmuka yang sesungguhnya bagi pengguna yang tidak terbiasa menggunakan terminal, penanganan struktur tautan yang kompleks lebih baik, proyek yang dapat dilanjutkan, dan mode pembaruan yang hanya menyalin ulang bagian yang berubah.
Di mana ia kalah: keterbatasan mendasar yang sama — tidak dapat menjalankan JavaScript — ditambah sintaks penyaringan yang memerlukan pembelajaran, serta reputasi di kalangan operator situs yang membuat beberapa di antaranya memblokirnya berdasarkan user agent.
Bagi pengguna non-teknis yang membutuhkan salinan situs statis yang dapat dijelajahi, inilah rekomendasi yang tepat. Bagi siapa pun yang terbiasa dengan shell, wget dapat melakukan tugas yang sama dengan lebih sedikit kejutan.
Alat Satu Halaman
Pendekatan yang berbeda, dan seringkali merupakan solusi yang tepat.
Jika Anda menginginkan satu halaman yang lengkap daripada sebuah situs web utuh, alat yang menyatukan semua elemen ke dalam satu berkas HTML mandiri lebih berguna daripada situs cermin. Alat-alat ini menyematkan gambar sebagai data URI, menyematkan CSS secara langsung, dan menghasilkan satu berkas yang dapat Anda kirim melalui email, arsipkan, atau buka di mana saja tanpa ketergantungan apa pun.
Ekstensi peramban dalam kategori ini merupakan versi praktis bagi kebanyakan orang, dan mereka memiliki satu keunggulan menentukan dibandingkan setiap alat baris perintah di sini: mereka menangkap halaman sebagaimana ditampilkan, setelah JavaScript dijalankan. Untuk aplikasi modern, itulah perbedaan antara salinan yang berfungsi dan kerangka kosong.
Komprominya adalah prosesnya manual — satu halaman sekaligus, dengan klik manual. Untuk beberapa halaman saja, hal itu tidak masalah; namun untuk seribu halaman, hal itu tidak praktis.
ArchiveBox dan Alat Pelestarian
ArchiveBox merupakan pilihan yang patut dipertimbangkan jika tujuannya adalah pelestarian, bukan penelusuran daring. Alat ini menerima URL dan menghasilkan beberapa format arsip sekaligus — HTML, tangkapan layar, PDF, teks yang diekstraksi, dan berkas WARC.
WARC adalah format yang perlu diketahui, karena inilah yang digunakan oleh arsip web. Format ini menyimpan transaksi HTTP itu sendiri, bukan sekadar replika sistem berkas, yang berarti header, kode status, dan byte yang tepat tetap terjaga. Untuk segala hal yang mengutamakan keakuratan — seperti urusan hukum, kepatuhan, atau penelitian — ini merupakan catatan yang jauh lebih baik daripada direktori berisi HTML yang ditulis ulang.
ArchiveBox dihosting sendiri, menyimpan indeks, dan menangani JavaScript dengan menjalankan browser tanpa antarmuka pengguna. Aplikasi ini lebih berat daripada wget, namun menghasilkan hasil yang lebih tahan lama.
Mengapa Mereka Semua Kesulitan dengan Situs Modern
Penjelasan tunggal di balik sebagian besar kekecewaan dalam kategori ini.
Rendering JavaScript. wget dan HTTrack mengambil HTML dan mengurai kodenya. Aplikasi satu halaman (SPA) mengembalikan dokumen yang hampir kosong ditambah paket skrip, dan kontennya disusun di dalam browser. Yang Anda cerminkan hanyalah antarmuka luarnya.
Konten berbasis API. Bahkan jika HTML awalnya memiliki konten, navigasi selanjutnya mungkin mengambil JSON dari sebuah API. Permintaan tersebut dilakukan oleh kode, bukan oleh tautan dalam markup, sehingga mirror yang mengikuti tautan tidak akan pernah menemukannya.
Gulir tak terbatas dan pemuatan lambat. Konten yang muncul saat interaksi sama sekali tidak ada dalam markup.
Routing sisi klien. URL yang tidak pernah mencapai server. Sebuah mirror tidak dapat mengambil apa yang tidak pernah diminta.
Otentikasi dan personalisasi. Segala sesuatu yang berada di balik proses login, serta segala sesuatu yang berbeda per pengguna.
Solusi alternatif, berdasarkan tingkat kerumitannya:
Periksa apakah ada ekspor statis. Situs dokumentasi sering kali menyediakan PDF atau paket yang dapat diunduh. Tanyakan terlebih dahulu sebelum membangun.
Periksa apakah ada API. Jika konten berasal dari API, mengambilnya secara langsung lebih mudah dan lebih lengkap daripada membuat cerminan antarmuka pengguna.
Gunakan alat berbasis browser untuk halaman yang benar-benar memerlukan rendering. Playwright dapat menavigasi, menunggu konten, dan menyimpan HTML yang telah dirender, yang merupakan salinan dengan dukungan JavaScript dengan biaya penulisan skrip dan penggunaan bandwidth yang jauh lebih besar.
Terima salinan parsial. Untuk banyak tujuan, bagian statis dari sebuah situs adalah apa yang Anda inginkan.
Menyalin Situs JavaScript Menggunakan Playwright
Solusi praktis saat alat-alat konvensional hanya menghasilkan kerangka kosong. Ini bukan alat penyalin serba guna, tetapi cukup untuk menangkap sekumpulan halaman tertentu sebagaimana ditampilkan.
import { chromium } from 'playwright';
import { writeFile, mkdir } from 'fs/promises';
import { dirname } from 'path';
const urls = [/* the pages you want */];
const browser = await chromium.launch();
const ctx = await browser.newContext();
const page = await ctx.newPage();
for (const url of urls) {
await page.goto(url, { waitUntil: 'domcontentloaded' });
await page.waitForSelector('main', { timeout: 15000 }).catch(() => {});
const html = await page.content(); // rendered DOM, not source
const path = 'mirror' + new URL(url).pathname.replace(/\/$/, '/index') + '.html';
await mkdir(dirname(path), { recursive: true });
await writeFile(path, html);
await page.waitForTimeout(1000 + Math.random() * 1000);
}
await browser.close();
Ada empat hal penting di sana.
**page.content()
mengembalikan DOM yang telah dirender**, bukan kode HTML sumber. Itulah alasan utama mengapa pendekatan ini berhasil di mana wget gagal — Anda mendapatkan markup sebagaimana adanya setelah JavaScript menyusunnya.
Menunggu selektor, bukan menunggu jaringan idle. Halaman dengan beacon analitik atau websocket tidak pernah idle, sehingga ``waitUntil: 'networkidle'`
` akan mengalami timeout di banyak situs modern. Menunggu elemen yang Anda tahu pasti ada jauh lebih cepat dan lebih andal.
Jeda yang disengaja antar halaman. Sama seperti opsi ``--wait`
` di wget, dan sama pentingnya.
Tanpa penulisan ulang tautan. Ini adalah batasan yang nyata: Anda mendapatkan HTML yang sudah dirender dengan referensi absolut, sehingga salinan tersebut memerlukan koneksi internet agar tampil benar. Menambahkan penulisan ulang berarti mengurai setiap dokumen, mengunduh setiap aset, dan menulis ulang referensi — yang berarti mengimplementasikan ulang wget, dan pada titik itu, menggabungkan keduanya lebih mudah: gunakan Playwright untuk merender dan menyimpan, lalu jalankan wget terhadap file yang disimpan untuk mengumpulkan aset.
Dan perhitungkan biaya bandwidth. Browser mengambil setiap gambar, font, skrip, dan video secara pra-muat, sehingga hal ini mengonsumsi lalu lintas sekitar satu orde besar lebih banyak daripada mirror wget dari halaman yang sama. Memblokir permintaan font dan media dengan page.route()
dapat mengurangi konsumsi secara signifikan jika elemen-elemen tersebut bukan bagian dari apa yang ingin Anda simpan.
Memilih Alat
| Kebutuhan | Alat |
|---|---|
| Situs statis, terbiasa menggunakan terminal | wget |
| Situs statis, lebih suka antarmuka grafis (GUI) | HTTrack |
| Satu halaman, lengkap dan mandiri | Ekstensi browser berkas tunggal |
| Pelestarian dengan ketepatan | ArchiveBox / WARC |
| Situs dengan banyak JavaScript | Skrip Playwright |
| Situs Anda sendiri sebelum migrasi | Ekspor dari platform Anda |
Baris terakhir ini layak disebutkan secara terpisah, karena inilah yang paling sering diselesaikan orang dengan cara yang sulit. Jika Anda pemilik situs, gunakan fitur ekspor platform Anda. Dump basis data, pembuatan situs statis, atau cadangan dari penyedia hosting bersifat lengkap, mencakup hal-hal yang tidak dapat dilihat oleh proses pencerminan, dan hanya membutuhkan waktu beberapa menit. Mencerminkan situs Anda sendiri sama saja dengan melakukan versi sulit dari tugas yang sebenarnya mudah.
Aturan yang Berlaku dalam Segala Kondisi
Terlepas dari alat yang digunakan.
** Aturan "robots.txt" berlaku bagi Anda.** wget mematuhinya secara default. HTTrack juga mematuhinya secara default. Keduanya dapat dikonfigurasi agar tidak mematuhinya, dan hal tersebut merupakan pilihan sadar yang memiliki konsekuensi. Ini sekarang telah menjadi standar — RFC 9309 — dan kami telah membahas cara membacanya dalam cara membaca berkas robots.txt.
Pembatasan laju (rate limiting) bukanlah hal opsional. Sebuah mirror tanp--wait akan mengirimkan permintaan secepat yang diizinkan oleh koneksi, yang tidak dapat dibedakan dari serangan dari sisi server. Satu permintaan per detik adalah batas minimum yang wajar.
Hak cipta tidak lenyap. Mengunduh salinan untuk dibaca secara offline secara pribadi adalah satu hal; mempublikasikannya kembali adalah hal lain. Konten tersebut tetap milik pemiliknya.
Ketentuan layanan mungkin melarangnya secara tegas, terlepas dari kelayakan teknisnya.
Bandwidth menghabiskan biaya bagi situs. Situs cermin dari situs besar dapat mentransfer banyak gigabyte, dan seseorang harus membayarnya.
Tanyakan. Untuk hal-hal yang substansial, mengirim email lebih cepat daripada mencari jalan pintas. Pemilik situs sering kali menyetujuinya, dan terkadang menawarkan paket yang menghemat usaha Anda sepenuhnya.
Kapan Proxy Diperlukan, Secara Singkat
Karena ini adalah produk kami, jawaban jujurnya singkat saja.
Anda tidak membutuhkannya untuk membuat mirror situs yang Anda miliki izin untuk di-mirror dengan kecepatan wajar dari satu lokasi. Itulah sebagian besar penggunaan yang sah, dan satu koneksi saja sudah cukup untuk mengatasinya.
Anda mungkin membutuhkannya jika situs tersebut menyajikan konten yang berbeda berdasarkan wilayah dan Anda menginginkan versi regionalnya — misalnya situs dokumentasi dengan halaman yang dilokalkan, atau katalog dengan inventaris khusus per negara. Di sini, faktor geografis menjadi inti masalahnya, dan ini merupakan kasus penggunaan yang sah.
Anda tidak membutuhkannya untuk mempercepat proses, dan menggunakannya dengan alasan tersebut berarti Anda melakukan mirroring dengan kecepatan yang akan ditolak oleh situs tersebut. Tanggapan yang tepat untuk hal itu adalah --wait, bukan distribusi.
Jika kasus regional berlaku, bandwidth pusat data adalah pilihan yang masuk akal — tarif kami mulai dari $0,14/GB, diperiksa pada September 2026 berdasarkan halaman harga kami — dan perlu diingat bahwa pencerminan penuh diukur dalam gigabyte, jadi perhitungannya penting.
Pertanyaan Terkait
Apa itu website ripper?
Sebuah alat yang mengunduh halaman dan aset situs web ke penyimpanan lokal serta mengubah tautan agar salinan tersebut dapat diakses secara offline. Perubahan tautan inilah yang membedakannya dari crawler, yang berfungsi mengumpulkan data, bukan menghasilkan salinan cermin yang dapat dijelajahi.
Bagaimana cara mengunduh seluruh situs web?
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --wait=1 URL dapat digunakan untuk sebagian besar situs statis. Sebagai alternatif berbasis antarmuka grafis, HTTrack juga dapat melakukan hal yang sama. Untuk situs yang banyak menggunakan JavaScript, kedua alat tersebut tidak akan berfungsi dengan baik dan Anda perlu menggunakan pendekatan berbasis browser.
Mengapa situs web yang saya unduh terlihat rusak?
Biasanya karena --page-requisites hilang, sehingga lembar gaya dan gambar tidak diunduh, atau --convert-links, sehingga referensi masih mengarah ke situs aktif. Jika halaman-halaman tersebut kosong alih-alih tidak bergaya, berarti situs tersebut menampilkan konten dengan JavaScript dan alat yang tidak mendukung rendering tidak dapat menangkapnya.
Apakah mengunduh situs web legal?
Mengunduh untuk penggunaan pribadi secara offline umumnya tidak menjadi masalah; namun, mempublikasikan ulang adalah masalah lain, karena hak cipta tetap berlaku. Ketentuan layanan mungkin melarang pengunduhan otomatis secara tegas terlepas dari cara teknis yang digunakan. Hal ini bervariasi menurut yurisdiksi dan bukan merupakan nasihat hukum.
Bisakah saya mengunduh situs web yang menggunakan JavaScript?
Tidak dengan wget atau HTTrack, yang mengambil dan mengurai HTML tanpa menjalankan skrip. Anda memerlukan pendekatan berbasis browser — ekstensi berkas tunggal untuk halaman per halaman, atau skrip Playwright yang menavigasi, menunggu konten, dan menyimpan hasil yang ditampilkan.
Apa pengunduh situs web gratis terbaik?
wget jika Anda terbiasa dengan baris perintah, karena sudah terinstal dan sepenuhnya mampu menangani situs statis. HTTrack jika Anda menginginkan antarmuka grafis. ArchiveBox jika tujuannya adalah pelestarian, bukan sekadar menjelajah, karena menghasilkan berkas WARC bersama dengan HTML.
Bagaimana cara mengunduh situs web tanpa diblokir?
Atur jeda setidaknya satu detik di antara permintaan, patuhi aturan "robots.txt", identifikasi diri Anda dengan jujur, dan batasi cakupan dengan "--no-parent" serta batas kedalaman. Sebagian besar pemblokiran dalam kategori ini disebabkan oleh pencerminan (mirroring) dengan kecepatan penuh, yang dari sudut pandang server terlihat identik dengan serangan.
Apakah saya harus menggunakan proxy untuk mengunduh situs web?
Hanya jika Anda memerlukan versi konten yang spesifik untuk wilayah tertentu. Untuk pencadangan biasa dengan kecepatan yang wajar, satu koneksi sudah cukup. Menggunakan proxy untuk mempercepat proses berarti Anda mentransfer data dengan kecepatan yang ditolak oleh situs tersebut, dan solusinya adalah menggunakan bendera penundaan.
Kesimpulan
Untuk situs statis, masalah ini sudah teratasi dan alatnya sudah ada di komputer Anda. Satu perintah wget dengan lima opsi akan menghasilkan salinan lokal yang dapat dijelajahi, dan satu-satunya opsi yang sering dilupakan orang adalah opsi yang membuatnya berjalan dengan lancar.
Untuk aplikasi modern, tidak ada satupun alat klasik yang berfungsi, dan alasannya bukanlah kekurangan yang bisa diatasi dengan konfigurasi. Alat-alat tersebut mengambil dan mengurai HTML; kontennya disusun oleh JavaScript setelah proses pengambilan. Pilihan yang realistis adalah penangkapan berbasis browser untuk halaman-halaman yang penting, API jika tersedia, atau ekspor jika Anda memiliki situs tersebut — dan opsi terakhir inilah yang paling sering diselesaikan dengan cara yang sulit.
Apa pun yang Anda gunakan, tiga hal berikut berlaku terlepas dari alat yang digunakan. Batasi kecepatan (rate-limit), karena mirroring dengan kecepatan penuh tidak dapat dibedakan dari serangan. Patuhi "robots.txt", karena ini adalah standar dan mengabaikannya adalah pilihan. Dan untuk hal-hal yang substansial, mintalah izin — mengirim email hanya butuh satu menit dan seringkali menghasilkan paket data yang membuat seluruh proses ini menjadi tidak perlu.
