Web sitelerinden veri toplamak, yaygın olarak web kazıma olarak bilinen bu teknik birçok proje için pratiktir. BeautifulSoup gibi kütüphaneler temel HTML ile çalışmak için harikadır, ancak sayfalar içeriği göstermek için yoğun şekilde JavaScript’e dayandığında genellikle zorlanırlar. İşte tam bu noktada Selenium devreye girer.
Bu rehberde, web sitelerini etkili şekilde kazımak için Selenium’u Python ile nasıl kullanacağınızı öğreneceksiniz.
Önce Şunu Bilin — Selenium Nedir?
Selenium, web uygulamalarını test etmek için tasarlanmış bir tarayıcı otomasyon çerçevesidir. Chrome veya Firefox gibi gerçek bir tarayıcıyı kontrol ederek gerçek kullanıcı davranışını simüle eder. Bu sayede diğer araçların baş edemediği JavaScript ile oluşturulan içeriği işleyebilir.
Bu, Selenium’u etkileşimli web sitelerinden, formlardan, sonsuz kaydırmalardan ve daha fazlasından içerik kazımak için harika bir çözüm yapar.
Selenium Nasıl Kurulur?
Başlamak için Selenium’u pip ile kurduğunuzdan emin olun:
pip install selenium
WebDriver Nasıl Kurulur?
Selenium, tarayıcıyla iletişim kurmak için bir WebDriver gerektirir. İşte Chrome kullanan basit bir örnek:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service("/path/to/chromedriver")
driver = webdriver.Chrome(service=service)
Tarayıcıyı pencere açmadan çalıştırmak istiyorsanız (sunucularda kullanışlıdır), headless modunu etkinleştirin:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
Sayfadaki Öğeler Nasıl Bulunur?
HTML öğelerini bulmak için farklı stratejiler kullanabilirsiniz:
from selenium.webdriver.common.by import By
element = driver.find_element(By.CLASS_NAME, "product-title")
Diğer konumlandırıcı seçenekleri:
By.IDBy.TAG_NAMEBy.CSS_SELECTORBy.XPATH
JavaScript’in Yüklenmesini Bekleme
time.sleep() kullanmak yerine Selenium, WebDriverWait ile akıllı bekleme destekler:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "content"))
)
JavaScript Çalıştırma
Sayfayı kaydırmanız veya yavaş yüklenen öğeleri tetiklemeniz gerekiyorsa JavaScript çalıştırabilirsiniz:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Ekran Görüntüsü Alma
Mevcut görünümün ekran görüntüsünü şu şekilde alabilirsiniz:
driver.save_screenshot("screenshot.png")
Sayfalandırma İşleme
Birden fazla sayfayı kazımak için bağlantılar arasında döngü kurabilir veya bir “Sonraki” düğmesiyle etkileşim kurabilirsiniz:
next_button = driver.find_element(By.LINK_TEXT, "Next")
next_button.click()
Veri Dışa Aktarma
Kazıdığınız verileri CSV dosyasına kaydetmek için Pandas kütüphanesini kullanabilirsiniz:
import pandas as pd
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)
Tuşlarla Kaydırma
PAGE_DOWN veya END gibi tuşlara basmayı simüle etmek için:
from selenium.webdriver.common.keys import Keys
body = driver.find_element(By.TAG_NAME, "body")
body.send_keys(Keys.END)
Görüntüleri ve Diğer Kaynakları Engelleme
Kazımayı hızlandırmak ve kaynak kullanımını azaltmak için:
driver.execute_cdp_cmd("Network.setBlockedURLs", {"urls": ["*.jpg", "*.png"]})
Selenium Diğer Araçlarla Nasıl Karşılaştırılır?
| Araç | JavaScript Desteği | Hız | İdeal Kullanım Alanı |
|---|---|---|---|
| Selenium | Tam | Orta | Etkileşimli/dinamik sayfalar |
| BeautifulSoup | Yok | Hızlı | Statik HTML kazıma |
| Scrapy | İsteğe bağlı (Selenium aracılığıyla) | Çok hızlı | Büyük ölçekli kazıma projeleri |
| Puppeteer | Tam (yalnızca Node.js) | Orta | Headless Chromium tabanlı kazıma |
Selenium Ne Zaman Kullanılmalı?
Selenium’u şu durumlarda tercih edin:
- Web sitesi büyük ölçüde JavaScript’e dayanıyorsa
- Kullanıcı etkileşimlerini (tıklama, kaydırma ve giriş) simüle etmeniz gerekiyorsa
- Küçük veya orta ölçekli bir kazıma görevi üzerinde çalışıyorsanız
Daha büyük veya daha hızlı kazıma işleri için Scrapy gibi araçları veya residential proxy’ler, CAPTCHA ve JavaScript’i sizin için halleden özel API’leri değerlendirin.
Sonuç
Selenium, Python kullanarak dinamik web sitelerini kazımak için mükemmel bir seçenektir. Kurulumdan sonra karmaşık sayfalardan içerik çıkarmanıza olanak tanır. En hızlı araç olmasa da gerçek bir tarayıcıyı otomatikleştirme yeteneği onu son derece esnek kılar.