Scarnox · Blog

वेब स्क्रैपिंग से प्राइस मॉनिटरिंग: एक व्यावहारिक गाइड

प्राइस मॉनिटरिंग का मतलब है कई साइटों पर किसी उत्पाद की कीमत एक शेड्यूल पर जांचना, और जो दिखे उसे रिकॉर्ड करना ताकि समय के साथ तुलना हो सके। रिटेलर, मार्केटप्लेस और विश्लेषक सभी इसे इस्तेमाल करते हैं। प्राइस स्क्रैपिंग कैप्चा से टकराने के सबसे आम तरीकों में से भी एक है, इसलिए डिज़ाइन सही करना ज़रूरी है। यह गाइड बताती है कि क्या मॉनिटर करें, ऐसे पेज से नंबर कैसे पार्स करें जो कभी पार्स होने के लिए बने ही नहीं थे, बदलावों को कैसे स्टोर और अलर्ट करें, और यह काम करते हुए साइट के नियमों के भीतर कैसे रहें।

ऐसे स्रोत से शुरू करें जिसका उपयोग आपको करने की अनुमति है

कोई भी कोड लिखने से पहले जांचें कि क्या साइट डेटा पाने का कोई आधिकारिक तरीका देती है: प्रोडक्ट फ़ीड, API, या पार्टनर प्रोग्राम। ये स्क्रैपिंग से ज़्यादा भरोसेमंद हैं, और ज़्यादातर कानूनी व तकनीकी जोखिम हटा देते हैं। स्क्रैपिंग उन सार्वजनिक पेजों के लिए आखिरी विकल्प है जहां कोई आधिकारिक रास्ता नहीं है, और शर्तें व robots.txt फिर भी लागू होते हैं। सामान्य सवालों के लिए कानूनी अवलोकन देखें।

पांच हिस्सों में आर्किटेक्चर

एक भरोसेमंद मॉनिटर में पांच हिस्से होते हैं, और उन्हें अलग रखने से डिबग करना आसान होता है:

  1. शेड्यूलर। तय करता है कि कौन से प्रोडक्ट पेज कब देखने हैं। विज़िट पूरे दिन में फैलाएं, सब कुछ एक ही मिनट पर न जांचें।
  2. फ़ेचर। पेज डाउनलोड करता है, शालीन गति, retries और कैश के साथ।
  3. पार्सर। कीमत, मुद्रा के संदर्भ और स्टॉक की स्थिति निकालता है।
  4. स्टोर। हर अवलोकन को टाइमस्टैंप के साथ रखता है, ताकि आपके पास इतिहास हो।
  5. अलर्टर। नई वैल्यू की तुलना पिछली से करता है और जब वह आपकी सेट की हुई सीमा पार करे तो सूचना देता है।

गंदे पेजों से कीमत पार्स करें

कीमतें कई रूपों में आती हैं: हज़ार विभाजक के साथ, दशमलव कॉमा के साथ, किसी लेबल के बाद नंबर के साथ, या कई एलिमेंट में बंटी हुई। पार्सर छोटा रखें और उसे असली उदाहरणों पर टेस्ट करें। यहां एक ऐसा संस्करण है जो आम फ़ॉर्मेट मानता है, जिसमें हज़ार के लिए कॉमा और दशमलव के लिए बिंदु होता है। दूसरे फ़ॉर्मेट को इसे कॉल करने से पहले सामान्य करें।

import re
from decimal import Decimal, InvalidOperation

PRICE_PATTERN = re.compile(r"\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?|\d+(?:\.\d{1,2})?")

def parse_price(text: str) -> Decimal | None:
    """टेक्स्ट का पहला नंबर Decimal के रूप में लौटाएं, या None।"""
    match = PRICE_PATTERN.search(text.replace("\xa0", " "))
    if not match:
        return None
    try:
        return Decimal(match.group(0).replace(",", ""))
    except InvalidOperation:
        return None

print(parse_price("Now 1,249.50 in stock"))  # Decimal('1249.50')
print(parse_price("Sold out"))               # None

