Web’den veri çekmek yazımızda, bir web sitesinin size sunduğu düzenli bir API’den veri almayı öğrenmiştik. Ama gerçek dünyada çoğu site size böyle kibarca hazır bir veri kapısı sunmaz — istediğiniz bilgi, sıradan bir HTML sayfasının içine gömülü durur. İşte tam bu noktada devreye giren teknik: web kazıma (web scraping).
Web Kazıma Nedir?
Web kazıma, bir web sayfasının HTML içeriğini programatik olarak indirip, içinden ihtiyacınız olan veriyi (bir ürün fiyatı, bir haber başlığı, bir tablo) ayıklama işlemidir. Python dünyasında bunun en yaygın ve öğrenmesi en kolay kombinasyonu: sayfayı indirmek için requests, indirilen HTML’i “anlamlı” hâle getirmek için ise BeautifulSoup kütüphanesi.
Basit Bir Örnek
python
import requests
from bs4 import BeautifulSoup
url = "https://ornek-site.com/haberler"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# Tüm başlıkları (h2 etiketleri) bul
basliklar = soup.find_all("h2")
for baslik in basliklar:
print(baslik.text.strip())Burada requests.get() sayfanın ham HTML kodunu indirir; BeautifulSoup bu kodu bir ağaç yapısına dönüştürür ve find_all("h2") gibi metotlarla belirli etiketleri (tag) kolayca bulmanızı sağlar. Bu, Python’da liste ve döngüleri kullanarak öğrendiğiniz mantığın doğrudan bir uzantısı — sadece bu sefer döngü, bir HTML sayfasının elemanları üzerinde geziniyor.
Etiketleri ve Sınıfları Hedeflemek
Gerçek sayfalarda genelde tek bir etiket türü yetmez; belirli bir class veya id özelliğine sahip elemanları hedeflemeniz gerekir:
python
# class="fiyat" olan tüm div'leri bul
fiyatlar = soup.find_all("div", class_="fiyat")
for fiyat in fiyatlar:
print(fiyat.text.strip())Bir sayfanın hangi etiket ve sınıfları kullandığını görmek için tarayıcınızda sağ tıklayıp “İncele” (Inspect) seçeneğini kullanabilirsiniz — bu, kazıma yazmadan önce atmanız gereken ilk adımdır.
Toplanan Veriyi Kaydetmek
Kazıdığınız veriyi genelde bir liste ya da sözlükte biriktirip, dosyaya yazarak ya da pandas ile bir DataFrame’e dönüştürerek analiz edilebilir hâle getirirsiniz:
python
import pandas as pd
veri = {"baslik": basliklar_listesi, "fiyat": fiyatlar_listesi}
df = pd.DataFrame(veri)
df.to_csv("sonuclar.csv", index=False)Kırılgan Bir Yöntem: Neden Hata Yönetimi Şart?
Web kazıma, API kullanmaktan çok daha kırılgandır — çünkü bir sitenin HTML yapısı, herhangi bir tasarım güncellemesiyle değişebilir ve kodunuz aniden çalışmaz hâle gelebilir. Bu yüzden try/except ile hata yakalamayı öğrendiğiniz konuyu burada mutlaka uygulamalısınız — beklenmeyen bir sayfa yapısı, tüm scriptinizi çökertmemeli.
Etik ve Yasal Sınırlar: Her Site Kazınabilir mi?
Bu, teknik bir soru kadar önemli bir sorumluluk sorusu. Her web sitesinin kök dizininde bulunan robots.txt dosyası, hangi bölümlerin otomatik botlar tarafından taranabileceğini belirtir. Buna uymak yasal bir zorunluluk olmasa da güçlü bir etik beklentidir ve bazı ülkelerde mahkeme kararlarına konu olmuştur. Ayrıca:
- Sitenin kullanım şartlarını (Terms of Service) kontrol edin; pek çok site otomatik veri toplamayı açıkça yasaklar.
- Sunucuya kısa sürede çok fazla istek göndermeyin — normal bir kullanıcı gibi davranın, isteklere gecikme ekleyin.
- Kişisel veri (isim, e-posta, telefon) topluyorsanız, Türkiye’de KVKK, Avrupa’da GDPR gibi düzenlemeler devreye girer.
Python’un standart kütüphanesindeki urllib.robotparser modülü, bir sitenin robots.txt kurallarını otomatik olarak kontrol etmenizi sağlar — bu da sorumlu bir kazıma script’inin ilk satırlarından biri olmalıdır.
Ne Zaman API’yi, Ne Zaman Scraping’i Tercih Etmeli?
Eğer hedef site resmi bir API sunuyorsa, her zaman onu tercih edin — daha stabil, daha hızlı ve yasal olarak daha net bir zemindir. Web kazıma, yalnızca API bulunmadığında başvurulacak bir “son çare” yöntemi olarak düşünülmeli.
Sonuç
BeautifulSoup, Python’da web’den veri toplamanın en erişilebilir kapısı. Ama güçlü bir araç, sorumlulukla kullanılmalı: sunucuya saygılı davranmak, kuralları okumak ve kırılgan yapısına karşı sağlam hata yönetimi kurmak, iyi bir kazıma script’ini kötü bir tanesinden ayıran şey.
Kaynak: Python Resmi Dokümantasyonu — urllib.robotparser
Daha fazla Python ve kodlama yazısı için Kodlama ve Python kategorimize göz atabilirsiniz.
İlgili yazı: requests ile API’lere Giriş
Sıkça Sorulan Sorular
Web kazıma (web scraping) nedir?
Web sayfalarındaki verileri programatik olarak otomatik toplama işlemidir. Python’da BeautifulSoup gibi kütüphanelerle bir sayfanın HTML’i çözümlenir ve istenen bilgiler (fiyat, başlık, tablo) çıkarılır.
Web kazıma yasal mı?
Duruma bağlıdır. Sitenin kullanım şartlarına ve robots.txt kurallarına uymak, kişisel veri toplamamak ve sunucuya aşırı yük bindirmemek gerekir. Mümkünse önce resmi bir API olup olmadığına bakılmalıdır.
API mi yoksa web kazıma mı tercih edilmeli?
Varsa her zaman resmi API tercih edilmelidir; daha kararlı, yasal olarak nettir ve veriyi düzenli biçimde verir. Web kazıma, resmi bir API olmadığında başvurulan bir yöntemdir.
