Rakip Fiyatlarını Ayrıştırma: Mimari, Yasallık ve Pratik Sınırlar

Rakip fiyatlarını yasal ve güvenilir bir şekilde ayrıştırmak için pratik bir rehber: mimari desenler, yasal sınırlamalar, hız sınırlamaları ve bot önleme önlemleriyle başa çıkma.

DFDigiForge EkibiJun 28, 20266 dk okuma
Veri akışlarını yapılandırılmış fiyat tablolarına dönüştüren, koyu arka planda kor parıltısı olan soyut görselleştirme.

DigiForge'de, düzinelerce e-ticaret sitesinde fiyatları izlemesi gereken müşteriler için sık sık rekabet istihbarat sistemleri kuruyoruz. Temel zorluk sadece bir kazıyıcı yazmak değil; yasal, güvenilir ve zaman içinde bakımı yapılabilir bir sistem inşa etmektir. Bu makalede, rakip fiyatlarını ayrıştırmak için mimari desenlerimizi ve zor kazanılmış sınırlarımızı paylaşıyoruz.

Bu Bağlamda Ayrıştırma Ne Anlama Geliyor

Hesaplamalı dilbilim tarafından tanımlandığı şekliyle ayrıştırma, bir sembol dizisini biçimsel bir dilbilgisi kurallarına göre analiz etme sürecidir (Wikipedia). Rakip fiyatlarını ayrıştırdığımızda, aynı kavramı uyguluyoruz: yapılandırılmamış veya yarı yapılandırılmış HTML, JSON veya API yanıtlarından yapılandırılmış fiyat verileri çıkarmak. Ayrıştırıcı, sayfanın yapısını (genellikle bir DOM düğümleri ağacı veya bir JSON yükü) anlamalı ve bunu öngörülebilir bir şemaya (ürün adı, fiyat, para birimi, stok durumu) eşlemelidir.

Ancak bir püf noktası var: rakip web siteleri statik dilbilgileri değildir. Sık sık değişirler. Bir sayfanın bir sürümü için oluşturulmuş bir ayrıştırıcı, yeniden tasarım sonrası bozulabilir. Bu nedenle, anormallikleri yüzeye çıkarabilen ve mümkün olduğunda kendi kendini iyileştirebilen sağlam ayrıştırma mimarilerine yatırım yapıyoruz.

Yasal Temeller: Tek Bir Satır Kod Yazmadan Önce

Bir ayrıştırıcıyı mimarilendirmeden önce, yasal ortamı ele almalısınız. Web kazımanın yasallığı yargı yetkisine göre değişir, ancak takip ettiğimiz evrensel ilkeler vardır:

  • robots.txt'yi kontrol edin: Disallow yönergelerine her zaman saygı gösterin. Bunları görmezden gelmek, bazı yargı bölgelerinde izinsiz giriş olarak kabul edilebilir.
  • Hizmet Şartlarını inceleyin: Birçok site, kazımayı Hizmet Şartlarında açıkça yasaklar. Her zaman uygulanabilir olmasa da, Hizmet Şartlarını ihlal etmek, ihtarnamelere veya IP yasaklamalarına yol açabilir.
  • Hız sınırlaması: Kazımaya izin verilse bile, bir siteye istek yağdırmak kötü bir uygulamadır ve kötü niyetli olarak değerlendirilebilir. İnsan davranışını taklit etmek için istekleri her zaman sınırlandırıyoruz.
  • Veri kullanımı: Rakip fiyatlarını ayrıştırmak ve depolamak, özellikle verileri yeniden yayınlarsanız, telif hakkı veya veritabanı hakları sorunlarına yol açabilir. Verileri kamuya yeniden dağıtmak için değil, dahili analiz için kullanın.

