- Bölüm 1: Web Scraping İleri #1: Sayfalama ve Çok Sayfalı Veri
- Bölüm 2: Web Scraping İleri #2: JavaScript'li Siteler ve Selenium
- Bölüm 3: Web Scraping İleri #3: Engeller, Captcha ve IP Limitleri (bu yazı)
Ciddi bir kazıma projesinde er ya da geç engellerle karşılaşırsınız: 429 hataları, boş sayfalar, captcha ekranları. Bu yazıda bu engellerin mantığını ve meşru çözüm yollarını anlatıyoruz.
1. Kendinizi tarayıcı gibi tanıtın
Birçok site, tarayıcı başlığı olmayan istekleri hemen reddeder. Gerçekçi başlıklar ekleyin:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36",
"Accept-Language": "tr-TR,tr;q=0.9",
}
yanit = requests.get(url, headers=headers, timeout=15)
2. Yavaşlayın ve rastgele bekleyin
Saniyede onlarca istek atarsanız engellenirsiniz. İstekler arasına değişken gecikme koyun:
import time, random
time.sleep(random.uniform(1.5, 4.0))
3. Oturumu (session) koruyun
Çerez ve giriş gerektiren sitelerde her istekte yeniden bağlanmak yerine tek bir oturum kullanın:
oturum = requests.Session()
oturum.headers.update(headers)
oturum.get("https://site.com/giris") # cerezler oturumda saklanir
4. IP limitleri ve proxy
Aynı IP'den çok istek gelince site sizi geçici engelleyebilir. Yasal sınırlar içinde, bir proxy havuzu ile istekleri farklı IP'lere dağıtmak bu sorunu çözer.
Captcha ne olacak?
Captcha çıkıyorsa site sizi bot olarak görmüş demektir. Çözüm önce çıkmasını engellemektir: daha yavaş gidin, oturum ve başlıkları düzeltin, mümkünse resmi API kullanın.
Her zaman sitenin kullanım şartlarına ve robots.txt kurallarına saygı gösterin. Amacımız veriye nazikçe ve sürdürülebilir şekilde ulaşmaktır.
Seri tamam! Artık temelden ileri seviyeye kadar kazımanın haritasına sahipsiniz.