Süpermarket fiyatlarını takip etmek
- Aralık 2022'de, Yunanistan'daki üç büyük süpermarketin fiyat değişimlerini takip etmek için bir web sitesi oluşturuldu.
- Bu süreçte çeşitli sorunların çözülmesi gerekti ve çok sayıda ders çıkarıldı.
JavaScript sitelerini scrape etmek
- Ana sorun, JavaScript ile render edilen web siteleriydi.
- Web tarayıcısını programatik olarak kontrol etmek için Playwright kullanıldı.
- Playwright; Chromium, Safari ve Firefox tarayıcılarını destekler ve Node, Java, .NET, Python ile birlikte kullanılabilir.
- Sonsuz kaydırmayı işlemek ve ürün bilgilerini çıkarmak için kod yazıldı.
Otomasyon
- M1 MacBook Pro'da tüm süpermarketi scrape etmek 50 dakika ile 2 saat 30 dakika arasında sürüyordu.
- Geliştirme ve test için iyiydi, ancak daha kalıcı bir çözüme ihtiyaç vardı.
Eski bir dizüstü bilgisayar kullanmak?
- 2013'ten kalma eski bir dizüstü bilgisayar denenmiş olsa da performansı oldukça hayal kırıklığı yaratmıştı.
Bulut kullanmak?
- AWS çok pahalıydı, Hetzner ise çok daha ucuzdu.
- Hetzner sunucularını kullanmaya karar verildi.
Eski dizüstü bilgisayar ve bulut birlikte!
- Scraping işlemi bulut sunucusunda otomatikleştirildi, eski dizüstü bilgisayar ise CI sunucusu olarak kullanıldı.
- Concourse ile bir pipeline kuruldu ve scraping işleri her gün çalıştırıldı.
IP kısıtlamasını aşmak
- Akamai güvenlik duvarı kuralları nedeniyle yerleşik olmayan IP adreslerinden gelen istekler engelleniyordu.
- İsteklerin ev IP adresinden geliyormuş gibi görünmesi için Tailscale kullanıldı.
Neden ve ne zaman bozulur
- Scraping projeleri, web sitesi geliştiricilerinin yaptığı değişikliklerden etkilenir.
- İki tür başarısızlık vardır: breaking change ve non-breaking change.
- Geri bildirimi hızlı almak önemlidir.
Optimizasyon
- E-posta bildirimleri, histerezis, timeout, retry ayarları gibi çeşitli optimizasyonlar yapıldı.
- Daha büyük bir sunucu kullanarak ve veri fetch miktarını azaltarak performans iyileştirildi.
Maliyet
- Hetzner'de sunucu kullanımı oldukça ucuzdu.
- Veri depolama maliyetini azaltmak için Cloudflare'in R2 ücretsiz katmanı kullanıldı.
Sonuç
- Süpermarket fiyat değişimlerini takip etmek için kurulan scraping pipeline'ının temel bileşenleri açıklanıyor.
GN⁺ Özeti
- Bu yazı, süpermarket fiyat değişimlerini takip etmek için Playwright ve bulut servislerinden yararlanma deneyimini paylaşıyor.
- JavaScript ile render edilen web sitelerini scrape etme yöntemleri ile otomasyon ve optimizasyon yaklaşımlarını ele alıyor.
- Hetzner ve Tailscale kullanarak maliyetin nasıl düşürüldüğünü ve IP kısıtlamalarının nasıl aşıldığını açıklıyor.
- Yazı, web scraping ve otomasyonla ilgilenenler için faydalı olabilir.
1 yorum
Hacker News görüşleri
Benzer bir sorun yaşamış biri deneyimini paylaşıyor
Yeni Zelanda'da benzer bir proje yürütülüyor
Benzer bir web sitesi yapıp büyük ilgi görmüş biri
curl impersonateve JSON scraping kullanmışAvustralya'nın iki büyük süpermarketinin fiyat analiz eden yapay zeka algoritmalarıyla tekel benzeri bir yapı kurabileceği söyleniyor
İsveç pazarında 8 yıldan uzun süredir faaliyet gösteren biri
Fiyat şeffaflığı olsaydı takip çok daha kolay olurdu
Scraper'ın bozulmaması için değişiklikleri yönetme yöntemleri
Yeni bir bölgeye taşındığında fiyat takibi yaptığını paylaşan biri
Scraping'den çok, giderek daha gelişmiş engelleme sistemlerini aşmak zorlaşıyor
İstemci tarafı JavaScript ile render edilen sayfalardaki sorun