Python ile Web Scraping ve Otomasyon: BeautifulSoup ve Selenium Tam Rehberi

Python ile Web Scraping ve Otomasyon: BeautifulSoup ve Selenium Tam Rehberi

CodeMareFi'ye Hoş Geldiniz!Yazılım dünyasındaki en güncel ve işlevsel kodları sizlerle paylaşmaya devam ediyoruz. Bu makalemizde, projelerinizde zaman kazanmanızı sağlayacak ve sisteminizi bir üst seviyeye taşıyacak önemli bir konuyu detaylıca ele alacağız. Hazırladığımız bu rehber, hem yeni başlayanlar hem de profesyonel geliştiriciler için özenle derlenmiştir. Aşağıdaki adımları ve kod bloklarını dikkatlice uygulayarak projenize sorunsuz bir entegrasyon sağlayabilirsiniz. Hazırsanız, detaylara geçelim.

Web Scraping Nedir?

Web scraping, web sitelerindeki verileri otomatik olarak toplama sürecidir. Fiyat takibi, haber toplayıcılar, akademik veri setleri oluşturma veya iş zekâsı için vazgeçilmez bir beceridir. Python, bu alanda en popüler dil olma özelliğini korumaktadır.

Hangi Aracı Ne Zaman Kullanmalısınız?

  • requests + BeautifulSoup: Statik HTML sayfaları için. Hızlı, hafif ve öğrenmesi kolay.
  • Selenium: JavaScript ile render edilen dinamik sayfalar için. Gerçek tarayıcıyı kontrol eder.
  • Scrapy: Büyük ölçekli, endüstriyel web scraping projeleri için tam teşekküllü framework.
  • Playwright: Modern alternatif, async destekli ve çok dilli. Selenium'dan daha hızlı.

BeautifulSoup ile Temel Scraping

import requests
from bs4 import BeautifulSoup
import json
import time

def haberleri_cek(url: str) -> list[dict]:
    """Belirtilen haber sitesinden başlıkları çeker."""
    
    # Gerçek bir tarayıcıymış gibi davranmak için header ekle
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 Chrome/120.0 Safari/537.36'
    }
    
    try:
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()  # 4xx/5xx hatalarında exception fırlat
    except requests.RequestException as e:
        print(f"İstek hatası: {e}")
        return []
    
    soup = BeautifulSoup(response.text, 'html.parser')
    
    haberler = []
    # Örnek: h2 etiketi içindeki tüm linkleri bul
    for baslik_etiketi in soup.find_all('h2', class_='haber-baslik'):
        baslik = baslik_etiketi.get_text(strip=True)
        link = baslik_etiketi.find('a')
        
        if baslik and link:
            haberler.append({
                'baslik': baslik,
                'url': link.get('href', ''),
            })
    
    return haberler

# Çekilen verileri JSON dosyasına kaydet
haberler = haberleri_cek('https://ornek-haber-sitesi.com')
with open('haberler.json', 'w', encoding='utf-8') as f:
    json.dump(haberler, f, ensure_ascii=False, indent=2)

print(f"{len(haberler)} haber başarıyla kaydedildi.")

Selenium ile Dinamik Sayfa Otomasyonu

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

def dinamik_icerik_cek(url: str):
    """JavaScript ile yüklenen içeriği çeker."""
    
    # Headless mod: tarayıcı penceresi açılmadan çalışır
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    
    driver = webdriver.Chrome(options=chrome_options)
    
    try:
        driver.get(url)
        
        # Belirli bir elementin yüklenmesini bekle (max 10 saniye)
        wait = WebDriverWait(driver, 10)
        icerik_div = wait.until(
            EC.presence_of_element_located((By.CLASS_NAME, 'dinamik-icerik'))
        )
        
        # Sayfanın altına kadar kaydır (lazy loading için)
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)  # İçeriğin yüklenmesini bekle
        
        # İçeriği al
        ogeler = driver.find_elements(By.CSS_SELECTOR, '.urun-karti')
        
        sonuclar = []
        for oge in ogeler:
            isim = oge.find_element(By.CLASS_NAME, 'urun-adi').text
            fiyat = oge.find_element(By.CLASS_NAME, 'urun-fiyat').text
            sonuclar.append({'isim': isim, 'fiyat': fiyat})
        
        return sonuclar
    
    finally:
        driver.quit()  # Her zaman tarayıcıyı kapat!

Etik Scraping Kuralları

  • Her istekte en az 1-2 saniye bekleyin (sunucuyu yüklemeyin).
  • Sitenin robots.txt dosyasına saygı gösterin.
  • Gerçekçi User-Agent header'ı kullanın ama asla kimliğinizi gizlemeye çalışmayın.
  • Yalnızca kamuya açık veri için kullanın, kişisel verileri hedeflemeyin.
  • API varsa scraping yerine API kullanmayı tercih edin.
⚡ Performans İpucu

Büyük ölçekli scraping için asyncio + aiohttp kombinasyonu kullanın. Eşzamanlı (concurrent) isteklerle scraping hızınızı 10-50 kat artırabilirsiniz.

Sonuç ve Değerlendirme

Bu makalemizde paylaştığımız kodlar ve teknik bilgiler, sisteminizin performansını artıracak ve sizlere daha esnek bir geliştirme imkanı sunacaktır. CodeMareFi üzerinden paylaştığımız tüm içerikler, güncel yazılım standartlarına uygun olarak optimize edilmiş olup, projelerinizde güvenle kullanabileceğiniz şekilde hazırlanmıştır.

Eğer kurulum sırasında herhangi bir sorunla karşılaşırsanız, kod çalışmazsa veya sisteme ekstra özellikler eklemek isterseniz, iletişim kanallarımızdan ya da Discord sunucumuza katılarak diğer geliştirici arkadaşlarımızdan anında destek alabilirsiniz. Daha fazla ücretsiz kod paylaşımı, web tasarım rehberleri ve teknoloji makaleleri için sitemizi takipte kalmayı unutmayın. İyi kodlamalar!

0 Yorum

YORUM YAPMAK İÇİN SİSTEME SIZMANIZ GEREKİYOR

Lütfen yukarıdaki butonu kullanarak giriş yapın veya kimlik oluşturun.

Yorumlar yükleniyor...