Python ile Kapsamlı Web Kazıyıcı (Web Scraper) Uygulaması Geliştirme

Günümüzün dijital dünyasında veri, en değerli varlıklardan biri. İnternet üzerindeki milyonlarca web sayfasından anlamlı veriler çıkarmak, pazar araştırmasından fiyat takibine, içerik analizinden akademik çalışmalara kadar pek çok alanda kritik öneme sahip. İşte bu noktada devreye Web Scraping (Web Kazıma) giriyor.

Bu yazımızda, Python’ın güçlü kütüphanelerini kullanarak geliştirilmiş, kullanıcı dostu bir arayüze sahip, genel amaçlı bir web kazıyıcı uygulamasını detaylıca inceleyeceğiz.

🚀 Uygulama Nedir ve Neler Yapabilir?

Geliştirdiğimiz bu uygulama, herhangi bir genel URL’den yapılandırılmış veri çekebilen bir araçtır. Basit bir script olmanın ötesinde, Flask ile desteklenen bir web arayüzüne sahiptir. Kullanıcılar, hangi verileri çekmek istediklerini seçebilir ve sonuçları anında görüntüleyip JSON formatında dışa aktarabilirler.

Temel Özellikler

1. Esnek Veri Çıkarımı:
Uygulama, bir web sayfasındaki şu bileşenleri seçici olarak ayıklayabilir:

  • Meta Etiketleri: Sayfa başlığı, açıklama, OpenGraph etiketleri ve karakter seti.
  • Başlıklar: Tüm h1-h6 etiketleri ve hiyerarşileri.
  • Bağlantılar: Tüm <a> etiketleri, bağlantı metinleri ve mutlak URL’ler.
  • Görseller: Tüm <img> etiketleri, kaynak URL’leri ve alt metinler.
  • Sayfa Metni: Gereksiz gürültülerden (script, style, nav, footer) arındırılmış temiz metin içeriği.
  • Tablolar: Sayfadaki HTML tabloları, başlıkları ve satırlarıyla birlikte yapılandırılmış veri olarak.

2. Gelişmiş İstek Yönetimi:
Web sitelerinin bot tespit sistemlerini aşmak ve daha stabil çalışmak için şu özellikler eklenmiştir:

  • User-Agent Seçimi: Chrome, Firefox veya Googlebot gibi farklı tarayıcı kimlikleri taklit edilebilir.
  • Zaman Aşımı (Timeout) Kontrolü: Yavaş yanıt veren sunucular için özel zaman sınırları belirlenebilir.
  • Sınırlayıcılar: Çıkarılacak maksimum bağlantı ve görsel sayısı tanımlanarak performans optimize edilir.

3. Sonuç ve Geçmiş Yönetimi:

  • Anında Önizleme: Kazınan veriler şık bir sonuç sayfasında sunulur.
  • Oturum Geçmişi: Mevcut oturum boyunca yapılan tüm kazıma işlemleri takip edilebilir.
  • JSON Dışa Aktarma: Tüm sonuçlar tek tıkla indirilebilir yapılandırılmış JSON dosyalarına dönüştürülür.

🛠️ Teknik Mimari ve Kullanılan Teknolojiler

Uygulama, Python ekosisteminin en güvenilir ve popüler kütüphaneleri üzerine inşa edilmiştir:

  • Flask: Hafif ve esnek yapısı sayesinde uygulamanın web arayüzünü ve rota yönetimini sağlar.
  • BeautifulSoup4 (bs4): HTML ve XML belgelerini ayrıştırmak (parse) için kullanılan endüstri standardı kütüphanedir. DOM ağacı üzerinde kolayca gezinmeyi sağlar.
  • Requests: HTTP isteklerini yönetmek, sayfaları çekmek ve başlıklar (headers) ile User-Agent spoofing yapmak için kullanılır.
  • Jinja2: Flask ile entegre gelen şablon motoru sayesinde, çekilen veriler dinamik olarak HTML sayfalarına basılır.

🔍 Adım Adım Çalışma Mantığı

Uygulamanın arka planında gerçekleşen işlemler şu sırayla ilerler:

1. Sayfanın Getirilmesi (Fetching)

Kullanıcı bir URL girdiğinde, requests kütüphanesi belirlenen User-Agent ve timeout değerleriyle sunucuya bir GET isteği gönderir. Sayfa içeriği HTML formatında alınır.

2. DOM’un Ayrıştırılması (Parsing)

Alınan HTML içeriği BeautifulSoup nesnesine dönüştürülür. Bu işlem, karmaşık HTML kodunu programlanabilir bir ağaç yapısına (DOM) dönüştürerek belirli etiketlerin aranmasını kolaylaştırır.

3. Veri Ayıklama Stratejileri

Seçilen veri türüne göre farklı yaklaşımlar uygulanır:

  • Bağlantılar ve Görseller: Göreceli (relative) URL’ler, urllib.parse.urljoin kullanılarak mutlak (absolute) URL’lere dönüştürülür.
  • Metin Temizleme: tag.decompose() yöntemiyle <script>, <style> ve <nav> gibi içerik dışı etiketler tamamen kaldırılır, böylece sadece saf makale/içerik metni kalır.
  • Tablo Analizi: <table>, <tr> ve <td> etiketleri üzerinden hiyerarşik bir döngü kurulur ve veriler liste formatına getirilir.

4. Sonuçların Saklanması ve Sunumu

Her kazıma işlemine benzersiz bir ID (uuid) atanır. Veriler bellekte (in-memory) bir sözlük yapısında saklanır ve kullanıcıya result.html şablonu üzerinden sunulur.


🏃 Kurulum ve Çalıştırma

Projeyi kendi yerel ortamınızda çalıştırmak için şu adımları izleyebilirsiniz:

  1. Gerekli Kütüphaneleri Kurun:
   pip install flask requests beautifulsoup4
  1. Uygulamayı Başlatın:
   python scraper_app.py
  1. Arayüze Erişin:
    Tarayıcınızdan http://localhost:8117 adresine giderek kazıma işlemine başlayabilirsiniz.

🎯 Sonuç

Bu proje, Python ile veri madenciliğine giriş yapmak isteyenler için mükemmel bir örnektir. Sadece veri çekmeyi değil, aynı zamanda bu verileri nasıl temizleyeceğinizi, nasıl sunacağınızı ve kullanıcı etkileşimini nasıl yöneteceğinizi gösterir. Web scraping dünyası, etik kurallar (robots.txt) çerçevesinde kullanıldığında, internetteki devasa bilgi havuzunu analiz etmek için inanılmaz bir güç sunar.

Ahmet Aksoy

Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.

python, web scraping, beautifulsoup, flask, veri madenciliği, otomasyon

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir