DrissionPage Nedir ve Proxy Kullanıcıları İçin Neden Önemli?
DrissionPage, Python ekosisteminde requests tarzı HTTP istekleri ile Chromium tarayıcı kontrolünü tek bir API altında birleştiren bir çerçevedir. Geleneksel olarak, bir scraper geliştiricisi iki ayrı araç kullanırdı: hızlı HTTP istekleri için requests veya httpx, JavaScript ile render edilen sayfalar için Selenium veya Playwright. DrissionPage, bu iki dünyayı SessionPage, ChromiumPage ve WebPage sınıflarıyla tek bir oturumda birleştirir. Çerezler, başlıklar ve oturum durumu modlar arasında paylaşılır.
Bu yaklaşım, proxy kullanıcıları için kritik bir avantaj sunar: DrissionPage proxy yapılandırması tek bir yerden yönetilir ve HTTP modundan tarayıcı moduna geçişte aynı IP ve oturum korunabilir. Residential proxy'lerle çalışırken bu, IP rotasyon maliyetlerini ve engellenme riskini önemli ölçüde azaltır. DrissionPage resmi belgeleri, çerçevenin Çin'de popüler olduğunu ve özellikle e-ticaret scraping için optimize edildiğini belirtir.
Yasal uyarı: Web scraping, hedef sitenin Hizmet Şartları (ToS), robots.txt kuralları ve yargı bölgenizdeki yasalar (ABD'de CFAA, AB'de GDPR) tarafından kısıtlanabilir. Bu rehber yalnızca herkese açık verilerin toplanması ve etik scraping pratikleri içindir. Hedef sitenin kurallarına saygı gösterin ve resmi API mevcut olduğunda onu tercih edin. Daha fazla bilgi için FTC'nin Hi-Q Laboratories davası özetine bakabilirsiniz.
Teknik Bağlam: Neden İki Modlu Bir Çerçeveye İhtiyaç Var?
Modern web sitelerinin yaklaşık %40'ı JavaScript ile içerik render eder; ancak bu içerik genellikle bir arka plan API'sinden JSON olarak gelir. Bu durumda tam bir headless Chromium çalıştırmak gereksizdir — yeter ki o JSON uç noktasını bulabilirisiniz. DrissionPage'in listen.start() özelliği, tarayıcının arka planda yaptığı XHR/fetch isteklerini yakalar ve böylece gizli API'leri keşfedebilirsiniz.
Bunun pratik bir örneği: Bir e-ticaret sitesi ürün fiyatlarını sayfa yüklendikten sonra bir REST API'den çeker. Tarayıcı modunda sayfayı bir kez açıp listen ile API URL'sini yakaladıktan sonra, geri kalan binlerce ürün için HTTP moduna geçebilirsiniz. Bu desen, tamamen tarayıcı tabanlı bir yaklaşıma kıyasla 5-10 kat daha hızlı ve çok daha ucuzdur.
| Özellik | SessionPage (HTTP) | ChromiumPage (CDP) | WebPage (Hibrit) |
|---|---|---|---|
| Hız | ~100-200ms / istek | ~1-3sn / sayfa | Modele göre değişir |
| JS Render | Hayır | Evet | Evet (geçiş ile) |
| Çerez Paylaşımı | Oturum bazlı | Tarayıcı bazlı | İki mod arasında |
| Proxy Desteği | set_proxies() | ChromiumOptions.set_proxy() | Her ikisi |
| Kaynak Tüketimi | Düşük (~20MB) | Yüksek (~150-300MB) | Modele göre |
DrissionPage'in Modeli: SessionPage, ChromiumPage ve WebPage
SessionPage — Hızlı HTTP Modu
SessionPage, requests.Session üzerine inşa edilmiştir. Çerezleri otomatik yönetir, proxy atayabilir ve CSS/XPath seçicileriyle HTML ayrıştırır. Statik sayfalar ve JSON API'leri için idealdir. Bir istek tipik olarak 150ms içinde tamamlanır ve bellek tüketimi minimumdur.
ChromiumPage — CDP Sürücü Tarayıcı Modu
ChromiumPage, Chrome DevTools Protocol (CDP) üzerinden Chromium tarayıcıyı kontrol eder. Selenium'a kıyasla daha az ara katman içerir ve daha hızlıdır. JavaScript render, buton tıklama, form doldurma ve ekran görüntüsü alma gibi işlemleri destekler. CDP spesifikasyonuna dayanır.
WebPage — Mod Arası Geçiş
WebPage, en güçlü sınıftır. HTTP modunda başlayıp tarayıcı moduna geçebilir veya tam tersi. Geçiş sırasında çerezler, başlıklar ve proxy ayarları korunur. Bu, DrissionPage web scraping iş akışlarının temelini oluşturur.
DrissionPage Tutorial: Temel API ve Locators
DrissionPage'in locator sözdizimi, CSS seçiciler ve özel bir @ öznitelik sözdiziminin karışımıdır. İşte yaygın desenler:
from DrissionPage import WebPage, ChromiumOptions
# WebPage oluştur — varsayılan HTTP modunda başlar
page = WebPage()
# HTTP modunda bir sayfa yükle
page.get('https://example.com/products')
# Tek bir eleman bul — @ öznitelik sözdizimi
price = page.ele('@class=price-tag')
print(price.text)
# Birden fazla eleman bul
cards = page.eles('tag:div@class=product-card')
for card in cards:
title = card.ele('tag:h2').text
link = card.ele('tag:a').attr('href')
print(title, link)
# XPath kullanımı
desc = page.ele('xpath://div[@id="description"]//p[1]')
print(desc.text)
ele() tek bir eleman döndürür, eles() ise bir liste döndürür. tag: öneki HTML etiketine göre arama yapar, @ öneki ise özniteliğe göre. Bu, DrissionPage chromium modunda da aynı şekilde çalışır — API tutarlıdır.
listen.start() ile Arka Plan XHR Yakalama
Bu özellik, gizli API'leri keşfetmenin en güçlü yoludur. Tarayıcı modunda bir sayfa yüklerken arka plan isteklerini dinleyebilirsiniz:
from DrissionPage import ChromiumPage
page = ChromiumPage()
# Belirli bir URL desenini dinle
page.listen.start('api/products')
page.get('https://example.com/shop')
# İlk eşleşen paketi yakala
packet = page.listen.wait(timeout=10)
if packet:
print('URL:', packet.url)
print('Method:', packet.method)
print('Body:', packet.response.body)
page.listen.stop()
Bu yakalanan API uç noktasını daha sonra SessionPage ile yüksek hacimli istekler için kullanabilirsiniz. Bu, DrissionPage tutorial bağlamında en değerli üretim desenidir.
DrissionPage Proxy Yapılandırması
Proxy yapılandırması, kullanılan moda göre değişir. İşte her iki mod için de ProxyHat residential proxy entegrasyonu:
SessionPage için Proxy
from DrissionPage import SessionPage
page = SessionPage()
# ProxyHat residential proxy — US, sticky session
page.set.proxies('http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080')
page.get('https://httpbin.org/ip')
print(page.html)
ChromiumPage için Proxy
from DrissionPage import ChromiumOptions, ChromiumPage
co = ChromiumOptions()
co.set_proxy('http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080')
co.headless(True)
co.set_argument('--no-sandbox')
co.set_argument('--disable-gpu')
page = ChromiumPage(co)
page.get('https://httpbin.org/ip')
print(page.ele('tag:pre').text)
Residential proxy'ler, hard target'lar için neden gereklidir? Çünkü Cloudflare, Akamai ve PerimeterX gibi anti-bot sistemleri, datacenter IP aralıklarını ASN veritabanlarıyla tespit eder. ProxyHat lokasyonları arasında 190+ ülke bulunur ve her IP gerçek bir ISP'den gelir. Bu, engellenme riskini datacenter proxy'lere kıyasla önemli ölçüde azaltır.
Çalıştırılabilir Örnek: Hibrit WebPage ile ProxyHat
Aşağıdaki örnek, bir WebPage ile HTTP modunda başlayıp, JS render gerektiren bir sayfa için Chromium moduna geçişi gösterir. ProxyHat residential endpoint ile US coğrafi hedefleme ve sticky session kullanılır:
from DrissionPage import WebPage, ChromiumOptions
import uuid
class ProxyHatConfig:
GATEWAY = 'gate.proxyhat.com'
HTTP_PORT = 8080
SOCKS5_PORT = 1080
BASE_USER = 'user'
PASSWORD = 'pass'
@staticmethod
def build_username(country='US', session=None, city=None):
parts = [f'country-{country}']
if city:
parts.append(f'city-{city}')
if session is None:
session = uuid.uuid4().hex[:12]
parts.append(f'session-{session}')
return '-'.join(parts)
@classmethod
def http_url(cls, country='US', session=None, city=None):
user = cls.build_username(country, session, city)
return f'http://{cls.BASE_USER}-{user}:{cls.PASSWORD}@{cls.GATEWAY}:{cls.HTTP_PORT}'
# 1. WebPage oluştur — HTTP modunda başlar
page = WebPage()
# 2. Proxy ata — US residential, sticky session
proxy_url = ProxyHatConfig.http_url(country='US', session='order-flow-001')
page.set.proxies(proxy_url)
# 3. HTTP modunda JSON API'den veri çek
page.get('https://api.example.com/products?page=1')
products = page.json
print(f'HTTP modunda {len(products)} ürün alındı')
# 4. JS render gerektiren detay sayfası için Chromium'a geç
co = ChromiumOptions()
co.set_proxy(proxy_url) # Aynı proxy — çerez ve IP korunur
co.headless(True)
page.change_mode(mode='co', go=False, co=co)
# 5. Tarayıcı modunda detay sayfasını yükle
page.get('https://example.com/product/12345')
desc = page.ele('@class=product-description').text
print('Ürün açıklaması:', desc[:200])
# 6. Arka plan API'lerini dinle
page.listen.start('api/reviews')
page.get('https://example.com/product/12345/reviews')
packet = page.listen.wait(timeout=15)
if packet:
reviews = packet.response.body
print(f'{len(reviews)} yorum yakalandı')
page.listen.stop()
page.close()
Bu örnekte dikkat çekici nokta, mod geçişinde proxy ve çerezlerin korunmasıdır. change_mode() çağrısı, tarayıcıyı başlatırken aynı proxy_url'i kullanır. Bu, oturum tutarlılığını sağlar ve hedef sitenin şüphelenmesini zorlaştırır.
Üretim Desenleri
Per-Session Proxy Pinning
Her scraping oturumuna benzersiz bir session kimliği atayın. Bu, ProxyHat'in aynı IP'yi oturum boyunca korumasını sağlar. Çerez tabanlı oturum doğrulaması yapan sitelerde bu kritiktir — IP değişimi, oturumun sonlanmasına neden olabilir.
import uuid
from DrissionPage import WebPage
def scrape_with_pinned_session(url, country='US'):
session_id = uuid.uuid4().hex[:12]
proxy = f'http://user-country-{country}-session-{session_id}:pass@gate.proxyhat.com:8080'
page = WebPage()
page.set.proxies(proxy)
try:
page.get(url)
if page.status_code != 200:
return None
return page.html
finally:
page.close()
Yeniden Deneme ve Hata Yönetimi
Proxy tabanlı scraping'de başarısızlık kaçınılmazdır. Üst düzey bir yeniden deneme katmanı ekleyin:
- HTTP 429 (Too Many Requests) → 5-30 saniye bekleyip yeni session ile yeniden dene.
- HTTP 403 (Forbidden) → Yeni IP'ye geç (yeni session kimliği).
- Zaman aşımı → 3 deneme, üstel geri çekilme (1s, 2s, 4s).
- Tarayıcı modunda CAPTCHA → residential IP'ye geç veya o URL'i atla.
Paket Yakalama ile Gizli API Keşfi
listen.start() yalnızca veri çekmek için değil, hedef sitenin mimarisini anlamak için de kullanılır. Bir sayfayı tarayıcı modunda yükleyin ve tüm XHR'ları kaydedin. Çoğu modern SPA, veriyi temiz JSON olarak döndüren gizli uç noktalar kullanır. Bu uç noktaları keşfettiğinizde, geri kalan iş yükünüzü HTTP moduna taşıyabilirsiniz.
Eşzamanlılık Sınırları
DrissionPage ile paralel scraping yaparken dikkatli olun. Her ChromiumPage örneği yaklaşık 150-300MB bellek tüketir. Makul bir sunucuda (8GB RAM) aynı anda 20-30 tarayıcı örneği çalışır. SessionPage ise çok daha hafiftir — 100+ eşzamanlı oturum mümkündür. Web scraping kullanım senaryomuzu inceleyerek ölçeklendirme stratejileri hakkında daha fazla bilgi edinebilirsiniz.
| Desen | Önerilen Eşzamanlılık | Bellek / Örnek | Notlar |
|---|---|---|---|
| SessionPage | 50-100 | ~20MB | async/await ile artırılabilir |
| ChromiumPage | 10-30 | ~150-300MB | headless + --disable-gpu |
| WebPage (hibrit) | 10-20 | ~200-350MB | Mod geçişinde dikkatli olun |
Ne Zaman Tarayıcı Moduna Geçmemeli?
En yaygın hata, her şey için tarayıcı kullanmaktır. İşte tarayıcı moduna geçmenin gereksiz olduğu durumlar:
- Sayfa statik HTML döndürüyorsa (sunucu tarafı render).
- Veri bir JSON API'sinden geliyorsa ve API URL'si biliniyorsa.
- Sayfa yalnızca basit CSS/JS içeriyorsa ve içerik DOM'da mevcutsa.
- Yüksek hacimli istekler gerekiyorsa (>100 istek/saniye).
Tarayıcı moduna geçin yalnızca:
- Sayfa JS ile içerik render ediyorsa ve API uç noktası bulunamıyorsa.
- Etkileşim gerekiyorsa (buton tıklama, form gönderme, kaydırma).
- Cloudflare challenge veya benzeri bir koruma aşılması gerekiyorsa.
- Ekran görüntüsü almanız gerekiyorsa.
Etik ve Yasal Hususlar
Web scraping, güçlü bir araçtır ancak sorumlu kullanılmalıdır. İşte temel ilkeler:
- robots.txt'e saygı: Hedef sitenin
robots.txtdosyasını okuyun veDisallowkurallarına uyun. DrissionPage,robots.txtkontrolü yapmaz — bu sizin sorumluluğunuzdadır. - Hız sınırları: Saniyede 1-2 istek, çoğu site için güvenli bir başlangıçtır. Hedef sitenin sunucularına aşırı yük bindirmeyin.
- Herkese açık veri: Yalnızca giriş gerektirmeyen, herkese açık sayfalardan veri toplayın. Giriş yaparak erişilen veriler, ToS ihlali olabilir.
- GDPR ve CCPA: Kişisel veri topluyorsanız, AB Genel Veri Koruma Yönetmeliği (GDPR) ve California Tüketici Gizlilik Yasası (CCPA) kapsamında yükümlülükleriniz olabilir.
- Resmi API tercih: Hedef sitenin bir API'si varsa, scraping yerine onu kullanın. Daha güvenilir, daha az engellenme riski ve genellikle daha hızlıdır.
ProxyHat'a Özel Kurulum
ProxyHat, residential, mobil ve datacenter proxy'leri destekler. DrissionPage ile entegrasyon için ProxyHat belgelerine bakabilirsiniz. İşte temel yapılandırma:
- Gateway:
gate.proxyhat.com - HTTP port:
8080 - SOCKS5 port:
1080 - Kullanıcı adı formatı:
user-country-US-session-abc123 - Coğrafi hedefleme: Ülke ve şehir düzeyinde (ör.
country-DE-city-berlin)
Fiyatlandırma ve plan seçenekleri için ProxyHat fiyatlandırma sayfasını ziyaret edin. SERP izleme ve arama motoru sonuç sayfası scraping için SERP izleme kullanım senaryomuzu inceleyin.
Key Takeaways
DrissionPage proxy entegrasyonu, hem HTTP hem tarayıcı modunda tek bir API ile yönetilir.
set_proxies()SessionPage için,ChromiumOptions.set_proxy()ChromiumPage için kullanılır.Residential proxy'ler, Cloudflare ve benzeri anti-bot sistemleri için datacenter proxy'lere göre çok daha güvenilirdir. ProxyHat'in 190+ ülke kapsamı, coğrafi hedefleme esnekliği sunar.
listen.start()ile gizli API'leri keşfedin ve iş yükünüzü tarayıcı modundan HTTP modına taşıyın. Bu, 5-10 kat hız artışı sağlar.Sticky session ile oturum tutarlılığını koruyun; her oturuma benzersiz bir
sessionkimliği atayın.Tarayıcı moduna yalnızca JS render veya etkileşim gerektiğinde geçin. Statik sayfalar ve JSON API'leri için SessionPage yeterlidir.
Eşzamanlılık sınırlarına dikkat edin: ChromiumPage başına ~200MB, SessionPage başına ~20MB.
SSS
DrissionPage nedir?
DrissionPage, Python için geliştirilmiş, requests tarzı HTTP istekleri ile Chromium tarayıcı kontrolünü tek bir API altında birleştiren açık kaynak bir çerçevedir. SessionPage, ChromiumPage ve WebPage sınıfları sayesinde aynı oturumda modlar arası geçiş yapabilir, çerez ve durum paylaşabilirsiniz. Bu, her zaman headless tarayıcı çalıştırmaya kıyasla maliyet ve hız avantajı sağlar.
DrissionPage proxy kullanıcıları için neden önemli?
DrissionPage, proxy yapılandırmasını hem SessionPage hem ChromiumPage düzeyinde destekler. set_proxies() ile HTTP modunda, ChromiumOptions.set_proxy() ile tarayıcı modunda proxy atayabilirsiniz. Residential proxy'lerle birleştiğinde, IP rotasyonu ve coğrafi hedefleme tek bir oturumda yönetilebilir; bu da SERP izleme, fiyat karşılaştırma ve sosyal medya araştırması gibi iş yükleri için idealdir.
DrissionPage için hangi proxy tipi en iyisidir?
Genel olarak residential proxy'ler en güvenilir seçenektir; çünkü gerçek ISP IP'lerinden gelir ve datacenter IP'lerine göre daha az engellenir. Mobil proxy'ler ise en yüksek güven seviyesini sunar ancak maliyeti daha yüksektir. Datacenter proxy'ler hızlı ve ucuzdur, ancak Cloudflare ve benzeri anti-bot sistemleri tarafından kolayca tespit edilebilir. Hedef siteye göre karışık strateji önerilir.
DrissionPage ile engellenmemek için ne yapmalı?
Residential proxy kullanın, istek başına rotasyon veya sticky session uygulayın, gerçekçi User-Agent başlıkları gönderin, istek hızını sınırlayın ve gereksiz yere tarayıcı moduna geçmekten kaçının. Ayrıca robots.txt dosyasına saygı gösterin, yalnızca herkese açık verileri toplayın ve resmi API mevcut olduğunda onu tercih edin. listen.start() ile arka plan XHR'larını yakalayarak gizli API'leri kullanmak, tarayıcı yükünü azaltır.






