2 पॉइंट द्वारा GN⁺ 2024-08-07 | 1 टिप्पणियां | WhatsApp पर शेयर करें

सुपरमार्केट की कीमतों को ट्रैक करना

  • दिसंबर 2022 में, ग्रीस की तीन प्रमुख सुपरमार्केट चेन में कीमतों के बदलाव को ट्रैक करने के लिए एक वेबसाइट बनाई गई।
  • इस प्रक्रिया में कई समस्याओं को हल करना पड़ा और बहुत-सी सीख मिली।

JavaScript साइटों को scrape करना

  • मुख्य समस्या यह थी कि वेबसाइटें JavaScript से render होती थीं।
  • Playwright का उपयोग करके web browser को प्रोग्रामेटिक तरीके से नियंत्रित किया गया।
  • Playwright Chromium, Safari, Firefox browsers को सपोर्ट करता है और Node, Java, .NET, Python के साथ इस्तेमाल किया जा सकता है।
  • infinite scroll को handle करने और product जानकारी निकालने के लिए code लिखा गया।

ऑटोमेशन

  • M1 MacBook Pro पर पूरे सुपरमार्केट को scrape करने में 50 मिनट से 2 घंटे 30 मिनट तक लगते थे।
  • development और testing के लिए यह अच्छा था, लेकिन एक अधिक स्थायी समाधान की जरूरत थी।

पुराना laptop इस्तेमाल करें?

  • 2013 का एक पुराना laptop आज़माया गया, लेकिन उसका प्रदर्शन बहुत निराशाजनक था।

cloud का उपयोग?

  • AWS बहुत महंगा था, जबकि Hetzner काफी सस्ता था।
  • Hetzner के server का उपयोग करने का निर्णय लिया गया।

पुराना laptop और cloud दोनों का उपयोग!

  • cloud server पर scraping को automate किया गया, और पुराने laptop को CI server के रूप में इस्तेमाल किया गया।
  • Concourse का उपयोग करके pipeline सेट की गई और scraping jobs को रोज़ चलाया गया।

IP प्रतिबंध से बचना

  • Akamai firewall rules की वजह से non-residential IP addresses से आने वाले requests block हो रहे थे।
  • Tailscale का उपयोग करके requests को ऐसे दिखाया गया मानो वे घर के IP address से आ रहे हों।

विफलता के कारण और समय

  • scraping project वेबसाइट developers के बदलावों से प्रभावित होता है।
  • विफलता के दो प्रकार थे: breaking changes और non-breaking changes।
  • जल्दी feedback मिलना बहुत महत्वपूर्ण है।

ऑप्टिमाइज़ेशन

  • email alerts, hysteresis, timeout, retry settings जैसी कई optimization की गईं।
  • बड़े server के उपयोग और data fetch कम करने से performance सुधारी गई।

लागत

  • Hetzner पर server उपयोग की लागत बहुत कम थी।
  • Cloudflare की R2 free tier का उपयोग करके data storage की लागत बचाई गई।

निष्कर्ष

  • सुपरमार्केट की कीमतों में बदलाव को ट्रैक करने के लिए scraping pipeline के प्रमुख घटकों का वर्णन किया गया है।

GN⁺ की संक्षिप्त जानकारी

  • यह लेख सुपरमार्केट की कीमतों में बदलाव को ट्रैक करने के लिए Playwright और cloud services के उपयोग के अनुभव को साझा करता है।
  • इसमें JavaScript से render होने वाली वेबसाइटों को scrape करने के तरीके, साथ ही automation और optimization के तरीकों पर चर्चा की गई है।
  • यह Hetzner और Tailscale का उपयोग करके लागत घटाने और IP प्रतिबंध से बचने के तरीकों को समझाता है।
  • यह लेख web scraping और automation में रुचि रखने वाले लोगों के लिए उपयोगी हो सकता है।

