Giriş: Neden Veri Kazıma?
Veri kazıma, web sitelerinden otomatik olarak veri toplama sürecini ifade eder. İnternet üzerindeki verilerin sürekli olarak büyüdüğü bu dijital çağda, işletmeler ve araştırmacılar için bu verileri incelemek, analiz etmek ve içgörüler elde etmek büyük bir önem taşımaktadır. Python, kullanıcı dostu yapısı ve geniş kütüphane desteği sayesinde veri kazıma işlemlerinde yaygın olarak kullanılmaktadır. Bu yazıda, Selenium kütüphanesini kullanarak Python’da veri kazıma sürecini adım adım inceleyeceğiz.
Selenium, web tarayıcılarını otomatikleştirmenizi sağlayan popüler bir kütüphanedir. Statik veri toplamanın yanı sıra, dinamik içeriklere sahip sayfalardaki verileri elde etme kabiliyeti, onu veri kazıma için ideal bir araç haline getirir. Örneğin, çoğu modern web sitesi JavaScript ile oluşturulmuş içerikler sunar; bu durumda geleneksel scraping yöntemleri yeterli olmayabilir. Selenium bu noktada devreye girerek, gerçek bir tarayıcı üzerinden siteye erişim sağlar ve verileri çekmek için gerekli olan etkileşimleri gerçekleştirebilir.
Bu yazıda, Selenium ile veri kazıma yaparken dikkat edilmesi gereken temel noktaları, temel kurulum ve yapılandırma işlemlerini detaylı bir şekilde açıklayacağız. Örnek uygulamalar ile süreci kolayca takip etmenizi sağlayacağız.
Selenium ve Kurulum Adımları
Selenium’u Python projenize eklemek için ilk adım, gerekli kütüphaneleri yüklemektir. Bunu pip komutunu kullanarak gerçekleştirebilirsiniz. Aşağıda, Selenium kütüphanesini ve gerekli web tarayıcısı sürücüsünü yüklemek için gerekli komutları bulabilirsiniz:
pip install selenium
Python’da Selenium kullanmak için, belirli bir web tarayıcısının sürücüsüne de ihtiyacınız var. Örneğin, Chrome kullanıyorsanız, ChromeDriver’ı indirip sisteminize kurmanız gerekecek. Bu sürücüyü ChromeDriver İndirme Sayfası’ndan indirebilirsiniz. İndirilen dosyayı uygun bir dizine yerleştirip, sistem PATH’ine eklemelisiniz.
Kurulumdan sonra Selenium ile basit bir örnek üzerinden başlayalım. Aşağıdaki kod parçası, Selenium ile bir web sayfasını açmak için kullanabileceğiniz temel bir yapıdır:
from selenium import webdriver
driver = webdriver.Chrome('/path/to/chromedriver')
driver.get('https://www.example.com')
Yukarıdaki kodda, Chrome tarayıcısını açarak belirtilen URL’yi ziyaret ediyoruz. Gelecek adımlarda, bu tarayıcı aracılığıyla sayfadaki verileri nasıl çekebiliriz, bunu inceleyeceğiz.
Web Sayfasından Veri Çekmek
Bir web sayfası yüklendiğinde, sayfanın HTML yapısını incelemek veri çekme sürecinde önemlidir. Selenium, sayfanın HTML içeriğine erişim sağlar. Örneğin, bir web sayfasındaki belirli bir elementin metnini almak için kullanılan yöntemlerden biri şu şekildedir:
element = driver.find_element_by_id('element_id')
print(element.text)
Bu kod, belirtilen ‘element_id’ değerine sahip HTML elementini bulur ve metnini ekrana yazdırır. HTML içeriği üzerinde çalışabilmek için, diğer element bulma yöntemlerini de kullanabilirsiniz. Örneğin:
find_element_by_class_name('class_name')
– Belirli bir sınıf adına göre öğeyi bulur.find_element_by_xpath('//div[@class="class_name"]')
– XPath kullanarak öğeyi bulur. Bu, daha karmaşık ve ayrıntılı sorgular yapmanıza olanak tanır.
Selenium ile sayfadaki tüm verileri çekmek için döngüler kullanarak birçok öğeyi almak mümkündür. Örneğin, bir liste içerisindeki tüm öğeleri toplayabiliriz:
items = driver.find_elements_by_class_name('item_class')
for item in items:
print(item.text)
Yukarıdaki kod, ‘item_class’ sınıfına sahip tüm öğeleri bulur ve her birinin metnini yazdırır. Bu işlem, veri kazıma işlemlerinde sıkça kullanılan bir yöntemdir.
Dinamik İçeriklerle Çalışma
Dinamik web sayfaları, kullanıcı etkileşimlerine veya belirli koşullara göre içeriklerini değiştiren sayfalardır. Bu tür sayfalarda veri elde etmek, biraz daha karmaşık olabilir. Örneğin, bir butona tıklayıp, sonrasında engellenen içerikleri açılması gerekebiliyor. Selenium ile bu tür etkileşimleri gerçekleştirebilirsiniz.
Bir butona tıklamak için;
button = driver.find_element_by_id('button_id')
button.click()
Kod, belirtilen ‘button_id’ değerine sahip butona tıkladıktan sonra sayfanın yeni içeriği yüklenmesine olanak tanır. Bu aşamadan sonra, yeni yüklenen içerikten veri çekmek oldukça kolaydır. Dinamik sayfalarla çalışırken, sayfanın tam olarak yüklendiğinden emin olmanız gerektiğinden, bekleme işlemlerini kullanmak önemlidir. Bunun için WebDriverWait
sınıfını kullanabilirsiniz:
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.ID, 'loaded_element_id')))
Bu yöntemle belirli bir element yüklendiğinde kodun devam etmesini sağlamak için bekleme süresini ayarlayabilirsiniz. Bu, dinamik web sayfalarında veri kazıma yaparken çok yararlı bir tekniktir.
Verileri Kaydetme ve Analiz Etme
Selenium ile elde edilen verileri, analiz etmek veya başka sistemlere entegre etmek için veritabanı veya dosya sistemine kaydetmek önemlidir. Bu noktada, Python’un sunduğu dosya işlemleri ve veri tabanı bağlama kütüphaneleri kullanılabilir. Örneğin, verileri bir CSV dosyasına kaydetmek için csv
kütüphanesini kullanabilirsiniz:
import csv
with open('data.csv', mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Column1', 'Column2']) # Başlıklar
for item in items:
writer.writerow([item.property1, item.property2])
Bu kod, ‘data.csv’ adında bir dosya oluşturup, başlıklarla birlikte verileri yazmaktadır. Aynı mantıkla SQLite veya PostgreSQL gibi veritabanlarına da veri kaydedebilirsiniz. Verileri analiz etmek için NumPy veya Pandas kütüphaneleri ile birlikte bu verileri işlemeniz mümkündür.
Örneğin, Pandas ile verileri DataFrame’e dönüştürebilir ve çeşitli analizler yapabilirsiniz:
import pandas as pd
df = pd.read_csv('data.csv')
# DataFrame ile analiz işlemleri
Örnek Uygulama: Film Verileri Kazıma
Şimdi, Selenium ile bir örnek uygulama oluşturarak belirli bir web sayfasından film verilerini kazıyacağımız bir senaryo üzerinde çalışalım. Bu örnekte, IMDb gibi bir web sayfasındaki film adlarını ve yıldız sayısını alacağız. Önerilen sayfanın HTML yapısını özelleştirerek öğeleri bulacağız.
Başlayacağımız sırada ilk adım, yukarıda belirttiğimiz gibi tarayıcıyı açmak ve sayfayı yüklemektir:
driver = webdriver.Chrome('/path/to/chromedriver')
driver.get('https://www.example-imdb.com/top-movies')
Yüklendikten sonra, sayfadaki film isimlerini ve yıldız sayılarını bulmak için gerekli elementleri seçelim:
movies = driver.find_elements_by_class_name('movie-title')
stars = driver.find_elements_by_class_name('star-rating')
data = []
for i in range(len(movies)):
title = movies[i].text
star = stars[i].text
data.append({'title': title, 'star': star})
Yukarıdaki kod, her bir filmi ve ona ait yıldız sayısını alarak bir listeye ekler. Ardından bu verileri bir CSV dosyasına kaydedebiliriz:
with open('movies_data.csv', mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Title', 'Star']) # Başlıklar
for entry in data:
writer.writerow([entry['title'], entry['star']])
Yukarıda belirtildiği gibi, film verilerini kazıma işlemi ve dosyaya yazma işlemi tamamlandı. Bu örnekle birlikte, Selenium kullanarak web sayfalarından nasıl veri kazıyabileceğinizi görmüş olduk.
Sonuç ve Öneriler
Selenium ile Python’da veri kazıma, dinamik web sayfalarından bilgi toplamak için güçlü bir yöntemdir. Kullanıcı etkileşimlerini simüle edebilme yeteneği sayesinde, karmaşık ve çok katmanlı web sayfalarından veri elde etmek oldukça kolaylaşmaktadır. Bu yazıda, temel kurulumdan başlayarak, dinamik içeriklerin nasıl işleneceğine, elde edilen verilerin nasıl kullanılacağına kadar kapsamlı bir bakış sunduk.
Veri kazıma işlemleri sırasında dikkat edilmesi gereken en önemli noktalar, etik kalmak ve hedef web sitelerinin kullanım şartlarını ihlal etmemektir. Kullanılan veri türleri ve web sitelerinin robot.txt dosyaları göz önünde bulundurulmalı, gerekli izinler alınmalıdır.
Son olarak, Python ekosisteminde yeni kütüphaneler ve araçlar sürekli gelişmektedir. Bu nedenle, sürekli olarak güncel kaynaklara göz atmak ve yeni araçları denemek, veri kazıma becerilerinizi geliştirmenin en iyi yollarından biridir. Gelecek uygulamalarınızda başarılar dilerim!