Sahibinden scraping denince akla iki farklı mimari gelir: ham HTTP istemcisiyle sayfa çekip ayrıştırmak ya da gerçek bir tarayıcıyı sürerek ekranda oluşan DOM’u okumak. Bu sayfa ikincisini, yani ürünümüzün kullandığı yaklaşımı teknik ayrıntısıyla anlatıyor — seçici stratejisi, liste-detay akışı, hız limiti, hata sınıfları ve oturum yönetimi. İşin veri kalitesi tarafı ayrı bir konudur ve ayrı bir sayfada ele alınır.
Sahibinden Pro — yıllık lisans ₺12.500 (KDV dahil). ₺300 karşılığı 1 günlük deneme lisansı alınabilir. Satın al: Sahibinden Pro
Birinci yaklaşımda bir istemci kütüphanesiyle sayfanın HTML’i indirilir ve bir ayrıştırıcıyla işlenir. Hafiftir, hızlıdır, eşzamanlılığı ucuzdur ve sunucu tarafında kolayca ölçeklenir. Zayıflığı şudur: dönen belge çoğu zaman son hâli değildir. İçeriğin bir kısmı istemci tarafında JavaScript ile üretiliyorsa ham HTML’de o alanlar bulunmaz; ayrıca oturum, çerez ve istemci parmak izi tarafında sunucunun beklediği bağlam oluşmadığı için istekler farklı davranabilir. İkinci yaklaşımda gerçek bir tarayıcı örneği başlatılır ve otomasyon katmanı bu tarayıcıyı sürer: sayfa yüklenir, betikler çalışır, DOM son hâlini alır ve okuma bu son hâl üzerinden yapılır. Maliyeti açıktır — her örnek bellek ve işlemci tüketir, eşzamanlılık pahalıdır, sayfa yükleme süresi işin alt sınırını belirler. Ürünümüz ikinci yaklaşımı kullanır ve bunu kullanıcının kendi makinesinde, kullanıcının kendi tarayıcı profiliyle yapar. Bunun açıkça söylenmesi gereken tarafı şudur: burada bir API atlatma, kısıtlama aşma ya da yetkisiz erişim yoktur. Otomasyon, bir kullanıcının tarayıcıda elle yapabileceği gezinmeyi yapar; bir insanın göremediği hiçbir sayfaya erişmez. Mimari tercihin sebebi gizli kapı değil, sayfanın gerçek hâlini okuma ihtiyacıdır.
Scraping projelerinde bakım maliyetinin neredeyse tamamı seçicilerden gelir, bu yüzden seçici yazmak bir üslup meselesi değil mühendislik kararıdır. En kırılgan yöntem, tarayıcının “kopyala > seçici” çıktısını olduğu gibi kullanmaktır: derin ve konum bağımlı bir yol üretir, araya tek bir sarmalayıcı eklendiğinde kopar. Bir adım iyisi, otomatik üretilmiş görünen sınıf adlarına tutunmaktır; bunlar da derleme çıktısı olduğu için sürüm değiştiğinde topluca değişir. Dayanıklı yaklaşım üç ilkeye dayanır. Birincisi, konumdan değil anlamdan tutunmak: bir alanı “üçüncü satırın ikinci hücresi” diye değil, yanındaki etiket metninden hareketle bulmak. İlan detaylarında alanlar genellikle etiket-değer çiftleri hâlinde durur ve etiket metni, düzenden çok daha yavaş değişir. İkincisi, çapayı mümkün olduğunca dar tutmak: önce ilanı temsil eden kapsayıcıyı bulup okumayı o kapsayıcının içinde yapmak, sayfanın geri kalanındaki değişikliklerden yalıtır. Üçüncüsü, geri düşüş zinciri kurmak: birincil seçici sonuç vermezse ikincil bir kurala düşmek ve o da vermezse alanı boş bırakıp hata saymak yerine “bulunamadı” diye işaretlemek. Sessizce boş geçilen alan, hatanın en pahalı türüdür; çünkü fark edilmesi haftalar alır.
Toplama iki katmanlıdır ve bu iki katmanı ayırmak işin sağlamlığını belirler. Birinci katman keşiftir: verilen arama sonucu adresi açılır, sayfadaki ilan bağlantıları toplanır, sonraki sayfaya geçilir ve bu, sayfalama bitene ya da tanımlı sınıra ulaşılana kadar sürer. İkinci katman ayrıntı çıkarımıdır: keşifte biriken bağlantılar sırayla açılır ve alanlar okunur. İki katmanı ayırmanın kazancı şudur — keşif ucuzdur ve hızlı biter, ayrıntı çıkarımı pahalıdır ve uzun sürer; ayrıldıklarında ikincisi kesildiğinde birincisi tekrarlanmak zorunda kalmaz. Kuyruk tarafında üç kural işe yarar. Birincisi iş biriminin idempotent olması: aynı bağlantı iki kez işlenirse aynı kayıt üretilmeli, mükerrer satır doğmamalıdır; doğal anahtar olarak ilan numarası bu yüzden değerlidir. İkincisi kalıcılık: kuyruk ve ilerleme durumu diskte tutulur, böylece uzun bir tarama kesildiğinde baştan değil kaldığı yerden devam edilir. Üçüncüsü sıra: birden fazla arama adresi verildiğinde bunlar paralel değil sırayla işlenir. Sayfalama tarafında dikkat edilecek nokta, liste sıralamasının zaman içinde değişmesidir; yeni ilanlar geldikçe sayfa sınırları kayar ve aynı ilan iki farklı sayfada görünebilir, bazıları da hiç görünmez. Bu yüzden sayfa numarasına değil toplanan bağlantı kümesine güvenmek gerekir.
Scraping tarafında en sık yapılan mühendislik hatası, hızı bir başarı ölçütü sanmaktır. Gerçekte hız bir maliyet kalemidir ve bedelini iki taraf öder: hedef sunucu gereksiz yük alır, sizin oturumunuz ise doğal olmayan bir desen üretir. Ürün bu yüzden ilan geçişleri arasında kasıtlı bir bekleme uygular; varsayılan değer yaklaşık yirmi saniyedir ve ayarlanabilir. Beklemenin sabit değil değişken olması önemlidir — tam olarak yirmi saniyede bir tekrarlanan bir istek deseni, rastgele aralıklı bir desenden daha belirgindir. Eşzamanlılık tarafında tercih tektir: aynı anda tek oturum. Paralel sekmelerle hızlanmak teknik olarak akla gelir ama aynı hesapla eşzamanlı çok istek üretmek hem sunucuya karşı nazik değildir hem de sizin hesabınızı riske atar; kazanılan süre, kaybedilebilecek hesabın yanında küçük kalır. Hata durumunda uygulanacak davranış geri çekilmedir: art arda başarısız isteklerde bekleme süresi kısaltılmaz, uzatılır. Sunucu tarafından gelen yavaşlama ya da doğrulama sinyalleri bir engel değil, geri bildirimdir; doğru refleks temposu düşürmektir. Pratik kural olarak şunu söyleyebiliriz: taramanın toplam süresini kısaltmak istiyorsanız bekleme süresiyle değil filtreyle oynayın. Daha dar bir filtre, daha hızlı bir bottan her zaman daha etkilidir.
Toplama katmanının ürettiği şey bir dosya değil, bir kayıt kümesidir ve bu kümenin şekli baştan tanımlanmalıdır. Her ilan için üç grup alan vardır. Birincisi kimlik grubudur: ilan numarası, ilanın adresi ve kaydın hangi tarama görevinde üretildiği. İlan numarası doğal anahtardır; başlık ve fiyat gibi alanlar değişebildiği için tekilleştirmenin dayanağı olamaz. İkincisi ortak alanlar grubudur ve kategoriden bağımsız olarak hemen her ilanda bulunur: başlık, fiyat, ilan tarihi, konum bilgisi ve açıklama metni. Üçüncüsü kategoriye özgü alanlardır ve burada şema sabit değildir — bir konut ilanında metrekare, oda sayısı ve bulunduğu kat anlamlıyken bir vasıta ilanında kilometre, model yılı, vites ve yakıt tipi anlamlıdır. Bu üçüncü grubu sabit sütunlarla modellemeye çalışmak, kategori değiştiğinde boş sütun ormanı üretir; anahtar-değer çiftleri olarak taşıyıp dışa aktarımda sütunlaştırmak daha temiz sonuç verir. Toplama katmanında bir prensip daha önemlidir: okunan değer olduğu gibi saklanmalı, dönüştürme işi bu katmanda yapılmamalıdır. Fiyatı burada sayıya çevirmeye kalkarsanız, dönüşüm hatalıysa ham veriye geri dönemezsiniz. Ham metni koruyup normalizasyonu bir sonraki katmana bırakmak, hata ayıklanabilir bir hat kurar.
Uzun süren her toplama işi hata üretir; belirleyici olan hata olup olmaması değil, hataların sınıflandırılıp sınıflandırılmadığıdır. Pratikte dört sınıf yeterlidir. Birincisi geçici altyapı hatalarıdır: bağlantı kopması, zaman aşımı, sayfanın yüklenmemesi. Bunlar yeniden denemeye uygundur; artan bekleme süresiyle iki üç deneme çoğunu çözer. İkincisi kalıcı kaynak hatalarıdır: ilanın kaldırılmış olması ya da bağlantının artık geçerli olmaması. Bunları yeniden denemek anlamsızdır; kayıt “erişilemedi” durumuyla kapatılmalı ve kuyruğa geri konmamalıdır. Üçüncüsü şema hatalarıdır: sayfa açılır, içerik gelir, ama beklenen alan bulunamaz. Bu sınıf en tehlikelisidir çünkü sessizce boş kayıt üretir; doğru davranış, bulunamayan alan oranı belirli bir eşiği aştığında taramayı durdurup uyarı vermektir. Tek tek boş alanlar normaldir, toplu boşluk arayüz değişiminin sinyalidir. Dördüncüsü doğrulama ekranlarıdır. Burada ürünün tavrı nettir: bot güvenlik doğrulamasını aşmaya çalışmaz. Tarayıcı penceresi sizin önünüzde açık çalıştığı için böyle bir ekran çıktığında doğrulamayı siz yapar ve iş kaldığı yerden sürer. Bu ekranların sıklaşması genellikle temponun yüksek olduğunun göstergesidir; doğru refleks bekleme süresini artırmaktır. Her tarama sonunda yazılan kayıt sayısı ile atlanan ilan sayısı ayrı ayrı raporlanır, böylece sessiz kayıp olmaz.
Oturum yönetimi, tarayıcı tabanlı scraping’in en çok yanlış kurulan tarafıdır. Ürünün tercihi şudur: yeni ve boş bir tarayıcı bağlamı üretmek yerine kullanıcının kendi profili kullanılır. Yani siteye siz normalde nasıl giriyorsanız o profilde giriş yaparsınız ve bot o açık oturum üzerinden gezinir. Bunun üç sonucu var. Birincisi kimlik bilgileri hiçbir zaman programa girilmez ve cihazdan çıkmaz; ikincisi çerezler ve oturum durumu tarayıcının kendi saklama alanında kalır; üçüncüsü, gezinme deseni sizin normal kullanımınızla aynı kaynaktan gelir. Program hangi tarayıcı profiliyle çalışılacağını seçmenize izin verir, böylece günlük kullandığınız profille otomasyon profilini ayırabilirsiniz — bu, hem karışıklığı hem de yanlışlıkla botun sekmesine müdahale etme riskini azaltır. Headless yani penceresiz çalışma tarafında tercih bilinçli olarak görünür moddur. Sebebi iki tanedir: görünür pencere, doğrulama ekranı gibi durumlarda kullanıcının devralabilmesini mümkün kılar; ayrıca çalışmanın izlenebilir olması, hata ayıklamayı hem geliştirici hem kullanıcı tarafında kolaylaştırır. Pencereyi izleyebilir, gizleyebilir ya da tek tuşla durdurabilirsiniz. Kısacası oturum modeli “ayrı bir robot kimliği” değil, “sizin kendi oturumunuzda çalışan bir yardımcı” olarak kurgulanmıştır.
Teknik olarak yapılabilir olan her şey yapılmalı değildir ve bu ayrımı yazılım değil kullanan kişi kurar. Üç başlık altında toplanabilir. Birincisi platformun kullanım şartlarıdır: sitenin kendi kuralları neye izin verdiğini belirler ve otomasyon kullanan taraf olarak bunları bilmek sizin sorumluluğunuzdadır. Ürün, kısıtlama aşacak bir yetenek sunmaz ve sunduğunu iddia etmez; herkese açık sayfaları, sizin hesabınızla, insan temposuna yakın bir hızda okur. İkincisi kişisel veridir. Toplanan alanlar arasında gerçek kişiye ait iletişim bilgisi bulunuyorsa bu veri KVKK kapsamına girer ve saklama süresi, kullanım amacı, güvenlik tedbirleri ile silme yükümlülüğü veriyi elinde tutan tarafın sorumluluğudur. Toplamak ile pazarlama amacıyla iletişime geçmek ayrı konulardır; ticari elektronik ileti göndermeden önce izin ve ret hakkı kurallarının ayrıca değerlendirilmesi gerekir. Üçüncüsü makul kullanımdır: hedef sunucuya orantısız yük bindirmemek yalnızca nezaket değil, sürdürülebilirliğin de koşuludur — agresif çalışan bir kurulum önce sonuç kalitesini, sonra hesabı kaybettirir. Bu üç başlığı işin başında düşünmek, sonradan düzeltmeye çalışmaktan çok daha ucuzdur.
Genel kullanıma açık, ilan verisi döndüren resmî bir arayüz varsaymıyoruz ve ürün böyle bir kapıyı kullanmıyor. Toplama, herkese açık sayfaların tarayıcıda okunmasıyla yapılır. Bir platform resmî bir veri arayüzü sunuyorsa doğru yol her zaman odur; yoksa tarayıcı otomasyonu geriye kalan meşru yöntemdir.
Ürün görünür tarayıcı penceresiyle çalışacak şekilde tasarlandı. Bunun iki sebebi var: doğrulama ekranı gibi durumlarda işi siz devralabiliyorsunuz ve çalışmayı izleyebildiğiniz için sorun çıktığında nerede takıldığı görünüyor. Pencereyi gizleyebilirsiniz, ancak arka planda tamamen penceresiz bir kip amaçlanmadı.
Tasarım tercihi tek oturumdur. Paralel sekmelerle hızlanmak teknik olarak mümkün görünse de aynı hesapla eşzamanlı çok istek üretmek hem hedef sunucuya karşı orantısızdır hem de hesabınızı riske atar. Kazanılan süre, kaybedilebilecek hesabın yanında küçük kalır.
Seçiciler ürün tarafında bakım altındadır; arayüz değiştiğinde uyum güncellemesi yayınlanır ve abonelik süresince ek ücret istenmez. Kullanıcı tarafında serbest seçici yazma arayüzü sunulmuyor. Belirti genellikle bir sütunun toplu biçimde boş gelmesidir; bunu gördüğünüzde güncelleme bölümünü kontrol edin.
Hayır. Kuyruk ve ilerleme durumu diskte tutulduğu için kaldığı yerden devam edebilir. Bu, keşif ve ayrıntı çıkarımı katmanlarının ayrılmasının pratik faydasıdır: pahalı olan ikinci katman kesilse bile ucuz olan birinci katman tekrarlanmak zorunda kalmaz.
Evet. Toplanan kayıtlar Excel ve CSV olarak dışa aktarılabildiği için istediğiniz dilde okuyup kendi hattınıza besleyebilirsiniz. Doğrudan bir programlama arayüzü ya da veritabanı bağlantısı sunulmuyor; entegrasyon dosya üzerinden kurulur.
Aşmaya çalışmıyor. Tarayıcı penceresi önünüzde açık çalıştığı için doğrulamayı siz yapar ve iş kaldığı yerden sürer. Bu ekranların sıklaşması genellikle temponun yüksek olduğunun işaretidir; doğru refleks bekleme süresini kısaltmak değil artırmaktır.