Python ile Veri Kazıma (Web Scraping): Yasal Kullanım Rehberi ve Teknikler

Python ile Veri Kazıma (Web Scraping): Yasal Kullanım Rehberi ve Teknikler

Her gün milyarlarca web sayfasında güncellenen veri — rakip fiyatlar, emlak ilanları, haber akışları, ürün yorumları — büyük bir değer kaynağıdır. Ancak bu veriye manuel olarak ulaşmak imkânsızdır. Web scraping, yani veri kazıma, bu veriyi otomatik ve sistematik biçimde toplayan bir tekniktir. Python, güçlü kütüphane ekosistemi sayesinde bu alandaki en yaygın programlama dili konumundadır. Bu rehberde hem teknik hem yasal boyutuyla web scraping'i kapsamlı biçimde ele alıyoruz.

Web Scraping Nedir ve Ne İçin Kullanılır?

Web scraping, bir web sitesinin HTML içeriğini programatik olarak indirip içinden belirli verileri ayıklama işlemidir. Bir tarayıcının bir web sayfasını görüntülemesiyle temelde aynı işlemi yapar; farkı, sonucun insan gözü yerine bir program tarafından işlenmesidir.

Gerçek dünya kullanım alanları son derece geniştir:

  • Fiyat Takibi: E-ticaret sitelerinde rakip ürün fiyatlarını saatlik takip ederek dinamik fiyatlandırma stratejisi oluşturma.
  • Rekabet Analizi: Rakip firmaların ürün katalogları, kampanyaları ve içerik stratejilerini izleme.
  • Emlak Veri Analizi: Sahibinden.com, Hürriyet Emlak gibi platformlardaki ilan verilerini toplayarak piyasa analizi yapma.
  • Haber Agregasyonu: Belirli konulardaki haberleri birden fazla kaynaktan toplayıp tek bir platformda sunma.
  • Akademik Araştırma: Sosyal medya veya forum verilerini analiz ederek toplumsal eğilimleri inceleme.
  • İş Zekası: Pazar dinamiklerini anlamak için sektöre özgü verileri periyodik toplama.

Scraping'in Yasal Boyutu: Bilmeniz Gereken Her Şey

Web scraping teknik olarak mümkün olsa da yasal sınırları dikkatle değerlendirmek gerekir. Bu konuda tek bir kural yoktur; bağlama göre değişen birden fazla boyut söz konusudur.

robots.txt Dosyası

Web sitelerinin kök dizininde bulunan robots.txt dosyası, hangi bot'ların hangi sayfalara erişebileceğini belirtir. Örneğin Disallow: /private/ kuralı, o dizinin taranmaması gerektiğini işaret eder. robots.txt'e uymak yasal bir zorunluluk olmasa da etik bir zorunluluktur ve bazı mahkeme kararlarında sözleşme ihlali olarak değerlendirilmiştir.

Kullanım Şartları (Terms of Service)

Pek çok web sitesinin kullanım şartları otomatik veri toplamanın yasak olduğunu belirtir. Bu şartları kabul ederek bir platforma kayıt olmuş ve ardından scraping yapmışsanız sözleşme ihlali riski doğar. Scraping projesine başlamadan önce hedef sitenin ToS'unu dikkatle okumak şarttır.

KVKK ve GDPR

Toplanan veriler kişisel veri içeriyorsa (isim, e-posta, telefon numarası vb.) Türkiye'de KVKK, Avrupa'da GDPR devreye girer. Kişisel verileri açık rıza olmadan toplamak, işlemek veya depolamak yasal ihlal oluşturur. Scraping projelerinde toplanan verilerin kişisel veri içermemesine veya ilgili yasal çerçeveye uygun işlenmesine özen gösterilmelidir.

Genel Yasal Çerçeve