जिस चीज़ की आप तुलना या जोड़ करेंगे, उसके लिए float नहीं, Decimal इस्तेमाल करें। फ्लोटिंग-पॉइंट राउंडिंग से दो बराबर कीमतें अलग दिख सकती हैं। पार्स की गई वैल्यू के साथ कच्चा टेक्स्ट भी रखें, ताकि बाद में पार्सर का बग ठीक करते समय हर पेज दोबारा न लाना पड़े।

इतिहास स्टोर करें और बदलाव पहचानें

एक कीमत एक स्नैपशॉट है। मॉनिटर की असली कीमत उसके इतिहास में है। हर अवलोकन के लिए एक पंक्ति रखें, जिसमें प्रोडक्ट ID, स्रोत, टाइमस्टैंप, पार्स की गई वैल्यू और कच्चा टेक्स्ट हो। फिर अलर्ट पिछली पंक्ति से सरल तुलना भर रह जाता है। केवल सार्थक बदलावों पर अलर्ट करें, जैसे एक तय प्रतिशत से ज़्यादा गिरावट, या प्रोडक्ट का स्टॉक से बाहर होना, ताकि आप शोर में न डूबें।

वेरिएंट और बंडल संभालें

एक प्रोडक्ट पेज अक्सर कई कीमतें दिखाता है: हर साइज़ या रंग की अलग, बंडल कीमत, मेंबर कीमत, या चयन करने के बाद दिखने वाली कीमत। बनाने से पहले तय करें कि मॉनिटर क्या रिकॉर्ड करेगा। एक आम तरीका है कीमत के साथ वेरिएंट ID स्टोर करना, ताकि एक साइज़ में बदलाव पूरे प्रोडक्ट में बदलाव जैसा न दिखे। "से शुरू" कीमतों और काटी हुई मूल कीमतों के साथ सावधान रहें, क्योंकि गलत नंबर उठाने वाला पार्सर झूठे अलर्ट देगा। हर वैल्यू के साथ लेबल का टेक्स्ट भी स्टोर करें, ताकि अलर्ट गलत लगे तो देखा जा सके कि क्या पढ़ा गया था।

शालीन शेड्यूलिंग

हर प्रोडक्ट को ऐसे अंतराल पर जांचें जो इस बात से मेल खाए कि उसकी कीमत वास्तव में कितनी बार बदलती है। जो प्रोडक्ट रोज़ बदलता है, उसे हर घंटे जांचने की ज़रूरत नहीं। हर विज़िट में जिटर जोड़ें, हर घंटे प्रति साइट रिक्वेस्ट की संख्या सीमित करें, और चुने हुए अंतराल के लिए नतीजे कैश करें। ये आदतें आपका लोड कम और डेटा सुसंगत रखती हैं।

जब पेज आपको ब्लॉक करे

प्राइस पेज स्वचालित एक्सेस के आम निशाने होते हैं, इसलिए आपको ब्लॉक, रेट लिमिट या कैप्चा दिख सकता है। 429 या 503 दिखे तो पीछे हटें, और जो साइट लगातार मना करती रहे उस पर जाना बंद करें। अगर कोई कैप्चा ऐसे पेज पर दिखे जिसे स्वचालित करने की आपको अनुमति है, तो Scarnox पर लाइव कैप्चा टाइप PopularCaptcha है। PopularCaptcha Python गाइड टोकन फ़्लो दिखाती है। कोई और टूल जोड़ने से पहले बिना ब्लॉक हुए स्क्रैप करें पढ़ें, क्योंकि अक्सर पेसिंग ही किसी भी अतिरिक्त मशीनरी से ज़्यादा समस्या हल करती है।

कुछ पेज अपनी कीमतें JavaScript से रेंडर करते हैं। उनके लिए JavaScript वेबसाइट स्क्रैप करना में दिया तरीका अपनाएं।

ज़िम्मेदारी से स्क्रैप करें

अगले कदम

मुफ्त ट्रायल क्रेडिट के साथ शुरू करें, कार्ड की ज़रूरत नहीं: खाता बनाएं और उस पेज पर PopularCaptcha फ्लो आज़माएं जिसे स्वचालित करने की आपको अनुमति है। मौजूदा दरों के लिए प्राइसिंग पेज देखें।