Web scraping (web kazıma), bir web sitesindeki verileri otomatik olarak toplayıp işlenebilir bir formata — örneğin Excel'e — aktarma işlemidir. Elle kopyala-yapıştır yaptığınız her şeyi düşünün: fiyat listeleri, ürün bilgileri, ilanlar… Python ile bunların hepsini saniyeler içinde çekebilirsiniz. Bu rehberde sıfırdan çalışan bir kazıyıcı yazacağız.
1. Gerekli kütüphaneleri kurun
İki kütüphaneye ihtiyacımız var: sayfayı indirmek için requests, HTML içinden veri ayıklamak için beautifulsoup4.
pip install requests beautifulsoup4 pandas
2. Sayfayı indirin
requests ile hedef sayfanın HTML'ini çekiyoruz. Sitelerin çoğu, tarayıcı gibi görünen bir User-Agent başlığı beklediği için onu da ekliyoruz.
import requests
url = "https://books.toscrape.com/"
headers = {"User-Agent": "Mozilla/5.0 (otomasyon-botu)"}
yanit = requests.get(url, headers=headers, timeout=15)
yanit.raise_for_status() # hata varsa burada dur
print("Sayfa indirildi:", len(yanit.text), "karakter")
3. Veriyi ayıklayın
Şimdi BeautifulSoup ile HTML'i "ayrıştırıp" istediğimiz elemanları CSS seçicileriyle buluyoruz. Aşağıdaki örnek, bir kitap listeleme sitesindeki tüm kitapların adını ve fiyatını topluyor.
from bs4 import BeautifulSoup
corba = BeautifulSoup(yanit.text, "html.parser")
kitaplar = []
for kart in corba.select("article.product_pod"):
ad = kart.h3.a["title"]
fiyat = kart.select_one("p.price_color").text
kitaplar.append({"ad": ad, "fiyat": fiyat})
print("Bulunan kitap:", len(kitaplar))
print(kitaplar[0])
Doğru CSS seçiciyi bulmak için tarayıcıda sayfaya sağ tıklayıp "İncele" (Inspect) deyin. İlgilendiğiniz metnin hangi etiket ve sınıf içinde olduğunu oradan görebilirsiniz.
4. Excel'e aktarın
Topladığımız veriyi pandas ile tek satırda Excel dosyasına yazıyoruz. İşte bu kadar — artık elle kopyalamaya son.
import pandas as pd
df = pd.DataFrame(kitaplar)
df.to_excel("kitaplar.xlsx", index=False)
print("kitaplar.xlsx kaydedildi ✔")
Dikkat edilmesi gerekenler
- Sitenin
robots.txtdosyasına ve kullanım şartlarına saygı gösterin. - İstekler arasına küçük bir bekleme (
time.sleep) koyarak sunucuyu yormayın. - Veri JavaScript ile sonradan yükleniyorsa
requestsyetmez; Selenium veya Playwright gerekir. - Çok sayfalı listelerde sayfa sayfa (pagination) dönerek tüm veriyi toplayabilirsiniz.
Gördüğünüz gibi temel bir kazıyıcı yalnızca birkaç satır. İşin zor kısmı; giriş isteyen siteler, sayfalama, engellemeler (captcha, IP limiti) ve verinin düzenli hale getirilmesidir. Karmaşık bir kaynaktan güvenilir şekilde veri çekmeniz gerekiyorsa bu tarafı biz üstlenebiliriz.