Selenium ile Dinamik Web Sitelerinden Veri Çekme
21 viewsSelenium ile Dinamik Web Sitelerden Veri Çekme
Web sitelerinin çoğu günümüzde JavaScript kullanarak içerik yükler. Bu tür dinamik sitelerde requests + BeautifulSoup yöntemi genellikle yetersiz kalır. İşte bu noktada Selenium devreye girer.
Selenium, gerçek bir tarayıcıyı kontrol ederek web sitelerini otomatikleştirmenizi sağlar. Bu sayede JavaScript ile yüklenen içerikleri de çekebilirsiniz.
Selenium Ne Zaman Kullanılmalıdır?
| Durum | Önerilen Araç |
|---|---|
| Statik HTML siteleri | requests + BeautifulSoup |
| JavaScript ile içerik yükleyen siteler | Selenium |
| Login gerektiren siteler | Selenium |
| Karmaşık etkileşimler (tıklama, kaydırma) | Selenium |
| Yüksek hız gereken projeler | requests + aiohttp |
Selenium Kurulumu
Bash
pip install selenium webdriver-manager
Basit Selenium Örneği
Aşağıdaki örnekte Hacker News sitesinden başlıkları çekiyoruz:
Python
from selenium import webdriver from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service chrome_options = Options() chrome_options.add_argument("--headless") # Tarayıcıyı görünmez çalıştır driver = webdriver.Chrome( service=Service(ChromeDriverManager().install()), options=chrome_options ) driver.get("https://news.ycombinator.com/") basliklar = driver.find_elements("css selector", ".titleline") for baslik in basliklar[:10]: print(baslik.text) driver.quit()
Sayfa Yüklenmesini Bekleme Yöntemleri
Dinamik sitelerde içerik hemen yüklenmeyebilir. Bu yüzden bekleme yöntemleri kullanmak önemlidir.
1. Implicit Wait (Genel Bekleme)
Python
driver.implicitly_wait(10) # Tüm elementler için 10 saniye bekle
2. Explicit Wait (Belirli Element İçin Bekleme)
Python
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".titleline")))
Selenium ile Proxy Kullanımı
Selenium’da proxy kullanmak için şu şekilde ayar yapabilirsiniz:
Python
chrome_options.add_argument('--proxy-server=http://proxy_ip:proxy_port')
Daha gelişmiş proxy yönetimi için Proxy SwitchyOmega eklentisi veya selenium-wire kütüphanesi kullanılabilir.
Selenium’un Avantajları
- JavaScript ile yüklenen içerikleri çekebilir
- Gerçek tarayıcı gibi davranır
- Sayfa etkileşimleri (tıklama, form doldurma, kaydırma) yapılabilir
- Dinamik sitelerde daha güvenilirdir
Selenium’un Dezavantajları
- requests yöntemine göre daha yavaştır
- Daha fazla sistem kaynağı tüketir
- Headless modda bile bazı siteler tarafından tespit edilebilir
- Kod yapısı daha karmaşıktır
Sonuç
Selenium, özellikle JavaScript ağırlıklı modern web sitelerinden veri çekmek için güçlü bir araçtır. requests + BeautifulSoup ile çözülemeyen projelerde Selenium kullanmak çoğu zaman en iyi çözümdür.
Ancak performans ve hız önemliyse, daha hafif alternatifler (Playwright, Scrapy) de değerlendirilebilir.
Bir sonraki makalemizde E-ticaret Sitelerinden Veri Toplama konusunu detaylı olarak inceleyeceğiz.
Hangi proxy türünün sizin projenize daha uygun olduğunu öğrenmek isterseniz, bizimle iletişime geçebilirsiniz.
ProxymoTR - Premium Proxy Services