Altın kuralımız: yalnızca gerekli olanı kazıyın, agresif bir şekilde önbelleğe alın ve sitenin izin mekanizmalarını ihlal edecek şekilde (örneğin, CAPTCHA'ları programlı olarak atlamak risklidir) asla bir insanı taklit etmeyin.

Güvenilir Fiyat Ayrıştırma için Mimari Desenler

Yasal kısıtlamalar anlaşıldıktan sonraki zorluk güvenilirliktir. Fiyatlar sık değişir ve web siteleri şablonlarını günceller. Getirme, ayrıştırma ve veri depolamayı ayıran katmanlı bir mimari kullanıyoruz.

1. Getirme Katmanı

Getirme katmanı, ham HTML veya API yanıtını alır. IP engellemelerini önlemek için dönen bir proxy ve kullanıcı aracısı dizisi kullanırız. JavaScript ağırlıklı sayfalar için Puppeteer veya Playwright gibi bir başsız tarayıcı kullanırız. Ancak başsız tarayıcılar kaynak yoğundur—bunları yalnızca gerektiğinde kullanırız. Basit sunucu tarafından oluşturulan sayfalar için requests veya axios ile sade bir HTTP istemcisi yeterlidir.

import requests
from fake_useragent import UserAgent

ua = UserAgent()
headers = {'User-Agent': ua.random}
response = requests.get('https://example.com/product', headers=headers, timeout=10)

Ayrıca üstel geri çekilme ve jitter ile yeniden deneme mantığı uyguluyoruz. Bir istek 429 Too Many Requests veya 503 nedeniyle başarısız olursa, bekleyip üç defaya kadar yeniden deneriz.

2. Ayrıştırma Katmanı

Ayrıştırma, sistemin kalbidir. GeeksforGeeks'in belirttiği gibi, ayrıştırma token'ları yapılandırılmış bir ayrıştırma ağacına dönüştürür. HTML için DOM ağacını kullanırız. Ayrıştırma stratejisinin seçimi sayfanın karmaşıklığına bağlıdır:

  • CSS seçiciler / XPath: Hızlıdır, statik sayfalar ve tahmin edilebilir sınıflar için iyidir. Ancak kırılgandır—bir sınıf adı değişikliği ayrıştırıcıyı bozar.
  • Sağlam seçiciler: Mümkün olduğunda data-* nitelikleri veya yapısal ilişkiler (örneğin, nth-child) kullanın. Otomatik oluşturulmuş gibi görünen sınıflardan kaçının.
  • Bulanık eşleme: Sık değişen sayfalar için tam seçiciler yerine desenleri (örneğin, fiyatlar için regex) eşleştiririz. Bu daha dayanıklıdır ancak yanlış pozitifler üretebilir.
  • Makine öğrenimi: Engellenen veya oldukça dinamik sayfalar için, görsel özelliklere dayalı olarak fiyat öğelerini tanımlamak üzere basit bir model eğitiriz. Karmaşıklığı nedeniyle bu son çaredir.

Ayrıca bir şema doğrulama adımı uyguluyoruz: ayrıştırmadan sonra, çıktıyı beklenen türlerle karşılaştırıyoruz (fiyat pozitif bir sayı olmalı, para birimi bilinen bir kod olmalı). Doğrulama başarısız olursa, bir uyarı kaydediyoruz—bu, şablon değişikliklerini erken yakalar.

3. Depolama ve Tekilleştirme

Ayrıştırılan fiyatlar, zaman içindeki değişiklikleri izlemek için bir zaman serisi veritabanında (örneğin, InfluxDB veya TimescaleDB) saklanır. Yinelenen girişleri önlemek için ürün tanımlayıcılarını hash'leriz. Basit bir tekilleştirme adımı: eklemeden önce, ürün-mağaza kombinasyonunun zaten aynı fiyata sahip olup olmadığını kontrol edin; varsa, gürültüyü azaltmak için atlayın.

Bot Karşıtı Önlemlerle Başa Çıkma

Rakip siteler giderek daha fazla bot karşıtı teknikler kullanıyor. İşte bunları yasal ve etik sınırlar içinde nasıl ele aldığımız:

  • CAPTCHA'lar: CAPTCHA'ları programlı olarak çözmeye çalışmıyoruz. Bunun yerine, URL'yi manuel inceleme için işaretliyoruz veya tamamen atlıyoruz. 2Captcha gibi hizmetler mevcuttur ancak çoğu Kullanım Koşulunu ihlal eder ve önerilmez.
  • IP hız sınırlaması: Birçok IP ile dağıtık kazıma yaygın bir yanıttır. Ancak, BrightData gibi meşru sağlayıcılardan konut proxy'leri kullanmak, sağlayıcının ve hedefin şartlarına uyuyorsanız kabul edilebilir.
  • JavaScript oluşturma: Fiyatları AJAX ile yükleyen veya kullanıcı etkileşimi gerektiren sayfalar için headless tarayıcılar kullanıyoruz. Ancak daha doğal görünmek için insan gecikmelerini ve kaydırma olaylarını simüle ediyoruz.
  • Parmak izi: Modern bot karşıtı araçlar (Akamai veya Cloudflare gibi) tarayıcı parmak izi kullanır. Headless tarayıcılar genellikle tespit edilebilir. Bunu, tipik headless parmak izlerini değiştiren gizlilik eklentileri kullanarak hafifletiyoruz.

Öğrendiğimiz bir ders: yetkilendirme olmadan elde edilen oturum belirteçlerini asla saklamayın veya yeniden kullanmayın. Bir site fiyatları görmek için giriş gerektiriyorsa, kimlik doğrulama arkasında kazıma yapmak şartların açık bir ihlalidir.

Fiyat Ayrıştırmanın Sınırları: Ne Zaman Durmalı

En iyi mimariyle bile ayrıştırmanın sınırları vardır. Saygı duyduğumuz sınırlar şunlardır:

  1. Hacim sınırları: Bir sitede milyonlarca ürün varsa, hepsini her gün kazımak pratik değildir. En çok satanlara veya rastgele örneklere öncelik veririz.
  2. Yasal sınırlar: Belirtildiği gibi, robots.txt veya Kullanım Koşulları'nı göz ardı etmek yasal işlemlere yol açabilir. Şirketlerin kazımayı durdurmalarını talep eden ihtarnameler aldığı durumlar gördük.
  3. Teknik sınırlar: Bazı siteler sonsuz kaydırma veya karmaşık durum yönetimi kullanır ve bu da ayrıştırmayı güvenilmez kılar. Bazen belirli bir sitenin doğru şekilde ayrıştırılamayacağını kabul eder ve onu hariç tutarız.
  4. Etik sınırlar: Teknik olarak mümkün olsa bile, açıkça kazınmak istemeyen bir siteyi (örneğin CAPTCHA ile) kazımak gri bir alandır. Bariz engelleri zorlamaktan kaçınırız.

Test ve Bakım

Bir fiyat ayrıştırıcı asla 'bitmez'. Web siteleri değişir. Günlük çalışan otomatik testler kurarız: bilinen bir ürünü ayrıştırır ve fiyatı karşılaştırırız. Bir eşiğin ötesinde sapma olursa, uyarı tetikleriz. Ayrıca yanıt boyutlarını ve yapısını izleriz; bir sayfanın DOM'u önemli ölçüde değişirse, ayrıştırıcı büyük olasılıkla bozulmuştur.

Ayrıca site bazında ayrıştırma kurallarının bir değişiklik günlüğünü tutarız. Bir site HTML'sini güncellediğinde, kuralları güncelleriz. Bu zahmetlidir ancak güvenilirlik için gereklidir.

Ayrıştırmaya Alternatifler

Bazen ayrıştırma en iyi yaklaşım değildir. Bir rakip resmi bir API veya veri akışı sunuyorsa, bunun yerine onu kullanın. Yasal, güvenilirdir ve genellikle daha temiz veri sağlar. Ayrıca tarayıcı uzantıları veya ortak entegrasyonlarını da değerlendiririz. Ayrıştırma, izin verilen bir kanal olmadığında son çare olmalıdır.

Örneğin, bazı fiyat karşılaştırma platformları tamamen bağlı kuruluş ağları üzerine inşa edilmiştir; burada perakendeciler gönüllü olarak fiyat verilerini sağlar. Bu model, yasal ve teknik riskleri tamamen ortadan kaldırır.

Yapımlarımızdan Nihai Öneriler

DigiForge olarak perakende, seyahat ve SaaS alanlarındaki müşterilerimiz için fiyat ayrıştırıcıları geliştirdik. En başarılı projelerimiz şu özellikleri paylaşıyor:

  • Net yasal onay: Web kazıma yasalarına aşina bir avukattan alınmış.
  • Zarif düşüş: Bir site bizi engellerse, tırmanmak yerine manuel veri girişine veya üçüncü taraf bir veri sağlayıcısına geçeriz.
  • İzleme ve uyarılar: Bir ayrıştırıcı bozulduğunda hemen haberdar oluruz.
  • Veri tazeliği gereksinimleri: Tüm fiyatların günlük olarak güncellenmesi gerekmez. Yükü azaltmak için uygun programlar belirleriz.
  • Saygılı kazıma: IP başına saniyede birden fazla istek göndermeyiz ve her zaman iletişim bilgilerimizi içeren özel bir kullanıcı aracısı ile kendimizi tanıtırız.

Rakip fiyatlarını ayrıştırmak teknik olarak mümkündür, ancak yasal sınırlara saygı gösteren ve teknik sınırlamaları kabul eden dengeli bir yaklaşım gerektirir. Sorumlu bir şekilde geliştirin ve çizgiyi aşmadan değerli pazar içgörüleri elde edebilirsiniz.

Koyu arka planda kor renkli düğümlerle fiyat verisi çıkarma işleminin ağ grafiği.
Ayrıştırma mimarisinin görsel bir temsili: düğümler, farklı rakip sitelerden çıkarılan fiyat noktalarıdır.
#ayrıştırma#kazıma#web-kazıma#fiyat-izleme#yasal-uyum#mimari
DF

DigiForge Ekibi

DigiForge mühendislik ekibi — modern web siteleri, modules ve otomasyonlar inşa ediyor; hızlı ve dayanıklı web ürünleri yayınlama zanaatı üzerine yazıyor.

Konuşalım

Aklınızda bir proje
mi var?

Bize ne geliştirdiğinizi anlatın — ürününüz için net bir plan ve doğru yaklaşımı belirleyelim.

Projenizi başlatın