İçeriğe geç
Kaynak kütüphanesi
GOCUX / Makalelerknowledge

Web kazımayı sorumlu yapmak: yöntemler, sınırlar ve daha iyi yollar

Web kazımanın ne olduğu, bir kazıyıcının sayfaları nasıl veriye çevirdiği, hukuki ve etik sınırlar, önce denenecek alternatifler ve kaynak bilgisinin korunması.

Web kazıma (web scraping), web sayfalarından belirli bilgilerin otomatik olarak toplanmasıdır: bir program ya da giderek daha sık bir yapay zekâ ajanı sayfayı açar, ilgilendiğiniz değerleri bulur ve bir tabloya yazar. Ekipler bunu rakip fiyatlarını izlemek, iş ilanlarını toplamak, potansiyel müşteri listeleri oluşturmak, mevzuat duyurularını takip etmek ve ürün kataloglarındaki boşlukları doldurmak için kullanır. Ajanlar kazımayı hiç olmadığı kadar kolaylaştırdı; artık kod yazmak yerine veriyi düz bir cümleyle isteyebiliyorsunuz. Bu da eski soruları daha az değil, daha acil hâle getiriyor: Bunu almaya izniniz var mı, daha iyi bir yol var mı ve her değerin nereden geldiğini gösterebilir misiniz? Bu yazı pratik bir genel bakıştır, hukuki tavsiye değildir.

Kazıma, tarama ve bilgi çıkarma

Bu üç kavram sıkça birbirinin yerine kullanılır ama farklı işleri anlatır. Tarama (crawling), ölçekli keşiftir: çok sayıda sayfayı bulmak ve çekmek için bağlantıları izlemek. Kazıma hedeflidir: hangi sayfaların önemli olduğunu ve onlardan hangi alanları istediğinizi bilirsiniz. Bilgi çıkarma ise içeriği yapılandırılmış değerlere dönüştüren adımdır ve canlı web sayfaları kadar elinizdeki PDF'lere, resmî başvurulara ve dokümanlara da uygulanır. Örneğin bir fiyat izleme projesi, ürün sayfalarını bulmak için bir perakendecinin site haritasını bir kez okuyabilir, bu sayfaları haftalık olarak kazıyabilir ve fiyatlarla ölçüleri normalleştirmek için bilgi çıkarmayı kullanabilir.

Bir kazıyıcı nasıl çalışır

  1. Hedefleri seçin. Her biri için bir gerekçesi olan, tanımlı bir sayfa listesi ya da URL kalıbı.
  2. Sayfayı çekin. Statik sayfalar için düz bir HTTP isteği yeterlidir. İçeriğini JavaScript ile oluşturan sayfalar ise sayfayı bir insanın tarayıcısı gibi işleyen bir headless tarayıcı gerektirir; bu daha yavaş ve daha ağırdır.
  3. Değerleri bulun. Geleneksel kazıyıcılar belirli öğeleri işaret eden CSS seçicileri ya da XPath ifadeleri kullanır. Yapay zekâ tabanlı kazıyıcılar sayfayı okur ve alanları "ürün adı, liste fiyatı, stok durumu" gibi bir tarife göre seçer.
  4. Temizleyin ve normalleştirin. Para birimlerini, ölçü birimlerini ve tarih biçimlerini dönüştürün; fazla boşlukları ve etiketleri ayıklayın.
  5. Doğrulayın. Beklenen aralığın dışındaki değerleri reddedin, boş alanları işaretleyin, önceki çalıştırmayla karşılaştırın.
  6. Kaynak bilgisiyle saklayın. Her değeri, nerede ve ne zaman okunduğu bilgisiyle birlikte tutun.
  7. Kırılmaları izleyin. Web siteleri düzenlerini haber vermeden değiştirir ve bozulan bir seçici genellikle sessizce başarısız olur: ya hiçbir şey ya da yanlış öğeyi döndürür.

Seçici tabanlı kazıyıcılar isabetlidir ama kırılgandır. Yapay zekâ tabanlı bilgi çıkarma düzen değişikliklerine daha dayanıklıdır, ama yeni bir hata türü getirir: sayfada hiç bulunmayan, kendinden emin bir değer. Çare iki durumda da aynıdır. Her değer alındığı metnin birebir kendisiyle birlikte gelmeli, bulunamayan bir değer ise tahminle doldurulmamalı, boş kalmalıdır.

