Python Scrapy ile Web Scraping Örnekleri

Web Scraping Nedir ve Neden Önemlidir?

Web scraping, internet üzerindeki verilerin otomatik olarak toplanması ve çıkarılması işlemidir. Günümüzde birçok firma ve geliştirici, çeşitli nedenlerle web scraping tekniklerini kullanarak büyük miktarda veri elde etmektedir. Veri analizi, rekabet analizi, pazar araştırması ve içerik toplama gibi birçok alanda yararlı bir araçtır. Özellikle büyük veri çağında, doğru bilgilere ulaşmak, işletmelerin başarısı için kritik bir öneme sahiptir.

Web Scraping, genellikle website içeriğini analiz etmek ve anlamak, belirli bilgiler toplamak için kullanılır. Ancak dikkat edilmesi gereken önemli bir nokta, scraping işlemlerinin hukuki sınırlar içinde yapılması gerektiğidir. Her web sitesi, scraping yasaklarını belirten istemci tarafı kurallarına sahip olabilir. Bu nedenle, geliştiricilerin web sitelerinin robots.txt dosyalarını kontrol etmesi önemlidir.

Python, web scraping işlemleri için oldukça popüler bir dil haline gelmiştir. Bunun nedeni, Python’un sunduğu güçlü kütüphaneler ve topluluk desteğidir. Bu yazıda, Python’un Scrapy kütüphanesini kullanarak web scraping yapmanın basit ama etkili bir yolunu keşfedeceğiz.

Scrapy Nedir?

Scrapy, Python tabanlı açık kaynaklı bir çerçevedir ve web scraping ve web tarama amacıyla geliştirilmiştir. Web sitelerinden veri toplamak için geliştirilmiş bir framework olmasının yanı sıra, yüksek performansı ve esnek yapısıyla da dikkat çekmektedir. Scrapy, verilerin toplanmasının yanı sıra, bu verilerin işlenmesi ve depolanması için gereken çeşitli araçlar sunmaktadır.

Scrapy sayesinde, çok sayıda sayfayı aynı anda çekebilir, veri formatlarını yönetebilir ve verileri farklı formatlarda (CSV, JSON, XML vb.) dışa aktarabilirsiniz. Scrapy, asenkron yapısıyla optimize edilmiş bir tarama işlemi sunarken, bu da onu veri çekimi için ideal bir seçim haline getirmektedir.

Scrapy, kullanıcılarına birçok faydalı özellik sunar. Bunlar arasında, kurallı bir şekilde veri toplayabilme, site içi navigasyonu otomatikleştirme, hata yönetimi ve otomatik yeniden deneme gibi yetenekler bulunmaktadır. Bu özellikler, Scrapy’yi web scraping alanında güçlü bir araç haline getirmektedir.

Scrapy ile Basit Bir Web Scraping Örneği

Şimdi, Scrapy kullanarak basit bir web scraping uygulaması geliştireceğiz. Bu örnekte, bir haber sitesinden başlıkları ve linkleri toplayacağız. İlk adım olarak, Scrapy kütüphanesini bilgisayarınıza yüklemeniz gerekiyor. Bunu yapmak için terminal veya komut istemcisine şu komutu yazın:

pip install scrapy

Yükleme tamamlandıktan sonra, yeni bir Scrapy projesi oluşturun. Bu işlem için aşağıdaki komutu kullanabilirsiniz:

scrapy startproject haber_scrapy

Bu komut, ‘haber_scrapy’ adında bir proje oluşturacak ve bu proje ile bağlantılı belirli dizinleri kuracaktır.

Spider Oluşturma

Scrapy projelerinde veriyi toplamak için bir ‘spider’ oluşturmalıyız. Spider, hangi web sitesinden bilgi toplayacağımızı belirten sınıflardır. Proje dizinine giderek ‘spiders’ klasörüne yeni bir Python dosyası ekleyelim ve ‘haber_spider.py’ adını verelim:

import scrapy

