Web Scraping Nedir?
Web scraping, internet üzerindeki verileri otomatik bir şekilde toplama sürecidir. Bu işlem, web sayfalarındaki içeriklerin programlı bir şekilde alınmasını ve bu verilerin işlenmesini sağlar. Özellikle veri bilimci ve yazılım geliştiricileri için değerli bir tekniktir çünkü çeşitli web sitelerinden veri çekme ihtiyacı sıklıkla ortaya çıkmaktadır. Örneğin, fiyat karşılaştırma siteleri, haber toplama uygulamaları ve daha fazlası için veri toplamak amacıyla web scraping sıkça kullanılmaktadır.
Python, web scraping için oldukça popüler bir dil haline gelmiştir. Bunun başlıca sebepleri arasında, kolay öğrenimi, geniş kütüphane desteği ve esnekliği bulunuyor. BeautifulSoup ve Requests gibi kütüphaneler, web sayfalarından veri çekmek ve bu verileri işlemek için kullanışlı araçlar sunmaktadır. Yeni başlayanlardan ileri seviye geliştiricilere kadar herkes için web scraping oldukça kullanışlıdır.
Bu yazıda, Python ile basit bir web scraper oluşturmayı öğreneceğiz. Elde edeceğimiz bilgiler, farklı sitelerden veri toplama ve bu verileri kendi projelerinizde kullanma noktasında size yardımcı olacaktır. Hadi başlayalım!
Gerekli Kütüphaneleri Yükleme
Web scraping için öncelikle gerekli olan Python kütüphanelerini yüklemelisiniz. En yaygın kullanılan kütüphanelerden biri ‘Requests’ kütüphanesidir; bu kütüphane, HTTP istekleri göndermemize olanak tanır. Diğer önemli kütüphane ise ‘BeautifulSoup’dur; bu kütüphane, HTML ve XML belgelerini işlemek için kullanılır. Her iki kütüphaneyi de pip ile yükleyebilirsiniz:
pip install requests beautifulsoup4
Bu komut, bilgisayarınıza gerekli kütüphaneleri yükleyecektir. Eğer bu kütüphaneleri daha önce yüklediyseniz, bu adımı atlayabilirsiniz. Artık web scraping işlemlerimizi gerçekleştirmek için hazırız.
Örneğin, aşağıdaki komutları terminal veya komut istemcisi üzerinden çalıştırarak yüklemeleri gerçekleştirebilirsiniz:
pip install requests
pip install beautifulsoup4
Bu kütüphaneler yüklendikten sonra, basit bir web scraper oluşturmaya başlayabiliriz.
Basit Bir Web Scraper Oluşturma
Artık gerekli kütüphanelerimize sahip olduğumuza göre, basit bir web scraper yazmaya başlayabiliriz. Örneğin, bir haber sitesinden başlıkları çekmek istiyoruz. İlk önce sayfayı indirip, HTML içeriğini almak için Requests kütüphanesini kullanacağız:
import requests
url = 'https://www.example.com/news'
response = requests.get(url)
html_content = response.text
Yukarıda, hedef sitemizin URL’sini ‘url’ değişkenine atıyoruz ve ardından ‘requests.get()’ fonksiyonu ile bu adrese bir GET isteği gönderiyoruz. Dönen yanıtta, HTML içeriğini ‘html_content’ değişkenine alıyoruz. Bu işlem, web sayfasının içeriklerini çekmemize yardımcı oluyor.
Şimdi, BeautifulSoup kullanarak bu HTML içeriğini parçalayıp, ilgi alanımıza göre veri çekmeye başlayalım:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
titles = soup.find_all('h2', class_='title')
for title in titles:
print(title.text)
Yukarıdaki kodda, ‘BeautifulSoup’ nesnesi oluşturarak HTML içeriğini parse ettik. ‘soup.find_all()’ metodu ile ‘h2’ etiketine sahip ve ‘title’ sınıfına ait olan tüm başlıkları buluyoruz. Son olarak, döngü aracılığıyla bu başlıkları ekrana yazdırıyoruz. Bu yöntemle hedeflediğimiz verileri elde etmiş oluyoruz.
Hatalı Senaryoları Ele Alma
Web scraping yaparken bazen beklenmedik hatalarla karşılaşabilirsiniz. Örneğin, istek atarken zaman aşımı veya siteye erişim kısıtlamalarıyla karşılaşabilirsiniz. Bu tür durumları ele almak için kodunuza hata kontrolü eklemeniz oldukça önemlidir. Aşağıda, istek gönderme bölümüne basit bir hata kontrolü eklemeyi inceleyeceğiz:
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # Hata kodlarını kontrol et
except requests.exceptions.RequestException as e:
print(f'Bir hata oluştu: {e}')
Bu kod parçasıyla, istek gönderilirken oluşabilecek hataları try-except bloğu sayesinde yakalıyoruz. Eğer istek başarılıysa, devam ediyoruz. Aksi takdirde, kullanıcıya bir hata mesajı ile durumu belirtiyoruz. Bu yöntemle, scraper’ınızın güvenilirliğini artırabilirsiniz.
Ek olarak, özellikle büyük veri çekimlerinde periyodik beklemeler (sleep) ekleyerek hedef siteyi aşırı yüklemekten kaçınmalısınız. Bu, web scraping esnasında etik bir uygulamadır ve web siteleri tarafından takdir edilir:
import time
time.sleep(2) # 2 saniye bekleme süresi
Veri İşleme ve Saklama
Çektiğimiz verileri işlemek ve saklamak, web scraping işleminin önemli bir parçasıdır. Gerekli verileri almakla kalmayıp, bu verileri uygun bir şekilde kaydetmek de gerekmektedir. Çektiğimiz başlıkları bir listeye veya CSV dosyasına kaydedebiliriz. Örneğin:
import csv
with open('news_titles.csv', mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Title']) # Başlık satırı
for title in titles:
writer.writerow([title.text])
Yukarıdaki kodda, çektiğimiz başlıkları ‘news_titles.csv’ isimli bir dosyaya kaydediyoruz. Bu, verilerinizi düzenli bir şekilde saklamanızı sağlar. CSV dosyası formatının popülaritesi, verilerin farklı programlar arasında kolayca taşınmasını sağlayarak büyük bir avantaj sunmaktadır.
Ek olarak, veri tabanlarına veri kaydetmek istiyorsanız, SQLite veya MongoDB gibi veritabanlarını da kullanabilirsiniz. Bu tür veritabanları, büyük veri kümeleriyle daha etkili bir şekilde çalışmanıza imkan tanır.
Sonuç ve Öneriler
Web scraping, birçok farklı alanda veri toplamak için etkili bir yöntemdir. Python’da temel bir web scraper oluşturarak, bu konudaki ilk adımlarınızı atmış oldunuz. Yarın bir proje ile bu bilgi ve becerilerinizi daha ileri boyutlara taşıyabilirsiniz. Web scraping yaparken, alınan verilerin intihal veya veri hırsızlığını önleyecek şekilde kullanıldığından emin olun.
Ayrıca, web scraping yaptığınız sitelerin robots.txt dosyalarını kontrol etmeyi unutmayın. Bu dosya, sitenin hangi bölümlerinin taranmasının veya indekslenmesinin yasak olduğunu belirtir ve bu kurallara uymak oldukça önemlidir.
Bir sonraki adım olarak, scraping deneyiminizi genişletmek için daha karmaşık projelere geçmeyi düşünebilirsiniz. Örneğin, verileri analiz ederken Python’daki veri analizi kütüphanelerini kullanmak veya birden fazla sayfadan veri çekmek için döngüler ve listeler ile çalışmak, becerilerinizi daha da pekiştirecektir.