{
  "product": "Ayarlanabilir masa, meşe, 140 cm",
  "price": null,
  "price_status": "bilinmiyor: fiyat yalnızca girişten sonra görünüyor, toplanmadı",
  "source_url": "https://shop.example.com/desks/oak-140",
  "retrieved_at": "çekme zamanı, UTC olarak saklanır",
  "supporting_text": null,
  "method": "ürün sayfası, fiyat bloğu seçicisi v3"
}

Hukuki ve etik sınırlar

Kurallar ülkeye ve topladığınız şeye göre değişir; küçük bir iç denemenin ötesindeki her iş için bir hukukçuyla konuşmak gerekir. Aynı sorular tekrar tekrar karşımıza çıkar:

  • Kullanım koşulları. Birçok site, koşullarında otomatik erişimi kısıtlar. Giriş yaptıysanız genellikle bu koşulları kabul etmişsinizdir; bu da onları sizin için bağlayıcı kılabilir.
  • Erişim denetimleri. Giriş ekranları, ödeme duvarları, CAPTCHA'lar ve IP engelleri site sahibinin hayır demesidir. Bunları aşmak, kazımanın gri bölgeden çıkıp açıkça yanlış, birçok hukuk düzeninde de muhtemelen hukuka aykırı hâle geldiği noktadır.
  • Robots kuralları. Bir robots.txt dosyası nadiren yasa hükmündedir; ama site sahibinin otomatik ziyaretçilerden ne beklediğinin açık bir ifadesidir. Ona uyun.
  • Kişisel veriler. Adlar, e-posta adresleri, fotoğraflar ve profil bilgileri herkese açık görünseler bile kişisel veri olmaya devam eder. AB'deki GDPR ya da Türkiye'deki KVKK gibi veri koruma yasaları bunların toplanmasına, saklanmasına ve kullanılmasına uygulanabilir; bu da amaç, veri en aza indirme ve saklama süresi sorularını gündeme getirir.
  • Telif ve veritabanı hakları. Fiyat gibi olgular genellikle bir makale, yorum ya da fotoğraf gibi ifadelerden farklı ele alınır. Bazı hukuk düzenleri ayrıca bir veritabanına yapılan yatırımı da korur. Bir fiyatı not etmek, bir sayfayı yeniden yayımlamakla aynı şey değildir.
  • Yük. Saldırgan bir kazıma küçük bir siteyi yavaşlatabilir, hatta çökertebilir. İstekleri yavaşlatın ve trafiğinizi dürüstçe tanıtın.

İşe yarar bir etik test: Site sahibi istek kayıtlarınızı, user-agent dizgenizi ve veriyle ilgili planınızı okusa rahat eder miydiniz?

Kazımadan önce bu yolları deneyin

YolNe zaman uygunNeye bakmalı
Resmî APISite ihtiyacınız olan veriye yapılandırılmış erişim sunuyorsaYeniden kullanım koşulları, erişim sınırları, hangi alanların dâhil olduğu
Dışa aktarma ya da toplu indirmeVeri zaten kullandığınız bir araçtaysa ya da yayıncı indirilebilir dosyalar sunuyorsaDışa aktarımın ne kadar güncel olduğu ve ihtiyacınız olan tüm alanları kapsayıp kapsamadığı
Akışlar ve site haritalarıYeni bir şey yayımlandığında haberdar olmanız gerekiyorsaAkışın eksiksiz mi yoksa yalnızca son öğeleri mi gösterdiği
Lisanslı veriŞirket, ürün ya da iletişim verisi bir sağlayıcıdan temin edilebiliyorsaLisansın veriyle neler yapmanıza izin verdiği; bkz. veri zenginleştirme
Web arama API'siTek bir siteyi kopyalamak değil, birçok sitede sayfa keşfetmek istiyorsanızKonunuz için kapsam ve tazelik; bkz. web arama API'leri
Site sahibine sormakTek bir kaynak işiniz için çok önemliyseBir veri paylaşım anlaşması çoğu zaman sanıldığından daha kolay yapılır