class HaberSpider(scrapy.Spider):
    name = 'haber'
    start_urls = ['http://example.com/haber']  # Veri almak istediğiniz URL'i buraya ekleyin.

    def parse(self, response):
        for haber in response.css('div.haber'):  # Örnek bir CSS seçici
            yield {
                'title': haber.css('h2.title::text').get(),
                'link': haber.css('a::attr(href)').get(),
            }

Burada ‘start_urls’ değişkeni, Scrapy’nin veri toplayacağı URL’leri içerir. ‘parse’ metodu ise, gelen yanıt üzerinden verileri çıkarmak için kullanılır. Her ‘haber’ için başlık ve bağlantı bilgilerini elde ediyoruz.

Verileri Kaydetme

Veriyi topladıktan sonra, bunu belirli bir formatta kaydetmek için Scrapy’de birkaç seçenek bulunmaktadır. Örneğimizde verileri JSON formatında kaydedebiliriz. Bunun için terminalde, projenizin ana dizininde şu komutu çalıştırabilirsiniz:

scrapy crawl haber -o haberler.json

Bu komut ile, ‘haber’ adındaki spider’ı çalıştıracak ve elde edilen verileri ‘haberler.json’ dosyasına kaydedecektir. JSON dosyası, verilerinizi kolayca gözden geçirmenizi ve başka projelerde kullanmanızı sağlar.

Scrapy ile İleri Seviye Teknikler

Scrapy ile basit scraping işlemleri gerçekleştirdiğimiz örneği ile birlikte, şimdi ileri seviye tekniklere de göz atalım. Web scraping yaparken bazen daha fazla kontrol ve düzenleme gereksinimi duyabilirsiniz. Bu nedenle Scrapy’nin sunduğu bazı ileri seviye özellikleri tanıtacağım.

Öncelikle, Scrapy ile form verilerini doldurup ve gönderim yapabiliriz. Özellikle bazı sitelerde, oturum açmak veya belirli formları doldurmak zorunda kalabilirsiniz. Scrapy, bu durumlar için ‘FormRequest’ sınıfını kullanmanızı sağlar. Bu sınıf sayesinde otomatik olarak form elemanlarını doldurup gönderim yapabilirsiniz.

def login(self):
    return scrapy.FormRequest(url='http://example.com/login',
                                formdata={'username': 'kullanici_adi', 'password': 'sifre'},
                                callback=self.after_login)

def after_login(self, response):
    # Giriş işlemi sonrası yönlendirilen sayfa

Bir diğer önemli özellik ise ‘item pipelines’ kullanmaktır. Bu, verinin toplandıktan sonra işlenmesi için kullanılır. Verilerin doğruluğunu kontrol etmek, temizlemek ya da veritabanına kaydetmek için doğrudan scrapper’dan ayrı bir yapı oluşturmak, kodunuzu daha düzenli hale getirebilir.

Örneğin, topladığımız haberleri belirli bir kriterle filtrelemek ve yalnızca belli başlıkların kaydedilmesini sağlamak için bir pipeline oluşturabiliriz. Bu özellikler sayesinde, daha karmaşık ve düzenli scraping projeleri geliştirebilirsiniz.

Sonuç ve Öneriler

Scrapy, web scraping işlemleri için güçlü ve esnek bir kütüphanedir. Yukarıda sunduğumuz örnek, Scrapy’nin temel özelliklerinden bazılarını ve kullanımını göstermektedir. Bununla birlikte, Scrapy’nin kullanımı konusunda derinlemesine bilgi sahibi olmak için kendi projelerinizi geliştirerek pratik yapmanızı öneririm.

Geliştirdiğiniz scraperları test etmek, hata ayıklamak ve düzenli olarak güncellemek, işinizi kolaylaştıracaktır. Ayrıca, verilerinizi kaydedeceğiniz formatı ve mekanizmayı dikkatlice seçmeniz de verimliliğinizi artıracaktır.

Unutmayın ki her web scraping projesi benzersizdir ve belirli kurallara, geliştirme pratiklerine ve etik kurallara uygun bir şekilde yapılmalıdır. Scrapy’nin dökümantasyonu ve topluluk forumları, öğrenmenizi desteklemek ve karşılaştığınız sorunlara çözümler bulabilmek adına değerli kaynaklardır.

Scroll to Top