Web kazıma, web içeriğini otomatik olarak alıp yapılandırılmış verilere dönüştürme sürecidir. Bu makale statik ve dinamik sayfalar arasındaki farkı, araç seçimini, eksiksiz uygulama akışını ve robots.txt ile kişisel verilerin uyumluluk sınırlarını açıklar.
Web kazıma (Web Scraping), bir program kullanarak web içeriğini almak, HTML, API yanıtları veya tarayıcı işleme sonuçlarından ihtiyacınız olan alanları çıkarmak ve bunları tablolar, JSON veya veritabanı kayıtları halinde düzenlemek sürecidir. Yaygın kullanımlar arasında fiyat izleme, halka açık ürün bilgilerinin toplanması, duygu analizi, SEO denetimleri, iş ilanı analizi ve dahili veri taşıma yer alır.
Web kazıma yalnızca "otomatikleştirilmiş kopyala yapıştır" değildir. Güvenilir bir proje en azından erişim izinleri, sayfa yapısı, dinamik işleme, sayfalama, yinelenenleri kaldırma, hız sınırlama, hata yeniden denemeleri, veri kalitesi ve gizlilik uyumluluğunu yönetmelidir. Teknik olarak bir sayfaya erişebilmek, onun tüm verilerini toplama, saklama veya yeniden kullanma hakkınız olduğu anlamına gelmez.
Web Kazıma ile Web Tarayıcı Arasındaki Fark Nedir?
İki terim sıklıkla birbirinin yerine kullanılır, ancak farklı şeylere odaklanırlar:
- Web tarayıcı (Web Crawler), URL'leri keşfetmeye ve dolaşmaya odaklanır; örneğin ana sayfadan bağlantıları izleyerek sürekli yeni sayfalar bulur;
- Web Kazıma, ürün adı, fiyat, stok durumu ve son güncelleme zamanı gibi alanları hedef sayfadan çıkarmaya odaklanır;
- Eksiksiz bir sistem genellikle önce URL'leri tarar, ardından sayfaları kazır ve son olarak verileri temizler ve saklar.
Arama motorları tipik bir tarama ve işleme sistemi örneğidir. Modern sayfalar, tam içeriğin görünmesi için JavaScript'in çalıştırılmasını da gerektirebilir. Ticari veri toplama genellikle çok daha küçük ölçeklidir, ancak "sayfaları keşfet, içeriği al, alanları ayrıştır, sonuçları sakla" temel zinciri benzerdir.
Web Kazıma Temel Olarak Nasıl Çalışır?
Bir kazıma görevi genellikle altı aşamadan geçer.
1. Veri Hedefini Tanımlayın
Önce gerçekten ihtiyacınız olan alanları, güncelleme sıklığını, kapsamı ve amaçlanan kullanımı tanımlayın. Örneğin, fiyat izleme yorum yapanların adlarına ihtiyaç duymayabilir; bir SEO denetimi yalnızca başlıklara, durum kodlarına ve canonical etiketlerine ihtiyaç duyar, her sayfanın tam gövdesine değil.
Hedef ne kadar netse, istek hacmini, depolama maliyetini ve kişisel veri riskini kontrol etmek o kadar kolaydır.
2. Sayfayı Alın
Sunucunun tam HTML'yi doğrudan döndürdüğü statik sayfalar için normal bir HTTP istemcisi genellikle yeterlidir. İçeriği JavaScript ile yükleyen veya tıklama ve kaydırma gerektiren dinamik sayfalar için işleme amacıyla gerçek bir tarayıcı otomasyon aracı kullanmanız gerekebilir.
Ancak tarayıcıyı tanıtmadan önce, sitenin resmi bir API, veri dışa aktarma, RSS, site haritası veya halka açık veri setleri sunup sunmadığını kontrol edin. Bu kanallar genellikle daha istikrarlıdır ve kullanım koşullarına uymak daha kolaydır.
3. Öğeleri Ayrıştırın ve Konumlandırın
HTML'i aldıktan sonra program içeriği bulmak için CSS seçicileri veya XPath kullanır. Scrapy seçiciler belgeleri, seçicilerin HTML'den düğümler çıkarabildiğini ve Scrapy yanıt nesnelerinin doğrudan .css() ve .xpath() gibi arayüzler sağladığını açıklar.
Seçiciler, veri nitelikleri, yapılandırılmış veriler veya net bir kapsayıcı hiyerarşisi gibi istikrarlı anlambilime dayanmalı ve sayfa yeniden tasarımlarında sık değişen rastgele sınıf adlarına bağımlılıktan kaçınmalıdır.
4. Temizleyin ve Normalleştirin
Sayfa metni genellikle fazladan boşluklar, para birimi sembolleri, birimler ve yerelleştirilmiş biçimlerle karışır. Temizleme aşamasında şunlar standartlaştırılmalıdır:
- karakter kodlaması ve satır sonları;
- tarihler, saat dilimleri ve sayı biçimleri;
- para birimleri ve ölçü birimleri;
- göreli URL'ler ile mutlak URL'ler;
- eksik değerler, yinelenen kayıtlar ve aykırı değerler.
Ham değeri ve temizlenmiş değeri ayrı ayrı saklamak en iyisidir; böylece anlaşmazlıklar veya kural değişiklikleri izlenebilir.
5. Saklayın ve Sürümleyin
Küçük veri miktarları CSV veya elektronik tablolara gidebilir; sürekli görevler için veritabanı veya nesne depolama daha uygundur. İş alanlarının yanı sıra kaynak URL'sini, kazıma zaman damgasını, yanıt durumunu ve veri ile ayrıştırıcı sürümlerini de saklamalısınız. Böylece bir değişikliğin siteden mi, ayrıştırma kurallarından mı yoksa başarısız bir kazımadan mı geldiğini anlayabilirsiniz.
6. İzleyin ve Bakım Yapın
Web sayfaları yeniden tasarlanır, alanlar hareket eder ve API'ler değişir. Üretim kazıması başarı oranını, boş değer oranını, yinelenme oranını, yanıt süresini, HTTP durum kodlarını ve birim zaman başına istek hacmini izlemelidir. Bir alan aniden tamamen boşalırsa, boş değerlerin iyi geçmiş verilerin üzerine yazmasına izin vermek yerine görevi duraklatın ve araştırın.
Statik Sayfalar, Dinamik Sayfalar veya API: Hangisini Seçmelisiniz?
Önce Resmi API veya Dışa Aktarmayı Tercih Edin
Resmi bir API genellikle istikrarlı alanlar, sayfalama ve izin mekanizmaları sunar. Lisans, kota ve maliyet ihtiyaçlarınızı karşıladığı sürece, sayfaları ayrıştırmaktan genellikle daha güvenilirdir.
Statik HTML Hafif Kazıma İçin Uygundur
Hedef verileri sayfa kaynağını görüntüleyerek görebiliyorsanız, bir HTTP istemcisi artı bir HTML ayrıştırıcı kullanabilirsiniz. Hızlı başlar ve az kaynak kullanır; halka açık listeler, belgeler ve içerik sayfaları için uygundur.
Dinamik Sayfalar İçin Yalnızca Tarayıcı Otomasyonunu Düşünün
Yalnızca içerik komut dosyaları çalıştıktan sonra görünüyorsa veya yetkili bir kapsam içinde tıklama, filtreleme ve kaydırma yapmanız gerekiyorsa, Playwright gibi araçları düşünün. Playwright BrowserType belgeleri, bir tarayıcıyı başlatmak veya bağlamak için otomasyon arayüzünü gösterir.
Tarayıcı otomasyonu daha fazla CPU ve bellek tüketir ve sayfa seçicileri yeniden tasarımlardan daha kolay etkilenir. Bu nedenle onu her proje için varsayılan yapmayın ve giriş izinlerini, CAPTCHA'ları veya erişim kontrollerini aşmak için asla kullanmayın.
Bir Web Kazıma Projesine Nasıl Başlanır?
Adım 1: İzinleri ve Alternatif Kanalları Doğrulayın
Sitenin hizmet koşullarını, API koşullarını, robots.txt dosyasını, telif hakkı bildirimlerini ve veri lisanslarını inceleyin. Proje giriş arkasındaki içerik, ücretli içerik, kişisel veri veya büyük ölçekli ticari kullanım içeriyorsa, hukuk veya veri koruma sorumlusu temeli doğrulamalıdır.
robots.txt, bir sitenin otomatik istemcilere kazıma kurallarını ifade ettiği standart mekanizmadır. RFC 9309, bunun hizmet sahipleri tarafından tarayıcıların kaynaklara nasıl eriştiğini kontrol etmek için kullanıldığını, ancak bir erişim yetkilendirme mekanizması olmadığını açıkça belirtir. Başka bir deyişle, kazımaya izin vermek otomatik olarak telif hakkı veya kişisel veri işleme hakları vermez ve bir yasak kuralı "teknik olarak aşılması" gereken bir engel olarak ele alınmamalıdır.
Adım 2: Sayfa Yapısını Örnekleyin
Farklı sayfalamaları, kategorileri ve uç durumları kapsayan 10–20 sayfa seçerek alanların her zaman aynı yerde olduğunu doğrulayın. Özellikle fiyatsız, görseli eksik, üretimi durdurulmuş, çok çeşitli, çok dilli ve oturumu süresi dolmuş durumları kontrol edin.
Adım 3: Veri Yapısını Tasarlayın
Her alan için bir ad, tür, zorunlu olup olmadığı, temizleme kuralı ve benzersiz bir anahtar tanımlayın. Örneğin, ürün verileri kaynak URL, platform ürün kimliği, başlık, güncel fiyat, para birimi, stok durumu ve toplama zamanını içerebilir.
Adım 4: Önce Küçük Bir Prototip Oluşturun
Seçicileri, sayfalamayı, kodlamayı, yinelenenleri kaldırmayı ve hata işlemeyi doğrulamak için birkaç sayfa kullanın. Seçicileriniz istikrara kavuşmadan sitenin tamamını çalıştırmayın.
Adım 5: Dostça Hız Sınırlaması Ekleyin
Makul bir istek aralığı, eşzamanlılık sınırı, zaman aşımı ve üstel geri çekilme ayarlayın; 429 Too Many Requests veya sürekli 5xx durumlarında aktif olarak yavaşlayın veya duraklayın. Zaten alınmış ve nadiren değişen sayfaları önbelleğe alarak yinelenen istekleri önleyin. Güncelleme zamanına göre artımlı kazıma yapabiliyorsanız, her gün her şeyi tamamen yeniden kazımayın.
Adım 6: İzleme ve Durdurma Koşullarıyla Yayına Alın
Bir CAPTCHA'nın aniden belirmesi, girişin süresi dolması, boş değer oranının keskin artması, yapı değişiklikleri veya sunucu hatalarının artması gibi anormal durumlar için durdurma koşulları belirleyin. Otomatik bir sistem, belirsizlikte durmalı ve sonsuza dek yeniden denemek yerine insan onayını beklemelidir.
robots.txt Nasıl Okunmalıdır?
robots.txt genellikle site kökünde /robots.txt konumunda bulunur. Kurallar user-agent'a göre gruplanır ve allow ile disallow kullanarak yolları tanımlar. Google'ın robots.txt açıklaması, kuralların yalnızca ilgili ana bilgisayar, protokol ve bağlantı noktası için geçerli olduğunu ve yolların büyük/küçük harfe duyarlı olduğunu da vurgular.
Dikkat edin:
- robots.txt bir parola duvarı değildir ve gizli URL'leri saklamak için kullanılmamalıdır;
- esas olarak tarama tercihlerini ifade eder ve içerik yetkilendirmesiyle eşdeğer değildir;
- sitenin belirli koşulları, sözleşmeleri, fikri mülkiyeti ve veri koruma yükümlülükleri ayrıca değerlendirilmelidir;
- robots.txt olmasa bile, sınırsız eşzamanlılıkla kazıyabileceğiniz veya her şeyi toplayabileceğiniz anlamına gelmez;
- bir proje, yönetişimden kaçmak için normal bir kullanıcı gibi gizlenmek yerine tanımlanabilir bir user-agent ve iletişim bilgileri kullanmalıdır.
Web Kazımanın Uyumluluk Riskleri Nelerdir?
Kişisel Veriler
Herkese açık görünür olmak, sınırsız işlenebileceği anlamına gelmez. Veriler bir kişiyi doğrudan veya dolaylı olarak tanımlayabiliyorsa, toplayıcı yine de bildirim, yasal dayanak, saklama süreleri, güvenlik ve hak yanıtı yükümlülüklerine sahip olabilir.
Avrupa Komisyonu'nun GDPR ilkeleri açıklaması, yasallık, adalet ve şeffaflık, amaç sınırlaması, veri minimizasyonu, saklama sınırlaması, doğruluk, güvenlik ve hesap verebilirlik gibi ilkeleri sıralar. AB'deki kişilere yönelik veri projeleri, belirtilen bir amaç için gerekli alanları yalnızca toplamalı ve silme veya yeniden inceleme süreleri belirlemelidir.
Telif Hakkı ve Veritabanı Hakları
Gerçekler ve bir sayfanın ifadesi farklı şekillerde korunabilir; büyük miktarlarda gövde metni, görsel, yorum veya veritabanı içeriği kopyalamak, yalnızca gerekli olgusal alanları kaydetmekten daha yüksek risk taşır. Yeniden yayımlayıp yayımlayamayacağınız, model eğitip eğitemeyeceğiniz veya ticari olarak yeniden satıp satamayacağınız, yargı yetkisine, lisansa ve amaçlanan kullanıma bağlıdır.
Sözleşmeler ve Erişim Kontrolü
Site koşulları otomatik erişimi, veri yeniden kullanımını veya hesap paylaşımını kısıtlayabilir. Girişi, ödeme duvarlarını, CAPTCHA'ları, frekans sınırlarını veya diğer teknik erişim kontrollerini aşmamalısınız. Bir proje kısıtlı veri almak zorundaysa, önce açık yetki almalıdır.
Web Sitesinin Hizmetine Etkisi
Aşırı eşzamanlılık karşı tarafın maliyetini artırır ve normal kullanıcıları etkiler. Hız sınırlama, önbelleğe alma, artımlı güncellemeler, kademeli zamanlama ve net durdurma koşulları hem mühendislik kalite gereksinimi hem de temel hizmet nezaketidir.
Tarayıcı Otomasyon Görevlerini Nasıl Daha Kontrollü Tutarsınız?
Kazıma hedefi gerçekten tarayıcı işlemesi gerektirdiğinde veya birden çok hesap, birden çok ortam ve ekip iş birliği içerdiğinde, izlenebilirlik ve izin kontrolü kritik hale gelir. Bu tarayıcı işlemlerini denetlenebilir, yönetilebilir iş akışları halinde düzenleyebilirsiniz:
- Çerez ve oturum karışımını azaltmak için tarayıcı ortamlarını müşteri veya projeye göre izole edin;
- Hesap parolalarını paylaşmak yerine yürüten üyelere yalnızca ihtiyaç duydukları izinleri verin;
- Kimin hangi görevi ne zaman başlattığını kaydetmek için operasyon günlükleri kullanın;
- İşlenmesi gereken sayfalar için küçük toplu kuyruklar ve eşzamanlılık sınırları belirleyerek istek yoğunluğunu kontrol altında tutun;
- Yetkili kapsam içindeki görevleri kademeli olarak genişletmeden önce seçicileri bir test ortamında doğrulayın;
- Dahili zamanlamayla entegre ederken zaman aşımlarını, hız sınırlarını ve manuel durdurma mekanizmalarını koruyun.
Hiçbir tarayıcı otomasyon aracının yetkisiz veri toplamayı uyumlu bir faaliyete dönüştüremeyeceğini ve CAPTCHA'ları, yasakları, ödeme duvarlarını veya platform sınırlarını aşmak için kullanılmaması gerektiğini unutmayın. Otomasyona başlamadan önce veri kaynağını, izinleri ve amaçlanan kullanımı doğrulayın. Yetkili tarayıcı iş akışlarını yönetmeniz gerekiyorsa, bir test ortamı kurmak için uygun bir tarayıcı otomasyon yönetim aracı kullanmayı düşünün.
Sıkça Sorulan Sorular
Web Kazıma Yasal mı?
Tüm ülkeler, web siteleri ve veri türleri için geçerli tek bir yanıt yoktur. Site koşullarını, erişim yöntemlerini, telif hakkını, veritabanı haklarını, kişisel verileri, ticari rekabeti ve yerel yasaları birlikte değerlendirmelisiniz. Yüksek riskli veya büyük ölçekli projeler için profesyonel bir hukuk danışmanına başvurun.
robots.txt İzin Veriyorsa Serbestçe Kazıyabilir miyim?
Hayır. robots.txt bir kazıma kuralıdır; telif hakkı lisansı, sözleşme muafiyeti veya kişisel verileri işleme yetkisi değildir.
Statik Sayfaları mı Kazımalıyım, Yoksa Headless Tarayıcı mı Kullanmalıyım?
Verileri resmi bir API veya statik HTML aracılığıyla alabildiğinizde hafif yaklaşımı tercih edin; tarayıcı otomasyonunu yalnızca hedef içerik gerçekten JavaScript'e veya yetkili etkileşime bağlı olduğunda kullanın.
Sayfa Yeniden Tasarımları Nedeniyle Kirli Verilerden Nasıl Kaçınırım?
Kaynağı ve zaman damgalarını saklayın, alan doğrulaması ve boş değer uyarıları ayarlayın, ayrıştırma kurallarınızı sürümleyin ve geçmiş verilerin üzerine yazmak yerine anormalliklerde yazmayı durdurun.
Özet
Web kazımanın özü "sayfayı indirmek" değil, web bilgilerini kontrollü, doğrulanabilir ve sürdürülebilir bir şekilde yapılandırılmış verilere dönüştürmektir. Olgun bir iş akışı resmi arayüzleri önceliklendirir, robots.txt ve hizmet koşullarına saygı gösterir, istek yoğunluğunu kontrol eder, kişisel verileri en aza indirir ve yapısal değişiklikler ile anormal durumlar için durdurma mekanizmaları tasarlar.
İzinler, veri modelleme ve izleme ölçek büyümesinden önce geldiğinde, web kazıma gerçekten kırılgan tek seferlik bir komut dosyası yerine istikrarlı bir veri altyapısı haline gelebilir.