Herkese açık (public) verileri toplamak, sunucuya aşırı yük bindirmeden ve ToS'a aykırılık olmadan yapıldığında genel olarak yasal kabul edilir. ABD'deki HiQ - LinkedIn davası ve Avrupa mahkeme kararları bu yönde emsal teşkil etmektedir. Ancak her durum kendi koşullarına göre değerlendirilmelidir.

Python Kütüphaneleri Karşılaştırması

Python'un scraping ekosisteminde birden fazla araç mevcuttur. Doğru aracı seçmek projenin başarısı için kritiktir:

requests + BeautifulSoup

En yaygın ve başlangıç dostu kombinasyondur. requests kütüphanesi HTTP isteklerini yönetir; BeautifulSoup ise indirilen HTML'i parse ederek CSS seçiciler veya tag isimleriyle veri ayıklamayı sağlar. Statik sayfalar için mükemmeldir ancak JavaScript ile yüklenen içerikleri işleyemez.

En iyi olduğu durum: Basit, statik sayfalar; haber siteleri; ürün katalogları.

Scrapy

Büyük ölçekli scraping projeleri için tasarlanmış tam kapsamlı bir framework'tür. Asenkron yapısı sayesinde eş zamanlı çok sayıda isteği işleyebilir. Yerleşik pipeline sistemi ile verileri doğrudan veritabanına veya dosyaya yazabilir. Öğrenme eğrisi daha diktir ancak büyük veri projelerinde açık ara en verimli araçtır.

En iyi olduğu durum: Binlerce sayfa içeren siteler, düzenli çalışan scraper'lar, kurumsal veri toplama projeleri.

Selenium

Gerçek bir tarayıcıyı (Chrome, Firefox) otomatize eden bir araçtır. JavaScript ile render edilen sayfaları, login gerektiren alanları ve dinamik içerikleri işleyebilir. Ancak yavaştır ve kaynak tüketimi yüksektir. Headless mod ile görünmez tarayıcı olarak çalıştırılabilir.

En iyi olduğu durum: Login gerektiren sayfalar, AJAX tabanlı içerikler, form doldurma otomasyonu.

Playwright

Microsoft tarafından geliştirilen modern tarayıcı otomasyon kütüphanesidir. Selenium'a kıyasla çok daha hızlı ve güvenilirdir. Chromium, Firefox ve WebKit'i destekler. Async yapısı ile yüksek performanslı scraping mümkündür. JavaScript rendered sayfalar için günümüzde Selenium'un yerini almaktadır.

En iyi olduğu durum: Modern JavaScript ağır siteler, SPA (Single Page Application) scraping, karmaşık kullanıcı etkileşimleri.

Araç JS Desteği Hız Öğrenme Kolaylığı Büyük Ölçek
requests + BS4 Hayır Yüksek Kolay Orta
Scrapy Kısmi Çok Yüksek Orta Çok İyi
Selenium Evet Düşük Orta Zor
Playwright Evet Yüksek Orta İyi

BeautifulSoup ile Basit Scraping: Adım Adım

Statik bir sayfadan veri çekmenin temel mantığını şu adımlarla anlayabiliriz:

  1. Kütüphaneleri yükleyin: pip install requests beautifulsoup4 komutuyla gerekli paketleri kurun.
  2. HTTP isteği gönderin: requests.get(url) ile hedef sayfanın HTML içeriğini indirin. Gerçek bir tarayıcıyı taklit etmek için User-Agent header'ı ekleyin.
  3. HTML'i parse edin: İndirilen içeriği BeautifulSoup(response.text, 'html.parser') ile işlenebilir bir nesneye dönüştürün.
  4. Veriyi ayıklayın: CSS seçiciler (soup.select('.price')) veya tag araması (soup.find_all('h2')) ile istediğiniz elementleri bulun.
  5. Veriyi temizleyin: .get_text(strip=True) ile gereksiz boşlukları ve HTML etiketlerini temizleyin.
  6. Kaydedin: Ayıklanan veriyi Python dict/list yapısına alarak JSON veya CSV'ye yazın.