1 टिप्पणियां

 
GN⁺ 2024-08-07
Hacker News राय
  • समान समस्या का अनुभव साझा किया

    • 30 देशों में lens price comparison वेबसाइट चला रहे हैं
    • वेबसाइट के HTML में बदलाव बड़ी समस्या है
    • 100 से अधिक वेबसाइटों में product matching शुरुआती बड़ा बाधक था
    • regular expression से ज़्यादातर काम हो जाता है, लेकिन manual mapping की ज़रूरत पड़ती है
    • scraper और infrastructure बनाना अपेक्षाकृत आसान है, maintenance मुश्किल है
    • जब product गायब हो जाता है तो error के कारण का पता लगाना कठिन होता है
    • यह मज़ेदार project है, लेकिन चुनौतीपूर्ण और झुंझलाहट भरी समस्याएँ सुलझानी पड़ती हैं
  • न्यूज़ीलैंड में इसी तरह का project चल रहा है

    • Playwright और Typescript का उपयोग, cloud storage में Parquet files सहेजी जाती हैं
    • अभी सिर्फ data collection कर रहे हैं, अभी display नहीं कर रहे
    • Akamai और Cloudflare जैसी reverse proxy services को bypass करना मुख्य काम है
    • न्यूज़ीलैंड में कम-से-कम 3 startup यही काम कर रहे हैं
    • inflation बहुत innovation को प्रेरित कर रही है
    • सुपरमार्केट कीमतों को जटिल बनाने वाले patterns देखे गए
  • इसी तरह की वेबसाइट बनाई और काफ़ी रुचि मिली

    • Linode server पर 2GB RAM, 5 IPv4, 1000 IPv6 का उपयोग
    • सभी products को अधिकतम 40 मिनट के अंतराल पर scrape किया जाता है
    • curl impersonate और JSON scraping का उपयोग
    • 90% market Ajax calls के ज़रिए कीमतें देता है, बाकी 10% के लिए regular expression का उपयोग
    • वेबसाइट: economizafloripa.com.br
  • ऑस्ट्रेलिया की दो प्रमुख supermarket chains price analysis AI algorithm के ज़रिए एकाधिकार जैसी स्थिति बना सकती हैं

    • AI algorithm मिलकर profit maximize कर सकते हैं
    • public price data के माध्यम से कानूनी तौर पर, और supply cost या product per-profit data साझा करके ग़ैरकानूनी तौर पर यह संभव है
    • उपभोक्ता अधिकतम किए गए मुनाफ़े की कीमत चुकाते हैं
  • स्वीडिश market में 8 साल से अधिक समय से सक्रिय हैं

    • वेबसाइट: matspar.se
    • ग्राहक सभी प्रमुख online stores के products की तुलना कर सकते हैं और cart में जोड़ सकते हैं
    • total price comparison के बाद अपनी पसंद की store में cart export कर सकते हैं
    • हर दिन 3 करोड़ से अधिक prices scrape की जाती हैं
  • price transparency हो तो tracking और आसान हो जाएगी

    • उदाहरण: अलग-अलग postal code और grocery stores में oat milk की कीमत की तुलना
    • "Shrinkflation" को track किया जा सकता है (उसी कीमत पर कम मात्रा देना)
    • सिर्फ कीमत ही नहीं, gram प्रति cost भी देखनी चाहिए
  • scraper fail न हो, इसके लिए बदलाव करने के तरीके

    • automatic checks जोड़े जा सकते हैं ताकि कीमतें असामान्य रूप से न बदलें
    • उदाहरण: कीमत 100% से अधिक न बदले, active products की संख्या 20% से अधिक न बदले
  • नए क्षेत्र में शिफ्ट होने पर price tracking का अनुभव साझा किया

    • दो markets या बड़े stores में सस्ती कीमत पर खरीदारी करना ज़्यादा आसान होता है
    • यूरोप: Aldi/Lidl, अमेरिका: Costco/Trader Joe's
    • ऑनलाइन: CamelCamelCamel/Amazon
    • सीधे manufacturer से खरीदना सस्ता पड़ सकता है
  • scraping से भी ज़्यादा कठिन है लगातार अधिक परिष्कृत होते blockers को bypass करना

    • residential proxies को लगातार rotate करना पड़ता है और data scraping patterns से बचना पड़ता है
    • कुछ supermarkets network requests को छिपा देते हैं
    • mobile app में network requests और data देखना भी block कर दिया जाता है
    • लागत और लगातार development work की वजह से इसे सार्थक नहीं माना गया
  • client-side JavaScript rendering की समस्या

    • विडंबना यह है कि साइट को भरने वाला data सरल JSON format में मिलता है, इसलिए scraping और ज़्यादा reliable हो जाती है