Scraper'lar için tarayıcı parmak izi (fingerprinting) açıklaması
Tarayıcı parmak izi (fingerprinting), bir ziyaretçiyi çerez ya da hesap ile değil, tarayıcısının birleşik özellikleriyle tanımlama pratiğidir. Siteler bunu geri dönen ziyaretçileri tanımak, dolandırıcılığı tespit etmek ve otomasyonu fark etmek için kullanır. Web scraping yapıyorsanız bununla karşılaşacaksınız. Bu rehber neyin ölçüldüğünü, tek bir tutarsızlığın neden sorun yarattığını ve herkese açık veri toplamak için tutarlı, iyi davranan tek bir profili nasıl koruyacağınızı anlatır. Ayrıca parmak izi ayarlamanın neleri yapabileceğini ve yapmaması gerektiğini de açıklar.
Parmak izi neden oluşur
Tek bir değer bir tarayıcıyı tek başına tanımlamaz; ama birçok küçük değer birlikte çoğu zaman tanımlar. Yaygın girdiler şunlardır:
- User agent ve client hint'ler. Tarayıcının bildirdiği tarayıcı adı, sürümü ve işletim sistemi.
- Ekran ve pencere geometrisi. Ekran boyutu, renk derinliği, cihaz piksel oranı ve görüntü alanının boyutu.
- Dil ve saat dilimi.
Accept-Languagebaşlığı,navigator.languagesve tarayıcının bildirdiği saat dilimi. - Yüklü yazı tipleri. Sayfanın tespit edebildiği yazı tipleri; bunlar işletim sistemlerine ve yüklü yazılımlara göre değişir.
- Canvas, WebGL ve ses çıktısı. Grafik ya da ses yığınının bir test görüntüsünü ya da sesi nasıl çizdiği veya işlediğindeki küçük farklılıklar.
- Ağ düzeyindeki özellikler. TLS el sıkışması, HTTP/2 ayarları ve istek başlıklarının sırası. Bunlar JavaScript çalışmadan önce bile sunucuya görünür.
Parmak izi script'leri bunları bir hash ya da puana dönüştürür. Kararlı ve sıradışı sinyaller ne kadar fazlaysa sonuç o kadar ayırt edici olur.
Tutarsızlık neden göze çarpar
Gerçek bir tarayıcı içsel olarak tutarlıdır. İşletim sistemi yazı tipleriyle uyuşur, saat dilimi dil ayarıyla uyuşur, ekran boyutu üzerinde çalıştığı cihazla uyuşur. Scraper'lar bu tutarlılığı çoğu zaman farkında olmadan bozar:
- Yazı tipi yüklü olmayan bir sunucudan gönderilen, masaüstü bir tarayıcıdan kopyalanmış bir user agent.
- IP adresi başka bir ülkedeyken gönderilen Almanca bir
Accept-Languagebaşlığı; saat dilimi ise ne onunla ne de IP'nin ülkesiyle uyuşan bir değer. - Hiçbir gerçek monitörün kullanmadığı bir pencere boyutu bildiren headless bir ortam.
- Her çalıştırmada yepyeni bir profil; böylece çerezler ve geçmiş hiçbir zaman geri dönen bir ziyaretçiye benzemez.
Her tutarsızlık küçük bir sinyaldir. Birlikte, bir isteği "sıradan ziyaretçi"den "yakından bakılmalı" kategorisine taşıyabilirler.
Adım 1: kendi kurulumunuzu ölçün
Bir sayfanın istemciniz hakkında neler öğrendiğini, kontrol ettiğiniz bir parmak izi test sayfası ya da yerelde çalıştırdığınız bir tanılama sayfası yükleyerek görebilirsiniz. Değerlere bakın ve bunların tutarlı tek bir makineyi anlatıp anlatmadığını sorun. İşte birkaçını yazdıran minimal bir Playwright örneği:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context(locale="en-GB", timezone_id="Europe/London")
page = context.new_page()
page.goto("https://example.com") # sahibi olduğunuz bir sayfayla değiştirin
print(page.evaluate("""() => ({
language: navigator.language,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
platform: navigator.platform,
viewport: [innerWidth, innerHeight]
})"""))
browser.close()
Adım 2: profil başına tek bir kimlik tutun
En faydalı alışkanlık, her scraping kimliğini tek bir profil olarak ele almaktır. Ona tek bir özellik seti verin ve bunu tüm ömrü boyunca koruyun:
- Tek bir tarayıcı derlemesi, tek bir user agent ve tek bir işletim sistemi.
- Trafiğin geldiği bölgeye uyan bir yerel ayar, dil ve saat dilimi.
- Gerçek bir ekrana uyan bir görüntü alanı ve cihaz ölçek faktörü.
- Profilin geri dönen bir ziyaretçi gibi davranması için kalıcı bir çerez deposu.
Bu özelliklerden birini her istekte değiştirmek, onları sabit tutmaktan daha şüphelidir. Tutarlılık, bir profilin sıradan görünmesini sağlar.
Adım 3: profili bir ziyaretçi gibi hızlandırın
Parmak izi tek bir girdidir. Siteler bir profilin siteyi ne kadar hızlı gezdiğini de izler. Bir dakikada iki yüz ürün sayfası yükleyen bir profil, parmak izi ne derse desin bir insan değildir. İstekleri yayın, sonuçları önbelleğe alın ve bir sayfa size durmanız gerektiğini gösterdiğinde durun. Engellenmeden scraping kontrol listesi hızlandırma konusunu daha ayrıntılı anlatır.
Adım 4: sınırları bilin
Parmak izi ayarlaması, otomatik bir profili orada olmayan bir insan gibi gösteremez. Parmak izine dayanan siteler genellikle bunu hız sınırları, hesap kontrolleri ve bazen bir captcha ile birleştirir. Bir captcha çıktığında, daha fazla parmak izi oynamak yerine bir çözücüden token'a ihtiyacınız olur. Scarnox'ta canlı captcha türü PopularCaptcha'dır; PopularCaptcha Python rehberi isteğin nasıl yapıldığını gösterir. Hangi widget'ların var olduğuna dair daha geniş resim için captcha türleri açıklaması rehberine bakın.
Daha önemlisi, parmak izinden kaçınmak bir sitenin kurallarını görmezden gelmek için bir ruhsat değildir. Site sahibi otomatik erişimi kısıtladıysa doğru hamle durmaktır; profilinizi fark edilmesi zorlaştırmak değildir. Parmak izi aynı zamanda bir gizlilik konusudur. Bazı siteler onu insanları ziyaretler arasında izlemek için kullanır ve bu, projenizin ihtiyaç duyduğu veriyi toplamanız için bir sebep daha olmalıdır.
Sorumlu scraping
- Bir siteyi scrape etmeden önce
robots.txtdosyasını ve koşulları okuyun. - Daha az ve daha yavaş istek gönderin; zaten topladığınız şeyi önbelleğe alın.
- Gerçek insanları taklit etmek ya da bir engelin etrafından dolaşmak için profil oluşturmayın.
- İhtiyacınız olmayan kişisel veriyi saklamayın; sakladığınız veriye özen gösterin.
Sonraki adımlar
Hedefiniz bir tarayıcı düzeyindeki kontrolün arkasındaysa headless tarayıcı tespiti ile başlayın; bu rehber otomatik tarayıcılara özgü sinyalleri kapsar. İçeriğini göstermek için JavaScript gerektiren sayfalar JavaScript sitelerini scrape etmek rehberinde ele alınmıştır.
Ücretsiz deneme kredisiyle, kredi kartı gerekmeden başlayın: hesap oluşturun ve PopularCaptcha akışını sahibi olduğunuz bir sayfada deneyin. Güncel ücretler için fiyatlandırma sayfasına bakın.