Bunların hiçbiri işe yaramıyorsa ve kullanım açıkça izinliyse kazıma doğru araçtır. Yola devam edecekseniz neleri karşılaştırmanız gerektiğini kazıma API'si seçme rehberi anlatıyor.

Her değerle birlikte kaynak bilgisini saklayın

Kaynağı olmayan kazınmış bir sayı, söylentiden ibarettir. Kaynak bilgisi (provenance), birinin bir değeri doğrulamasını, bir anlaşmazlığı çözmesini, değerin hâlâ güncel olup olmadığına karar vermesini, bir kaldırma talebine yanıt vermesini ya da bir kazıyıcının üç hafta önce bozulduğunu fark etmesini sağlar. Her değer için en azından şunları saklayın: yönlendirmelerden sonraki nihai URL, alındığı zaman, onu üreten yöntem ya da seçici sürümü, geldiği birebir metin ve sayfanın bir anlık görüntüsü ya da özeti (hash).

Bunu, insan ya da ajan, kimse toplamaya başlamadan önce kabul ölçütlerine yazın:

Tablodaki her fiyat, okunduğu sayfaya ve okunduğu zamana bağlanır. Her değer, sayfada onu destekleyen metni alıntılar. Giriş gerektiren, isteği engelleyen ya da hata döndüren sayfalar gerekçesiyle listelenir ve boş bırakılır. Hiçbir değer ürün adından, benzer bir üründen ya da önceki bir çalıştırmadan çıkarsanmaz.

Yapay zekâ ajanlarıyla kazıma

Toplama işini bir ajan yaptığında riskler yer değiştirir. Oturum açılmış bir tarayıcıda çalışan bir ajan, görevinin hiç ihtiyaç duymadığı verileri görebilir. Bir engeli aşmaya kendi başına karar verebilir. Topladığı veriyi başka bir araca ya da başka bir kişiye gönderebilir. Bunları yönetişim soruları olarak ele alın: tarayıcı erişimini görev bazında verin, salt okumayla başlayın (bkz. ajanlara salt okumayla başlayın), veri çalışma alanından çıkmadan önce bir insanın kararını şart koşun ve ziyaret edilen her sayfanın izini tutun.

GoCux bu modeli izler. Açık web'i kazımaz ya da taramaz. Web malzemesi, birinin yetkilendirdiği bir tarayıcı oturumu ya da dışa aktarma adımıyla içeri girer ve özgün sayfanın referansı ile alındığı tarihle birlikte içeri aktarılır. Browser Link yalnızca açıkça izin verilmiş tarayıcı görevini yürütür; tek başına bir URL, bir girişi aşmak için asla izin değildir. Malzeme bir projeye girdikten sonra Bilgi çıkarma ondan değerleri çeker; her değer onu destekleyen pasajla eşleşir, orada olmayan bir değer ise bilinmiyor olarak kalır. Veri dışa aktarmak, kapsamdaki dosyalar listelenerek bir karar için duraklar. Bkz. Bilgi çıkarma ve web kaynakları ve sorumlu ajan erişimi.

Bir kazıma projesi için kontrol listesi

  • Bu amaç için bir API'yi, dışa aktarımı, akışı ya da lisanslı veriyi elediniz mi?
  • Sitenin kullanım koşullarını ve robots.txt dosyasını okuyup neye izin verdiklerini not ettiniz mi?
  • Plan giriş ekranlarından, ödeme duvarlarından ve otomatik erişimi engelleyen her şeyden uzak duruyor mu?
  • Kişisel veri söz konusuysa amacı, gereken en az alanı ve verileri ne kadar süre saklayacağınızı tanımladınız mı?
  • İstekler yavaşlatılıyor mu, trafiğiniz kendini tanıtıyor mu?
  • Her değer URL'sini, alınma zamanını, yöntemini ve destekleyen metni taşıyor mu?
  • Eksik değerler tahminle doldurulmak yerine boş bırakılacak, engellenen sayfalar raporlanacak mı?
  • Veri ekip dışında paylaşılmadan önce biri onu gözden geçirecek mi?

Bu iş akışını çalışma alanınıza taşıyın.

Kapsamı belirleyin. Kanıtları inceleyin. Gereken adımları onaylayın.

Çalışma alanını aç

Sıradaki adım