Web Scraping Nedir?
Web scraping, web sitelerinden veri toplama işlemidir ve bu işlem farklı programlama dilleri ve kütüphaneleri ile gerçekleştirilebilir. Özellikle Python, web scraping için popüler bir seçimdir. Bunun en büyük sebeplerinden biri, Python’un sunduğu güçlü kütüphanelerdir. Bu yazıda, BeautifulSoup ve Requests kütüphanelerini kullanarak web scraping yapmayı öğreneceksiniz. Bu kütüphanelerin her biri, web sayfalarından veri elde etme sürecini kolaylaştırmak için özel olarak tasarlanmıştır.
Web scraping genellikle veri analizi, piyasa araştırması, fiyat takibi gibi uygulamalarda kullanılır. Ancak, her ne kadar yararlı olsa da, web scraping yaparken dikkatli olunmalıdır. İlk olarak, web sitelerinin kullanım şartlarını daima kontrol etmek önemlidir; bazı siteler scraping işlemlerine izin vermez ve bu tür herhangi bir faaliyet yasal sorunlara yol açabilir. İkinci olarak, web scraping yaparken sayfa yükleme sürelerine ve web sunucularının yüküne dikkat etmek, sitenin performansını etkilememek açısından önemlidir.
Python ile web scraping yapmaya başlamadan önce, gerekli kütüphaneleri yüklemek gerekiyor. Aşağıda, BeautifulSoup ve Requests kütüphanelerini Python ortamınıza nasıl yükleyebileceğinizi göstereceğim.
BeautifulSoup ve Requests Kurulumu
BeautifulSoup, HTML ve XML belgelerini işlemek için kullanılan bir Python kütüphanesidir.
Requests ise HTTP istekleri göndermek için kullanılan basit bir kütüphanedir. İki kütüphane de, veri toplama işlemini kolaylaştırmak için birlikte kullanılır. Kütüphanelerin kurulumunu gerçekleştirmek için terminal veya komut istemcisinde aşağıdaki komutları çalıştırabilirsiniz:
pip install beautifulsoup4
pip install requests
Bu komutlar, gerekli kütüphaneleri Python ortamınıza yükleyecektir. Kurulum tamamlandıktan sonra, şimdi web scraping işlemi için ilk adımımızı atabiliriz. Devam etmeden önce, çalışacağımız örnek bir web sitesine ihtiyacımız var. Bu yazıda, basit bir örnek olarak bir haber sitesinden başlık ve link verilerini çekeceğiz.
Aşağıda, örnek bir web sitesi kullanarak veri çekme sürecine geçmeden önce, bu web sitesinin HTML yapısını inceleyeceğiz. İncelememiz gereken temel öğeler, başlıkların bulunduğu <h2>
etiketleri ve bağlantılerin bulunduğu <a>
etiketleridir.
Requests ile Web Sayfasını Alma
Web scraping sürecinin ilk adımı, veriyi almak istediğiniz web sayfasını tanımlamaktır. Bu işlem, Requests kütüphanesinin get
metodu kullanılarak gerçekleştirilir. Aşağıda, bir haber sitesinden veri çekmek için örnek bir kod bulunmaktadır:
import requests
url = 'https://www.onlinemedya.com/'
response = requests.get(url)
print(response.text)
Yukarıdaki kodda, belirtilen URL’den bir istek gönderiyoruz ve alınan yanıtı response
değişkeninde saklıyoruz. Herhangi bir hata ile karşılaşmamak için, dönen yanıtın durum kodunu kontrol etmek önemlidir. Örneğin, 200 durumu başarılı bir isteği gösterirken, 404 durumu sayfanın bulunmadığını gösterir.
İsteği gönderdikten sonra, sayfanın HTML içeriğini response.text
ile alabiliriz. Bu içerik, örneklediğimiz haber sitesinin HTML yapısını taşıyan bir metin dizesidir. Şimdi bu içerikten veriyi çekmek için BeautifulSoup kütüphanesini kullanacağız.
BeautifulSoup ile HTML İçeriğini Parse Etmek
Artık web sayfasının HTML içeriğini edindiğimize göre, verileri çekmek için BeautifulSoup kütüphanesini kullanabiliriz. BeautifulSoup
nesnesi oluşturmak için HTML içeriğini ve hangi parser’ın kullanılacağını belirtmemiz gerekmektedir:
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
Bu kod parçası ile BeautifulSoup
nesnesi oluşturduk ve sayfanın HTML içeriğini parse ettik. Şimdi, sayfanın yapısını incelemek için soup
nesnesini kullanabiliriz. Örneğin, sitenin başlıklarını çekmek için aşağıdaki kodu kullanabilirsiniz:
headings = soup.find_all('h2')
for heading in headings:
print(heading.text)
Yukarıdaki kodda, find_all
metodunu kullanarak sayfadaki tüm <h2>
etiketlerini bulduk ve her birinin metin içeriğini yazdırdık. BeautifulSoup bu tür aramalarda çok etkilidir. Siz de çeşitli etiketler üzerinden veri çekmek için benzer yöntemleri kullanabilirsiniz.
Veri Çekiminde Başka Seçenekler
BeautifulSoup ile veri çekmek için sadece find_all
metodunu değil, aynı zamanda select
metodunu da kullanabilirsiniz. Bu metod, CSS seçicilerini kullanarak daha karmaşık yapılar üzerinde işlem yapmanızı sağlar. Örneğin:
links = soup.select('h2 a')
for link in links:
print(link['href'])
Bu örnekte, <h2>
etiketleri içindeki <a>
etiketlerine ulaşarak, haber başlıklarının linklerini yazdırdık. Bu, BeautifulSoup’un CSS seçicileri ve XPath benzeri yetenekleri ile daha hızlı çalışmamızı sağlar.
Ayrıca, bazı durumda veriler web sayfasında JavaScript ile dinamik olarak oluşturulabilir. Bu gibi durumlarda, Selenium gibi başka kütüphaneler kullanarak tarayıcı otomasyonu gerçekleştirmek daha etkili bir çözüm olabilir. Ancak başlangıç olarak web sayfalarında sadece HTML içeriğini çekmek için BeautifulSoup ve Requests ikilisi oldukça yeterlidir.
Veri Analizi ve Kaydetme
Verileri çektikten sonra, bunları analiz etmek veya kaydetmek isteyebilirsiniz. Örneğin, çektiğiniz başlıkları bir CSV dosyasına kaydetmek oldukça kolaydır. Bunun için Python’un csv
kütüphanesini kullanabilirsiniz:
import csv
with open('headlines.csv', mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Headline']) # Başlık satırı
for heading in headings:
writer.writerow([heading.text])
Bu kod parçacığı, çektiğiniz başlıkları bir CSV dosyasına kaydetmenizi sağlıyor. Bu şekilde, belirli bir veriyi daha sonra analiz etmek, başka projeler için kullanmak veya paylaşmak için erişebileceğiniz bir formatta saklamış oluyorsunuz.
Ayrıca verileri bir veritabanına kaydetmek isterseniz, SQLite veya PostgreSQL gibi veritabanları ile de entegre olabilirsiniz. Python’un sqlite3
modülü, SQLite ile çalışmayı oldukça kolaylaştırır ve veri saklama ihtiyaçlarınızı karşılar.
Önemli Noktalar ve En İyi Uygulamalar
Web scraping yaparken dikkat etmeniz gereken bazı önemli noktalar şunlardır:
- Sayfanın Yapısını İnceleyin: Çekmek istediğiniz verilerin bulunduğu etiketlerin ve yapıların HTML kodu üzerinde gözden geçirilmesi önemlidir. Bu şekilde, doğru etiketleri kullanarak hedef verilerinizi doğru bir şekilde almak mümkün olur.
- İstek Sıklığına Dikkat Edin: Aynı siteye çok fazla istek göndererek sunucunun yükünü artırmak, sitenin size erişimi engellemesine neden olabilir. Sayfalar arasında bekleme süreleri ekleyerek daha nazik bir scraping işlemi gerçekleştirebilirsiniz.
- Yasal Durumları Kontrol Edin: Her web sitesinin kullanım şartları farklıdır ve scraping yapmanıza izin vermiyor olabilir. Bu nedenle, scraping işlemine başlamadan önce bu noktayı da kontrol etmek önemlidir.
Unutmayın, web scraping yaparken yalnızca verileri toplamak değil, aynı zamanda bu verilerin etik bir şekilde kullanılması da çok önemlidir.
Sonuç
Bu yazıda, BeautifulSoup ve Requests kütüphanelerini kullanarak Python ile basit bir web scraping örneği gerçekleştirdik. Web sayfalarından veri çekmenin ne kadar kolay olduğunu gördük. Bu temel bilgilerle, kendi projelerinizde web scraping yöntemlerini uygulayabilir ve verileri alarak analiz edebilirsiniz.
Yazının sonunda, farklı web sitelerinden daha fazla veri çekme ve elde edilen verileri kullanma fırsatına sahip olabileceğinizi unutmayın. Geliştirici topluluğunda paylaşacağınız projeler, başkalarına ilham verebilir ve birlikte öğrenme fırsatlarını artırabilir.
Python ile web scraping konusunda daha fazla bilgiye ihtiyaç duyuyorsanız, forumları takip etmenizi ve yeni kütüphaneleri keşfetmenizi öneririm. Gelişen bu alanda sürekli öğrenerek kendinizi geliştirmeye devam edin!