Bu altı adım, statik sayfaların büyük çoğunluğu için yeterlidir. Ürün ismi, fiyat, link ve açıklama gibi yapısal verileri dakikalar içinde toplayabilirsiniz.

JavaScript Render Edilen Sayfalar için Playwright

Modern web sitelerinin önemli bir kısmı içeriği sunucudan değil, tarayıcıda JavaScript çalıştırarak oluşturur. Bu sayfaları requests ile çektiğinizde yalnızca boş bir HTML iskelet elde edersiniz; asıl içerik yoktur.

Playwright bu sorunu şöyle çözer: Gerçek bir tarayıcı (Chromium) arka planda başlatılır, sayfa tam olarak yüklenir (JavaScript dahil), ardından DOM snapshot'ı alınarak BeautifulSoup benzeri yöntemlerle parse edilir.

Playwright ile şunlar mümkündür:

  • Sayfa tamamen yüklenene kadar bekleme (wait_for_selector)
  • Sonsuz scroll (infinite scroll) sayfalarında aşağı kaydırarak tüm içeriği yükleme
  • Dropdown açma, filtre seçme gibi kullanıcı etkileşimleri
  • Network isteklerini intercept ederek doğrudan API yanıtlarını yakalama
  • Ekran görüntüsü ve PDF çıktısı alma

Anti-Scraping Korumaları ve Çözümleri

Büyük platformlar bot trafiğini engellemek için çeşitli korumalar kullanır. Bunları anlamak ve etik sınırlar içinde çözüm üretmek önemlidir:

  • Rate Limiting: Belirli sürede çok fazla istek gelirse IP engellenir. Çözüm: İstekler arasına rastgele gecikmeler ekleyin (time.sleep(random.uniform(1, 3))).
  • User-Agent Kontrolü: Bot User-Agent'ları tanınır ve engellenir. Çözüm: Gerçek tarayıcı User-Agent string'i kullanın ve döngüsel olarak değiştirin.
  • IP Engelleme: Aynı IP'den gelen yoğun trafik engellenir. Çözüm: Proxy rotasyonu ile her istek farklı IP'den gönderilir.
  • CAPTCHA: İnsan doğrulaması isteyen sayfalar. Çözüm: CAPTCHA çözme servisleri veya scraping stratejisini değiştirme.
  • Honeypot Linkleri: Görünmez linkler bot'ları tuzağa düşürür. Çözüm: Yalnızca görünür elementleri işleyin.

Bu korumaları aşmak teknik olarak mümkün olsa bile her durumda sitenin kullanım şartlarına ve etik kurallara uygun hareket etmek zorunludur.

Veriyi Kaydetme: JSON, CSV ve Veritabanı

Toplanan ham veriyi yapılandırılmış formata dönüştürmek scraping'in son ve kritik adımıdır:

  • JSON: Hiyerarşik veri yapıları için idealdir. Python'un yerleşik json modülü ile kolayca yazılır. API'lere veri beslemek için en uygun format.
  • CSV: Düz tablo verisi için uygundur. Excel veya Google Sheets'e aktarımı kolaydır. Python'un csv modülü veya pandas kütüphanesi kullanılır.
  • PostgreSQL / SQLite: Büyük hacimli veya ilişkisel veri için veritabanı tercih edilmelidir. SQLAlchemy ORM ile Python nesnelerini doğrudan veritabanına yazmak mümkündür.
  • MongoDB: Şeması olmayan (schema-less) JSON benzeri veriler için NoSQL veritabanı idealdir. Farklı yapılarda gelen scraping verilerini esnek biçimde saklar.

Zamanlanmış Scraping: Cron Job ile Otomatik Çalıştırma

Tek seferlik veri toplama çoğu zaman yeterli değildir; fiyat takibi veya haber agregasyonu gibi kullanım senaryoları periyodik çalışmayı gerektirir.

