Konuyu Açan #1
Scraping İçin Request Retry Sistemi

Web scraping yaparken, özellikle büyük veri setleri ve stabil olmayan bağlantılar söz konusu olduğunda, başarısız olan istekleri otomatik olarak tekrar denemek oldukça kritik hale gelir. Bu noktada, request modülünün ya da benzeri kütüphanelerin sağladığı retry mekanizmaları, işlem sürekliliği ve verimlilik açısından büyük avantaj sağlar.

İlk olarak, çoğu zaman başarısız olan HTTP istekleri, sunucu tarafı geçici sorunlar veya ağ bağlantısı sorunlarından kaynaklanabilir. Bu nedenle, belirli sayıda denemeden sonra hata vermek yerine, otomatik tekrarlar gerçekleştirilmesi, özellikle zaman alan veya yoğun veri çeken işlemlerde büyük kolaylık sağlar.

Python'da bu amaçla kullanılabilecek en yaygın yöntem, requests kütüphanesi ile birlikte urllib3'ün sağladığı Retry sınıfını kullanmaktır. Aşağıda temel bir örnek üzerinden anlatıyorum:

KOD
1234567891011121314151617181920212223 
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()

retry_strategy = Retry(
    total=5,  # toplam deneme sayısı
    status_forcelist=[429, 500, 502, 503, 504],  # belirli HTTP durum kodları için tekrar dene
    method_whitelist=["HEAD", "GET", "OPTIONS"],  # retry yapılacak HTTP metodları
    backoff_factor=1  # denemeler arasındaki gecikme oranı
)

adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)

response = session.get('https://ornekwebsitesi.com')
if response.status_code == 200:
    print("Veri başarıyla alındı.")
else:
    print("İstek başarısız oldu.")


Bu yapı, belirli HTTP durum kodları veya zaman aşımı hatalarıyla karşılaşıldığında otomatik olarak tekrar denemeleri gerçekleştirir. Ayrıca, backoff_factor parametresi, denemeler arasında artan gecikmeler sağlayarak sunucu üzerindeki yükü azaltır ve IP bloklamalarının önüne geçer.

Son olarak, retry mekanizmasını uygularken, aşırı denemelerden ve bu süreçte oluşabilecek potansiyel ban veya IP engellemelerinden kaçınmak adına, deneme sayısını ve gecikme oranlarını dikkatli ayarlamak gerekir. Ayrıca, zaman zaman manuel müdahale veya logging ile başarısız denemelerin takibi de önerilir.

Bu sistemler, özellikle büyük ve dayanıklı scraping altyapıları kurarken, işlem sürekliliği ve verimlilik açısından vazgeçilmez hale gelir.

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi