Web Scraping (Veri Kazıma (Web Kazıma))

Web sitelerinin HTML iceriginden programatik olarak veri cikarma teknigi.

Web kazıma (web scraping), bir web sitesinin HTML içeriğini programatik olarak indirip anlamlı verileri çıkarma sürecidir. Manuel kopyala-yapıştırmanın aksine, web kazıma belirli bir hedef yapıya sahip veriler için — fiyat takibi, araştırma verisi toplama, pazar analizi — büyük ölçekte otomasyon imkânı tanır. Temel web kazıma süreci üç adımdan oluşur: istek gönderme (HTTP GET/POST), HTML ayrıştırma (parsing) ve veri çıkarma. Python'da Requests kütüphanesi HTTP isteklerini yönetirken BeautifulSoup veya lxml, CSS seçiciler ve XPath ifadeleriyle istenen elemanları ayıklar. Scrapy ise asenkron mimarisiyle binlerce sayfayı verimli biçimde gezebilen tam donanımlı bir web kazıma çerçevesidir. Dinamik web siteleri, JavaScript ile içeriklerini tarayıcıda oluşturduğundan geleneksel HTTP tabanlı kazıma yetersiz kalır. Bu durumda Playwright veya Selenium gibi tarayıcı otomasyon araçları, gerçek bir tarayıcı ortamında sayfayı render ederek dinamik içeriğe erişimi mümkün kılar. Playwright, Chrome, Firefox ve WebKit desteği ile asenkron mimarisiyle modern kazıma projelerinde tercih edilen araç hâline gelmiştir. Web kazımada etik ve hukuki boyutlar büyük önem taşır. robots.txt dosyası, site sahiplerinin hangi yolların kazınmasını istemediğini belirtir; bu dosyaya uymak etik bir zorunluluktur. Hizmet şartları (Terms of Service), bazı siteler için kazıma işlemini yasal zeminde sınırlandırabilir. Kişisel veri içeren içerik GDPR ve KVKK kapsamında ek duyarlılık gerektirir. Sunuculara aşırı istek göndermek hedef siteyi yavaşlatabilir veya yasal sorumluluk doğurabilir; bu nedenle istekler arasında makul gecikmeler bırakmak standart uygulamadır. Anti-kazıma teknolojileri de gelişmiştir: CAPTCHA, IP engelleme, istek parmak izi analizi ve JavaScript zorunluluğu bunlar arasındadır. Bu engelleri aşmak için proxy rotasyonu, kullanıcı-ajanı (user-agent) değiştirme ve ScrapingBee, Apify, Bright Data gibi yönetimli web kazıma API hizmetleri yaygın biçimde kullanılmaktadır. Büyük ölçekli projelerde veri depolama, temizleme ve doğrulama süreçleri de kazıma pipeline'ının ayrılmaz parçalarıdır.

Temel Kazıma Süreci

Web kazıma üç adımda gerçekleşir: HTTP isteği, HTML ayrıştırma ve veri çıkarma. Python'da requests.get(url) ile sayfa HTML'i indirilir; BeautifulSoup bu HTML üzerinde soup.select('.fiyat') gibi CSS seçiciler veya XPath ifadeleriyle istenen elemanı bulur. Elde edilen veri CSV, JSON veya veritabanı formatına aktarılabilir. Bu temel akış, basit ve statik siteler için son derece etkilidir.

JavaScript ile Oluşturulan Sayfalar

Modern web uygulamalarının büyük çoğunluğu React, Vue veya Angular ile sayfa içeriğini tarayıcıda dinamik olarak oluşturur. Sunucudan gelen ham HTML anlamlı veri içermez; JavaScript çalıştıktan sonra DOM şekillenir. Playwright, Chrome/Firefox/WebKit motorlarını otomatize ederek sayfanın tam olarak render olmasını bekler ve ardından elemanlara erişimi sağlar. page.wait_for_selector() ve page.evaluate() gibi yöntemler dinamik içeriğe ulaşmanın anahtar adımlarıdır.

Hukuki ve Etik Çerçeve

Web kazıma yasal alanı gri zon olarak kalabilmektedir. robots.txt'e uymak etik minimum gerekliliktir. Hizmet şartları kazımayı yasaklıyorsa bu yasağa uymak önerilir; ABD mahkemelerinde hiQ v. LinkedIn kararı kamusal verilerin kazınmasını desteklemiş olsa da her durumda geçerli değildir. AB'de GDPR ve Türkiye'de KVKK, kişisel verinin toplanmasını ve işlenmesini katı kurallara bağlar; bu tür verilerin kazınmasında hukuki danışmanlık alınması şart olabilir.

Ölçekleme ve Anti-Engel Stratejileri

Scrapy, asenkron I/O ile aynı anda yüzlerce isteği paralel yönetebilir; middleware mimarisi ile proxy, cookie ve kimlik doğrulama kolayca eklenir. IP rotasyonu için Tor, veri merkezi proxy veya konut (residential) proxy hizmetleri kullanılabilir. CAPTCHA'lar için 2captcha veya Anti-Captcha gibi insan çözümlü hizmetler ya da yapay zeka tabanlı çözümler entegre edilebilir. Makul gecikmeler (1-5 saniye) ve user-agent rotasyonu temel kamuflaj önlemleridir.

AI Veri Toplama İçin Web Kazıma Araçları

Scrapy

Python tabanlı tam özellikli çerçeve; paralel kazıma, middleware ve veri boru hattı desteği.

Playwright / Selenium

JavaScript işlemeli dinamik sayfalar için tarayıcı otomasyon; SPA ve oturum gerektiren siteler.

Beautiful Soup

HTML ayrıştırma için hafif ve kolay kütüphane; küçük ölçekli projeler için ideal başlangıç.

Firecrawl / Jina

AI odaklı web kazıma API'si; temiz metin çıkarımı ve Markdown dönüşümü LLM eğitimi için.

Sıkça Sorulan Sorular

  • check_circle Web kazıma yasal mı? Herkese açık kamusal veri için çoğunlukla evet; kişisel veri veya ToS ihlali içeriyorsa hayır. Her durum farklıdır ve hukuki değerlendirme gerektirir.
  • check_circle robots.txt'e uymak zorunlu mu? Hukuki bir zorunluluk değildir ancak güçlü bir etik normdur; uymamak yasal riske yol açabilir ve bazı içtihat kararlarında aleyhte değerlendirilebilir.
  • check_circle API varsa web kazıma yerine hangisi tercih edilmeli? Resmi API varsa her zaman daha güvenilir ve hukuki açıdan daha güvenlidir. API, oran sınırlarını açıkça belirtir ve yapılandırılmış veri döndürür.
  • check_circle Python mı JavaScript mı web kazıma için daha iyidir? Python (Scrapy, Playwright) web kazımada daha güçlü bir ekosisteme sahiptir. JavaScript tarafında ise Puppeteer ve Cheerio popüler alternatiflerdir.