Linux/macOS üzerinde crontab ile zamanlanmış görev oluşturmak son derece basittir. Örneğin her sabah saat 08.00'de çalıştırmak için crontab'a 0 8 * * * python3 /path/to/scraper.py satırı eklenir.

Daha karmaşık otomasyon ihtiyaçları için Apache Airflow veya Celery + Redis kombinasyonu kullanılabilir. Bu araçlar hata yönetimi, yeniden deneme mekanizması ve görev bağımlılığı gibi kurumsal düzeyde özellikler sunar. Otomasyon botları konusundaki hizmetlerimiz bu ihtiyaçları karşılamaktadır.

Scraping Projelerinde Etik Kurallar

Teknik yapabilirlik ile etik sorumluluk arasındaki dengeyi korumak uzun vadeli sürdürülebilirlik için şarttır:

  • robots.txt kurallarına her zaman uyun; bu dosyayı görmezden gelmek hem etik dışıdır hem yasal risk yaratır.
  • Sunucuya aşırı yük bindirmeyin; istekler arasında makul gecikmeler bırakın. Hedef sitenin normal kullanıcı trafiğini etkilememek temel kuraldır.
  • Topladığınız veriyi kullanım şartlarına aykırı biçimde yayınlamayın veya ticari olarak kullanmayın.
  • Kişisel veri içeren içerikleri toplamaktan kaçının; zorunluysa KVKK'ya uygun işleyin.
  • Scraping yaptığınız siteye zarar vermekten kaçının; DDoS benzeri yoğunlukta istek göndermek yasal sorumluluğa yol açabilir.

Kullanım Alanları: Gerçek İş Senaryoları

E-Ticaret Fiyat Takibi

Hepsiburada, Trendyol veya Amazon'daki rakip ürün fiyatlarını günlük takip ederek dinamik fiyatlandırma stratejisi oluşturabilirsiniz. Rakip fiyatı düştüğünde otomatik bildirim almanızı sağlayan bir sistem, e-ticaret operasyonunuzu ciddi ölçüde optimize eder.

Emlak Veri Analizi

İzmir'deki Karşıyaka, Bornova veya Çiğli gibi ilçelerdeki kiralık ve satılık ilanların ortalama fiyatlarını, metrekare başına değerini ve ilan yoğunluğunu haftalık takip ederek yatırım kararları için nesnel veri tabanı oluşturabilirsiniz.

Haber Agregasyonu

Sektörünüzle ilgili haberleri birden fazla kaynaktan toplayarak ekibinize özel bir haber bülteni veya dashboard oluşturabilirsiniz. Anahtar kelime filtresiyle yalnızca alakalı haberleri süzün ve sabah işe geldiğinizde günün özetini hazır bulun.

SRN Dijital'in Otomasyon ve Scraping Hizmetleri

SRN Dijital olarak işletmenize özel veri toplama, temizleme ve raporlama süreçlerini otomatize ediyoruz. Rakip fiyat takibinden pazar araştırmasına, haber izlemeden içerik agregasyonuna kadar geniş bir yelpazede otomasyon çözümleri sunuyoruz.

Tüm projelerimizde yasal çerçeveye tam uyum, KVKK güvenliği ve ölçeklenebilir mimari ön planda tutulur. Toplanan verileri özel yazılım altyapınızla veya mevcut sistemlerinizle entegre edebiliyoruz.

Veri tabanlı karar alma süreçlerini güçlendirmek için bizimle iletişime geçin. İzmir yazılım ekibimiz projenizi değerlendirerek size özel bir çözüm tasarlar.

"Veri toplamak bir güç; doğru veriyi doğru zamanda toplamak ise rekabet avantajıdır. Python ve doğru araç seçimiyle bu avantajı sistematik hale getirebilirsiniz."

Profesyonel Desteğe mi İhtiyacınız Var?

SRN Dijital ekibi olarak dijitalleşme sürecinizin her adımında yanınızdayız.

Hemen Ulaşın
Ara
WhatsApp
Yorumlar