Tutumumuzu açıkça belirtelim: Biz Geonode olarak, bu amaç için neredeyse hiçbir zaman gerek olmayan proxy satıyoruz. Yansıtma izniniz olan bir siteyi yansıtmak, tek kaynaktan gelen ve orta hacimli bir iştir; bu iş, kendi bağlantınız üzerinden sorunsuz bir şekilde yürütülebilir. Bunun için proxy kullanmayı düşünüyorsanız, bu genellikle sitenin kabul etmediği bir hızda içerik yansıttığınız anlamına gelir ve doğru çözüm, dağıtımı artırmak yerine hızı düşürmektir. Tek bir gerçek istisna vardır — bölgeye özgü içeriğin yansıtılması — ve bu aşağıda belirtilmiştir. Bu makaledeki diğer her şey, hiçbir altyapı gerektirmeyen bir dizüstü bilgisayardan çalışır.
Bu Araçlar Aslında Ne Yapar?
Bu kategorideki her araçta dört adım vardır.
Bir sayfayı al. HTML dosyasını indir. Varlıkları bul. Resimleri, stil sayfalarını, komut dosyalarını ve yazı tiplerini tespit et ve bunları da takip et. Bağlantıları takip edin. Tanımladığınız kapsam içinde daha fazla sayfa keşfedin. Referansları yeniden yazın. Mutlak URL'leri göreceli yollara dönüştürün, böylece kopya dosya sisteminizden çalışsın.
Dördüncü adım, bir ripper'ı bir tarayıcıdan ayıran şeydir. Bir tarayıcı veri toplar; bir ripper ise göz atılabilir bir yerel kopya oluşturur ve aradaki fark, bağlantıların yeniden yazılmasıdır.
Meşru kullanım alanları sıradan sayılabilir: bir site çevrimdışı hale gelmeden önce arşivlemek, seyahat veya erişimi kısıtlı bir ağ için belgeleri çevrimdışı hale getirmek, platformlar arasında geçiş yapmak, uyumluluk kaydı tutmak ve bir barındırıcı hizmetini sonlandırdığında kendi çalışmalarınızı korumak.
wget: Varsayılan Seçenek
Zaten çoğu Unix sisteminde mevcuttur ve işlerin büyük bir kısmı için yeterlidir.
wget --mirror --convert-links --adjust-extension --page-requisites \
--no-parent --wait=1 --random-wait \
https://example.com/docs/
Her bir seçenek, kullanılmasını hak eder ve wget kılavuzu bu seçenekler hakkında ayrıntılı bilgi verir.
**--mirror
** "yansıtma için uygun seçenekleri etkinleştirir. Bu seçenek, özyinelemeyi ve zaman damgalamayı etkinleştirir, sonsuz özyineleme derinliği ayarlar ve FTP dizin listelerini korur. Şu anda -r -N -l inf --no-remove-listing
ile eşdeğerdir."
**--page-requisites
** "Wget'in belirli bir HTML sayfasını düzgün bir şekilde görüntülemek için gerekli tüm dosyaları indirmesini sağlar. Buna satır içi resimler, sesler ve referans verilen stil sayfaları gibi öğeler dahildir." Bu seçenek olmadan, stil ve resim içermeyen bir HTML sayfası elde edersiniz.
**--convert-links
**, "indirme işlemi tamamlandıktan sonra... yerel görüntülemeye uygun hale getirmek için" referansları yeniden yazar; bu, "sadece görünür köprüleri değil, belgenin harici içeriğe bağlantı veren herhangi bir bölümünü" de etkiler.
**--adjust-extension
**, HTML uzantısı olmadan HTML olarak sunulan sayfalara .html
uzantısını ekler — kılavuzda " .asp sayfaları kullanan uzak bir sitenin aynasını oluşturmak, ancak aynalanan sayfaların standart Apache sunucunuzda görüntülenebilir olmasını istemek" örneği verilmektedir.
**--no-parent
**, "yalnızca belirli bir hiyerarşinin altındaki dosyaların indirilmesini" sağlar; bu da işi tüm site yerine /docs/
ile sınırlandırır.
**--wait=1
**, nezaket bayrağıdır ve kılavuz bunu açıkça önerir: "Bu seçeneğin kullanılması tavsiye edilir, çünkü isteklerin sıklığını azaltarak sunucu yükünü hafifletir." Bunu, kılavuzda "tek bir kişinin eylemleri nedeniyle web sitesinden birçok ilgisiz kullanıcıyı engellemeye yönelik bu yanlış tavsiye"den esinlenerek oluşturulduğu belirtilen --random-wait
ile birlikte kullanın.
Bilmeniz gereken iki seçenek daha var. -Q
, sınırsız bir ayna sunucusunun diskinizi doldurmaması için bir indirme kotası belirler. -l
ise, "infinite" seçeneği çok cömert geliyorsa bir yineleme derinliği belirler.
wget’in sınırlamaları gerçektir: JavaScript çalıştırmaz, bağlantı yeniden yazma özelliği iyidir ancak karmaşık sitelerde mükemmel değildir ve grafiksel arayüzü yoktur. Bir dokümantasyon sitesi veya statik bir blog için bunların hiçbiri önemli değildir.
HTTrack: Grafik Arayüzlü Bir Klasik
HTTrack, bu kategorideki en tanınmış özel amaçlı araçtır; açık kaynaklı, platformlar arasıdır ve hem grafik arayüze hem de komut satırına sahiptir. Proje hâlâ aktif olarak devam etmektedir.
wget'e göre üstün olduğu noktalar: terminalde çalışmayan kullanıcılar için gerçek bir arayüz, karmaşık bağlantı yapılarını daha iyi işleme, devam ettirilebilir projeler ve yalnızca değişen kısımları yeniden yansıtan bir güncelleme modu.
wget'ten üstün olmadığı noktalar: aynı temel sınırlama — JavaScript çalıştırılamaması — ayrıca öğrenmesi biraz zaman alan bir filtreleme sözdizimi ve site operatörleri arasında kullanıcı ajanı yoluyla engellenmesine neden olan bir itibar.
Statik bir sitenin tarayıcıyla görüntülenebilir bir kopyasına ihtiyaç duyan teknik bilgisi olmayan kullanıcılar için bu program önerilir. Komut satırını rahatlıkla kullananlar için ise wget, daha az sürprizle aynı işi görür.
Tek Sayfalı Araçlar
Farklı bir sorun türü ve çoğu zaman en uygun çözüm.
Bütün bir site yerine tek bir sayfanın tamamını istiyorsanız, her şeyi tek bir bağımsız HTML dosyasına yerleştiren araçlar, bir ayna sitesinden daha kullanışlıdır. Bu araçlar, resimleri veri URI'leri olarak gömer, CSS'yi satır içi hale getirir ve bağımlılık olmadan e-posta ile gönderebileceğiniz, arşivleyebileceğiniz veya herhangi bir yerde açabileceğiniz tek bir dosya oluşturur.
Bu gruptaki tarayıcı uzantıları, çoğu kişi için pratik bir seçenektir ve buradaki tüm komut satırı araçlarına göre belirleyici bir avantaja sahiptir: sayfayı, JavaScript çalıştırıldıktan sonra görüntülenildiği haliyle yakalarlar. Modern bir uygulama için bu, çalışan bir kopya ile boş bir kabuk arasındaki farktır.
Bunun karşılığında, bu araçlar manuel olarak çalışır — bir seferde tek bir sayfa, bir kişinin tıklamasıyla. Birkaç sayfa için bu sorun değildir; bin sayfa içinse değildir.
ArchiveBox ve Koruma Araçları
ArchiveBox, amaç çevrimdışı gezinme değil de koruma olduğunda öne çıkan bir seçenektir. URL’leri alır ve aynı anda birden fazla arşivleme biçimi oluşturur: HTML, ekran görüntüsü, PDF, ayıklanmış metin ve bir WARC dosyası.
WARC, web arşivlerinin kullandığı format olduğu için bilinmesi gereken bir formattır. Dosya sistemi yaklaştırması yerine HTTP işlemlerinin kendisini depolar; bu da başlıkların, durum kodlarının ve tam baytların korunduğu anlamına gelir. Doğruluğun önemli olduğu her alanda — hukuk, uyumluluk, araştırma — bu, yeniden yazılmış HTML'den oluşan bir dizinden önemli ölçüde daha iyi bir kayıttır.
ArchiveBox kendi sunucusunda barındırır, bir dizin tutar ve başlıksız bir tarayıcıyı çalıştırarak JavaScript'i işler. wget'ten daha ağırdır ve daha dayanıklı sonuçlar üretir.
Neden Hepsi Modern Sitelerle Zorlanıyor?
Bu kategorideki hayal kırıklıklarının çoğunun ardındaki tek açıklama.
JavaScript ile görüntüleme. wget ve HTTrack, HTML’yi alır ve ayrıştırır. Tek sayfalık bir uygulama ise neredeyse boş bir belge ile bir komut dosyası paketini döndürür; içerik ise tarayıcıda birleştirilir. Yansıtmış olduğunuz şey, sadece bir kabuktur.
API tabanlı içerik. İlk HTML'de içerik olsa bile, sonraki gezinme işlemleri bir API'dan JSON alabilir. Bu istekler, işaretlemedeki bağlantılarla değil kodla yapılır; bu nedenle, bağlantıları takip eden bir yansıma bunları asla keşfedemez.
Sonsuz kaydırma ve gecikmeli yükleme. Etkileşim sonucu ortaya çıkan içerik, işaretlemede hiç yer almaz.
İstemci tarafında yönlendirme. Sunucuya asla ulaşmayan URL’ler. Bir yansıma, hiç talep edilmeyen içeriği getiremez.
Kimlik doğrulama ve kişiselleştirme. Oturum açma gerektiren her şey ve kullanıcı başına farklılık gösteren her şey.
Çözüm yolları, çaba gerektirme derecesine göre sıralanmış olarak:
Statik bir dışa aktarım olup olmadığını kontrol edin. Dokümantasyon siteleri sıklıkla bir PDF veya indirilebilir bir paket sunar. Oluşturmaya başlamadan önce bunu sorun.
API olup olmadığını kontrol edin. İçerik bir API'dan geliyorsa, onu doğrudan almak, ön ucu yansıtmaktan daha kolay ve daha eksiksizdir.
Gerçekten işlenmeye ihtiyaç duyan sayfalar için tarayıcı tabanlı bir araç kullanın. Playwright, sayfalar arasında gezinebilir, içeriği bekleyebilir ve render edilmiş HTML’yi kaydedebilir; bu, bir komut dosyası yazma ve önemli ölçüde daha fazla bant genişliği kullanımı pahasına, JavaScript desteğine sahip bir yansıma oluşturur.
Kısmi bir yansıma kabul edin. Çoğu durumda, bir sitenin statik kısımları zaten istediğiniz şeydir.
Playwright ile Bir JavaScript Sitesini Yansıtma
Klasik araçlar boş bir kabuk döndürdüğünde başvurulabilecek pratik bir alternatif. Genel amaçlı bir kopyalama aracı değildir, ancak tanımlanmış bir sayfa kümesini görüntülenmiş haliyle yakalamak için yeterlidir.
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();
Burada dört nokta önemlidir.
**page.content()
, kaynak HTML'yi değil, görüntülenmiş DOM'u** döndürür. Bu yaklaşımın wget'in işe yaramadığı durumlarda işe yaramasının tek nedeni budur — JavaScript tarafından oluşturulduktan sonraki haliyle işaretlemeyi alırsınız.
Ağ boşta kalmasını değil, bir seçiciyi beklemek. Analitik işaretçileri veya web soketleri içeren sayfalar asla boşta kalmaz, bu nedenle waitUntil: 'networkidle'
komutu birçok modern sitede zaman aşımına uğrar. Mevcut olması gerektiğini bildiğiniz bir öğeyi beklemek hem daha hızlı hem de daha güvenilirdir.
Sayfalar arasında kasıtlı olarak bırakılan ara. Bu, wget’teki --wait
komutuyla aynı nezaket kuralıdır ve aynı derecede gereklidir.
Bağlantı yeniden yazımı yok. Bu, açık bir sınırlamadır: mutlak referanslar içeren işlenmiş HTML’yi alırsınız; bu nedenle kopyanın doğru görünmesi için internet bağlantısı gerekir. Yeniden yazma eklemek, her belgeyi ayrıştırmak, her varlığı indirmek ve referansları yeniden yazmak anlamına gelir — bu da wget'i yeniden uygulamaktır ve bu noktada ikisini birleştirmek daha kolaydır: Playwright'ı kullanarak sayfayı oluşturup kaydedin, ardından kaydedilen dosyalara wget'i çalıştırarak varlıkları toplayın.
Ayrıca bant genişliği maliyetini de hesaba katın. Bir tarayıcı her görüntüyü, yazı tipini, komut dosyasını ve videoyu önceden yükler; bu nedenle bu işlem, aynı sayfaların wget aynasından yaklaşık on kat daha fazla trafik tüketir. page.route()
ile yazı tipi ve medya isteklerini engellemek, bunların koruduğunuz içeriğin bir parçası olmadığı durumlarda bu trafiği önemli ölçüde azaltır.
Bir Araç Seçimi
| İhtiyaç | Araç |
|---|---|
| Statik site, terminal kullanımı konusunda rahat olanlar | wget |
| Statik site, GUI tercih edenler | HTTrack |
| Tek sayfa, eksiksiz ve bağımsız | Tek dosya tarayıcı eklentisi |
| Aslına sadık koruma | ArchiveBox / WARC |
| JavaScript ağırlıklı site | Playwright komut dosyası |
| Taşıma öncesi kendi siteniz | Platformunuzun dışa aktarma özelliği |
Son satır, ayrı bir başlık altında ele alınmaya değer; çünkü bu durum, insanların genellikle en zor yoldan çözdüğü bir sorundur. Sitenin sahibiyseniz, platformun dışa aktarma özelliğini kullanın. Veritabanı dökümü, statik site derlemesi veya barındırma sağlayıcısının yedeği eksiksizdir, yansıtma işleminin göremediği öğeleri de içerir ve birkaç dakika sürer. Kendi sitenizi yansıtmak, kolay bir görevin zor versiyonunu yapmaktır.
Her Durumda Geçerli Olan Kurallar
Kullanılan araçtan bağımsız olarak.
robots.txt sizin için de geçerlidir. wget varsayılan olarak bu dosyaya uyar. HTTrack da varsayılan olarak bu dosyaya uyar. Her ikisine de uymamaları söylenebilir; ancak bunu yapmak, sonuçları olan bilinçli bir tercihtir. Bu artık bir standarttır — RFC 9309 — ve robots.txt dosyasını nasıl okuyacağınızı başlıklı yazımızda bu konuyu ele aldık.
Hız sınırlaması isteğe bağlı değildir. --wait ayarı olmayan bir ayna sunucu, bağlantının izin verdiği kadar hızlı istek gönderir; bu durum, sunucu tarafında bir saldırıdan ayırt edilemez. Saniyede bir istek, makul bir alt sınırdır.
Telif hakkı ortadan kalkmaz. Kişisel kullanım amacıyla çevrimdışı okumak üzere bir kopya indirmek bir şeydir; bunu yeniden yayınlamak ise başka bir şeydir. İçerik, sahibine aittir.
Hizmet şartları, teknik olarak mümkün olup olmadığına bakılmaksızın bunu tamamen yasaklayabilir.
Bant genişliği siteye maliyet getirir. Büyük bir sitenin aynası birçok gigabaytlık veri aktarabilir ve bunun bedelini birisi öder.
Sorun. Önemli bir konu için e-posta göndermek, geçici çözümlerden daha hızlıdır. Site sahipleri genellikle olumlu yanıt verir ve bazen sizi bu zahmetten tamamen kurtaracak bir paket sunar.
Proxy’lerin Ne Zaman Kullanılacağı: Kısaca
Bu bizim ürünümüz olduğu için dürüst cevap kısa olacaktır.
Bir yerden, izin aldığınız bir siteyi makul bir hızda yansıtmak için proxy’lere ihtiyacınız yoktur. Meşru kullanımların ezici çoğunluğu budur ve tek bir bağlantı bu işi halleder.
Site, bölgeye göre farklı içerik sunuyorsa ve siz bölgesel sürümleri istiyorsanız — yerelleştirilmiş sayfalara sahip bir dokümantasyon sitesi veya ülkeye özgü envanter içeren bir katalog gibi — proxy'lere ihtiyacınız olabilir. Burada önemli olan coğrafi konumdur ve bu gerçek bir kullanım örneğidir.
Daha hızlı olmak için bunlara ihtiyacınız yoktur ve bu nedenle bunlara başvurmak, sitenin itiraz edeceği bir hızda yansıtma yaptığınız anlamına gelir. Buna doğru yanıt --wait adresidir, dağıtım değildir.
Bölgesel bir durum söz konusuysa, veri merkezi bant genişliği mantıklı bir seçimdir — bizimki 0,14 $/GB'den başlar, Eylül 2026'da fiyatlandırma sayfamız üzerinden kontrol edilmiştir — ve tam bir yedeklemenin gigabayt cinsinden ölçüldüğünü, dolayısıyla hesaplamaların önemli olduğunu unutmayın.
Sık Sorulan Sorular
Web sitesi kopyalayıcı nedir?
Bir web sitesinin sayfalarını ve öğelerini yerel depolama alanına indiren ve kopyanın çevrimdışı olarak çalışabilmesi için bağlantıları yeniden yazan bir araçtır. Bağlantıların yeniden yazılması, bu aracı, gezilebilir bir yansıma oluşturmak yerine veri toplayan bir tarayıcıdan ayıran özelliktir.
Bir web sitesinin tamamını nasıl indirebilirim?
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --wait=1 URL, çoğu statik siteyi destekler. Grafiksel bir alternatif olarak HTTrack da aynı işi görür. JavaScript ağırlıklı bir site için ise bu araçların ikisi de iyi sonuç vermez ve tarayıcı tabanlı bir yaklaşıma ihtiyacınız olur.
İndirdiğim web sitesi neden bozuk görünüyor?
Genellikle --page-requisites eksik olduğundan stil sayfaları ve resimler indirilememiştir ya da --convert-links eksik olduğundan referanslar hâlâ canlı siteye yönlendirmektedir. Sayfalar stil uygulanmamış değil de boşsa, site içeriği JavaScript ile görüntülüyor demektir ve görüntüleme özelliği olmayan bir araç bunu yakalayamaz.
Bir web sitesini indirmek yasal mı?
Kişisel çevrimdışı kullanım amacıyla indirmek genellikle sorun teşkil etmez; ancak yeniden yayınlamak farklı bir konudur, çünkü telif hakkı hâlâ geçerlidir. Hizmet şartları, teknik yöntemlerden bağımsız olarak otomatik indirmeyi tamamen yasaklayabilir. Bu durum yargı yetkisi alanına göre değişir ve bu metin hukuki tavsiye niteliği taşımaz.
JavaScript kullanan bir web sitesini indirebilir miyim?
Komut dosyalarını çalıştırmadan HTML'yi alan ve ayrıştıran wget veya HTTrack ile indirmek mümkün değildir. Tarayıcı tabanlı bir yaklaşıma ihtiyacınız vardır — tek tek sayfalar için tek dosya uzantısı veya sayfada gezinip içeriği bekleyen ve görüntülenen sonucu kaydeden bir Playwright komut dosyası.
En iyi ücretsiz web sitesi indiricisi hangisidir?
Komut satırını rahatça kullanabiliyorsanız wget; zira bu program zaten yüklüdür ve statik siteler için tam kapasiteyle çalışır. Grafik arayüz istiyorsanız HTTrack. Amacınız gezinmekten ziyade içeriği korumaksa ArchiveBox; çünkü bu program HTML'nin yanı sıra WARC dosyaları da oluşturur.
Engellenmeden bir web sitesini nasıl indirebilirim?
İstekler arasında en az bir saniyelik bir gecikme ayarlayın, robots.txt kurallarına uyun, kimliğinizi doğru bir şekilde belirtin ve --no-parent ile bir derinlik sınırı belirleyerek kapsamı sınırlayın. Bu kategorideki engellemelerin çoğu, sunucunun bakış açısından bir saldırıyla aynı görünen tam hızda aynalama işleminden kaynaklanır.
Bir web sitesini indirmek için proxy kullanmalı mıyım?
Yalnızca içeriğin bölgeye özgü sürümlerine ihtiyacınız varsa. Makul bir hızda yapılan sıradan bir aynalama için tek bir bağlantı yeterlidir. Daha hızlı olmak için proxy'lere başvurmak, sitenin kabul etmediği bir hızda aktarım yaptığınız anlamına gelir ve bunun çözümü bir gecikme bayrağıdır.
Sonuç
Statik bir site söz konusu olduğunda bu sorun çözülmüş durumdadır ve gerekli araç zaten bilgisayarınızda mevcuttur. Beş parametre içeren tek bir wget komutu, tarayıcıda görüntülenebilir bir yerel kopya oluşturur; insanların genellikle unuttuğu tek parametre ise, indirme işlemini “kibar” hale getiren parametredir.
Modern bir uygulama söz konusu olduğunda, klasik araçların hiçbiri işe yaramaz ve bunun nedeni, yapılandırarak aşabileceğiniz bir eksiklik değildir. Bu araçlar HTML'yi alır ve ayrıştırır; içerik ise alınmasından sonra JavaScript tarafından birleştirilir. Gerçekçi seçenekler arasında, önemli sayfalar için tarayıcı tabanlı bir yakalama, varsa bir API veya sitenin sahibiyseniz bir dışa aktarma yer alır — ve sonuncusu genellikle zor yoldan çözülen durumdur.
Ne kullanırsanız kullanın, araçtan bağımsız olarak geçerli olan üç şey vardır. Hız sınırlaması uygulayın, çünkü tam hızda bir yansıma, bir saldırıdan ayırt edilemez. robots.txt'yi dikkate alın, çünkü bu bir standarttır ve bunu göz ardı etmek bir tercihtir. Ve önemli herhangi bir şey için sorun — bir e-posta bir dakika sürer ve çoğu zaman tüm bu çabayı gereksiz kılan bir paket sağlar.
