वापस ब्लॉग पर

Shopify टूल निर्माताओं के लिए मूल्य निगरानी: एक विश्वसनीय डेटा पाइपलाइन डिज़ाइन करना

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

12-Oct-2026

संक्षेप:

  • Shopify ऐप्स के लिए प्राइस मॉनिटरिंग को वेरिएंट‑लेवल हिस्ट्री चाहिए। हर कीमत के साथ चुना गया विकल्प, मुद्रा, स्रोत URL, और अवलोकन समय बिल्कुल सहेजें।
  • किसी गायब अवलोकन को प्राइस बदलाव में नहीं बदलना चाहिए। कलेक्शन की विफलताओं को पुष्टि की गई प्रोडक्ट अनुपलब्धता से अलग रखें।
  • प्रोडक्ट मैचिंग को अपना सबूत चाहिए। किसी स्टोर‑लोकल SKU से यह सिद्ध नहीं होता कि दो व्यापारी एक ही आइटम बेच रहे हैं।
  • ईकॉमर्स प्राइस ट्रैकिंग के लिए ब्राउज़र ऑटोमेशन कलेक्शन लेयर में होना चाहिए। आपका एप्लीकेशन अब भी नॉर्मलाइज़ेशन, टेनेंट आइसोलेशन, और अलर्ट नियमों की ज़िम्मेदारी रखता है।
  • शुरुआत मुफ्त। नए Scrapeless अकाउंट्स के साथ मुफ्त Scraping Browser रनटाइम शामिल है — app.scrapeless.com पर साइन अप करें।

परिचय: एक कीमत किसी ऑफ़र का अवलोकन है

एक Shopify प्रोडक्ट के अलग‑अलग वेरिएंट्स के लिए अलग कीमतें हो सकती हैं। कोई प्राइस मॉनिटरिंग ऐप जो सिर्फ प्रोडक्ट टाइटल और सबसे सस्ती दिखने वाली कीमत रिकॉर्ड करता है, वह छूट दिखा सकता है जबकि खरीदार ने बस कोई दूसरा साइज चुना हो।

उपयोगी इकाई वह ऑफ़र है जिसे किसी विशिष्ट स्टोरफ़्रंट कॉन्टेक्स्ट के तहत देखा गया हो। आपकी पाइपलाइन को उस कॉन्टेक्स्ट को अलर्ट तक पूरी तरह सुरक्षित रखना होगा। वरना, मुद्रा में बदलाव, कोई अनुपलब्ध वेरिएंट, या अधूरा एक्सट्रैक्शन एक व्यावसायिक घटना जैसा लग सकता है।

यह लेख Shopify टूल बिल्डर्स के लिए एक प्रतियोगी प्राइस मॉनिटरिंग डेटा पाइपलाइन डिज़ाइन करता है। उदाहरण के रूप में दिया गया इन्गेशन स्टेप किसी एकत्रित सार्वजनिक प्रोडक्ट के वेरिएंट अवलोकनों को SQLite में स्टोर करता है; आसपास की आर्किटेक्चर बताती है कि इन अवलोकनों को टेनेंट‑विशिष्ट सिग्नल में कैसे बदला जाए। व्यापक मल्टी‑रिटेलर कलेक्शन पैटर्न के लिए, competitive pricing pipeline पर विचार करें।

पाइपलाइन एक नज़र में

कोई विश्वसनीय प्राइस मॉनिटरिंग पाइपलाइन स्रोत संग्रह को व्यावसायिक व्याख्या से अलग रखती है।

चरण इनपुट आउटपुट कब अस्वीकार या होल्ड करें
स्कोप टेनेंट की अनुमोदित वॉचलिस्ट स्टोर, प्रोडक्ट, वेरिएंट, मार्केट स्रोत या एक्सेस अनुमति स्पष्ट नहीं है
कलेक्ट सार्वजनिक प्रोडक्ट URL और कॉन्टेक्स्ट रॉ रिस्पॉन्स और कैप्चर समय प्रोडक्ट पहचान की पुष्टि नहीं हो पा रही
नॉर्मलाइज़ प्रोडक्ट और वेरिएंट फ़ील्ड्स टाइप्ड अवलोकन मुद्रा या प्राइस यूनिट्स अस्पष्ट हैं
मैच अवलोकन और मर्चेंट कैटलॉग सबूत‑समर्थित प्रोडक्ट एसोसिएशन विकल्प या पैक साइज अलग है
स्टोर वैलिडेटेड अवलोकन अपरिवर्तनीय हिस्ट्री और नवीनतम दृश्य अवलोकन की कुंजी पहले से मौजूद है
डिसाइड तुलनीय वर्तमान और पूर्व ऑफ़र प्राइस‑चेंज इवेंट पूर्व अवलोकन बासी या गायब है
डिलीवर इवेंट और सब्सक्रिप्शन नियम ऐप नोटिफिकेशन या डैशबोर्ड अपडेट टेनेंट उस वॉच के लिए सब्सक्राइब नहीं है

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

चरण 1 — कलेक्शन से पहले वॉच कॉन्ट्रैक्ट परिभाषित करें

वॉच कॉन्ट्रैक्ट यह तय करता है कि टेनेंट किस ऑफ़र की मॉनिटरिंग ऐप से अपेक्षा करता है।

स्टोरफ़्रंट होस्ट, प्रोडक्ट URL, चुने गए विकल्पों का संयोजन, लक्षित मार्केट, अपेक्षित मुद्रा, और स्वीकार्य पुरानापन शामिल करें। अपने कैटलॉग पहचानकर्ता को प्रतियोगी पहचानकर्ता के साथ रखें; एक को दूसरे से प्रतिस्थापित न करें।

किसी व्यापारी के स्टोर से जुड़ा ऐप सार्वजनिक प्रतियोगी मॉनीटर से अलग अथॉरिटी बाउंड्री रखता है। अधिकृत मर्चेंट कैटलॉग एक्सेस व्यापारी के अपने प्रोडक्ट्स के लिए उपयुक्त है। सार्वजनिक प्रतियोगी कलेक्शन को सार्वजनिक स्टोरफ़्रंट सतहों पर ही रहना चाहिए और स्टोर के नियमों व एक्सेस कंट्रोल्स का सम्मान करना चाहिए।

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

चरण 2 — सार्वजनिक वेरिएंट डेटा और मुद्रा साथ में कलेक्ट करें

कलेक्टर को स्रोत के वेरिएंट फ़ील्ड्स बनाए रखने चाहिए और उसी स्टोरफ़्रंट कॉन्टेक्स्ट के लिए रिपोर्ट की गई मुद्रा की पहचान करनी चाहिए।

Shopify का locale-aware product response प्रोडक्ट और वेरिएंट जानकारी उजागर करता है। कोई सुलभ एंडपॉइंट एक उपयोगी एक्सट्रैक्शन स्रोत है, लेकिन यह गारंटी नहीं है कि हर स्टोरफ़्रंट पूरा कैटलॉग या हर ऑफ़र उजागर करता हो।
नीचे दिया गया उदाहरण किसी ब्राउज़र वर्कर के सार्वजनिक Taylor Stitch ऑब्जर्वेशन को इन्गेस्ट करता है। वर्कर सार्वजनिक प्रोडक्ट URL खोजता है, वेरिएंट डेटा और ब्राउज़र कॉन्टेक्स्ट में रीड-ओनली कार्ट रिस्पॉन्स पढ़ता है, और एक JSON एन्वेलप एमिट करता है। कैप्चर किए गए एन्वेलप में छह वेरिएंट थे और USD की पहचान की गई थी। इन्गेस्टन स्टेप पूर्णांक प्राइस फ़ील्ड्स को price_raw के रूप में संरक्षित रखता है, बजाय इसके कि कोई मुद्रा रूपांतरण अनुमान लगाए। यह एक उदाहरण ऑब्जर्वेशन है, भविष्य के असॉर्टमेंट के बारे में कोई वादा नहीं।

Prerequisites and Run Instructions

Python का उपयोग करें, जिसमें उसकी स्टैंडर्ड-लाइब्रेरी SQLite सपोर्ट और एक राइटेबल डायरेक्टरी हो। आपका अनुमत ब्राउज़र कलेक्टर पहले observation.json को product_id, source_url, currency, observed_at, और variants एरे के साथ सेव करे, जिसमें variant_id, options, price_raw, compare_at_price_raw, और available शामिल हों। सोर्स SKU वैकल्पिक है। निम्नलिखित को ingest_prices.py के रूप में सेव करें, फिर उस कैप्चर के बगल में python3 ingest_prices.py चलाएँ। किसी तृतीय-पक्ष Python पैकेज की आवश्यकता नहीं है। इनपुट कैप्चर का न होना एक प्रीरिक्विज़िट फेल्योर है, न कि खाली प्रोडक्ट कैटलॉग।

python Copy
import json
import sqlite3
from urllib.parse import urlsplit

with open("observation.json", encoding="utf-8") as capture:
    observation = json.load(capture)
required = ("product_id", "source_url", "currency", "observed_at")
if any(not observation.get(field) for field in required):
    raise ValueError("Incomplete product identity, source, currency, or time")
variants = observation.get("variants")
if not isinstance(variants, list) or not variants:
    raise ValueError("No validated variant observations")
source_url = observation["source_url"]
source = urlsplit(source_url)
if source.scheme != "https" or not source.netloc:
    raise ValueError("Expected an HTTPS storefront source")
store = "https://" + source.netloc
rows = []
for variant in variants:
    if not variant.get("variant_id") or type(variant.get("price_raw")) is not int:
        raise ValueError("Variant identity or integer raw price is missing")
    if type(variant.get("available")) is not bool:
        raise ValueError("Variant availability must be observed")
    rows.append((store, str(observation["product_id"]), str(variant["variant_id"]),
                 observation["currency"], observation["observed_at"],
                 variant["price_raw"], variant.get("compare_at_price_raw"),
                 variant["available"], json.dumps(variant.get("options", [])),
                 source_url))

with sqlite3.connect("prices.sqlite") as db:
    db.execute("""CREATE TABLE IF NOT EXISTS observations (
        store TEXT, product_id TEXT, variant_id TEXT, currency TEXT,
        observed_at TEXT, price_raw INTEGER, compare_at_price_raw INTEGER,
        available INTEGER, options_json TEXT, source_url TEXT,
        PRIMARY KEY (store, variant_id, currency, observed_at)
    )""")
    db.executemany("INSERT OR IGNORE INTO observations VALUES (?,?,?,?,?,?,?,?,?,?)", rows)
    saved = db.execute("SELECT COUNT(*) FROM observations WHERE observed_at = ?",
                       (observation["observed_at"],)).fetchone()[0]
print(json.dumps({"product_id": str(observation["product_id"]),
                  "currency": observation["currency"],
                  "variants_saved": saved, "database": "prices.sqlite"}))

यह इन्गेस्टन स्टेप किसी अधूरे एन्वेलप पर रुक जाता है। प्रोडक्शन वर्कर को कलेक्शन स्टेटस को प्राइस टेबल के बाहर रिकॉर्ड करना चाहिए ताकि ऐप बिना अंतिम वैध ऑफ़र को ओवरराइट किए गैप की व्याख्या कर सके। कलेक्शन वर्कर को अपने स्टोरफ्रंट के लिए सत्यापित लोकैल-अवेयर प्रोडक्ट और कार्ट पाथ्स का उपयोग करना चाहिए; इन्गेस्टन उसे प्राप्त कॉन्टेक्स्ट को संरक्षित रखता है।

Stage 3 — तुलना क्षमता गढ़े बिना ऑफ़र को नॉर्मलाइज़ करें

नॉर्मलाइज़ेशन प्रतिनिधित्व बदलते हुए अर्थ को संरक्षित रखता है।

सोर्स-विशिष्ट मनी एडॉप्टर का उपयोग करें। मूल राशि, मुद्रा कोड, और प्रलेखित यूनिट कन्वेंशन को बनाए रखें; उस कन्वेंशन की पुष्टि करने के बाद ही डिस्प्ले अमाउंट व्युत्पन्न करें। व्युत्पन्न मौद्रिक मानों के लिए दशमलव अंकगणित का उपयोग करें। असंबंधित फ़ीड फ़ॉर्मैट्स पर एक सार्वभौमिक डिवाइज़र लागू न करें।

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

available को ऑब्ज़र्व्ड बूलियन के रूप में या अज्ञात के रूप में रिकॉर्ड करें। सार्वजनिक उपलब्धता इन्वेंटरी काउंट नहीं है। एक गायब SKU नल ही रहता है; इसे किसी गढ़े हुए कैटलॉग आइडेंटिफ़ायर से प्रतिस्थापित नहीं किया जाना चाहिए।

Scrapeless के साथ स्क्रैपिंग शुरू करें

Scrapeless के साथ अपने वेब स्क्रैपिंग और ऑटोमेशन वर्कफ़्लो को पावर-अप करें!
आज ही साइन अप करें और $5 फ्री क्रेडिट पाएं — कोई क्रेडिट कार्ड आवश्यक नहीं।

अभी अपना फ्री क्रेडिट Scrapeless Dashboard में क्लेम करें।

Stage 4 — मैच एविडेंस और इम्यूटेबल हिस्ट्री को बनाए रखें

प्राइस हिस्ट्री तभी उपयोगी है जब प्रोडक्ट असोसिएशन व्याख्यायोग्य बना रहे।

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

ऑब्ज़र्वेशन्स को केवल-एपेंड रखें और लेटेस्ट-ऑफ़र व्यू अलग से बनाएं। यदि कोई एक्सट्रैक्टर बदलता है, तो उसके वर्शन को ऑब्ज़र्वेशन के साथ बनाए रखें। data provenance model वह सामान्य ढाँचा प्रदान करता है जो किसी परिणाम को उसे उत्पन्न करने वाली गतिविधि और स्रोत से संबंधित करता है।

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

Stage 5 — केवल तुलनीय ऑब्ज़र्वेशन्स से अलर्ट एमिट करें

अलर्ट को समान आइडेंटिटी और मार्केट कॉन्टेक्स्ट के अंतर्गत वैध ऑफ़र्स की तुलना करनी चाहिए।

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

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

HTTP सक्सेस कोड किसी उपयोगी प्रोडक्ट रिकॉर्ड को प्रमाणित नहीं करता। HTTP response semantics रिक्वेस्ट आउटकम का वर्णन करते हैं; आपके वैलिडेटर को अब भी आइडेंटिटी, करेंसी, और सोर्स कंटेंट की जाँच करनी होगी।

Where a Cloud Browser Fits the Price Monitoring Service

एक क्लाउड ब्राउज़र उन स्टोरफ़्रंट अवस्थाओं को एकत्र करने में मदद करता है जिनके लिए JavaScript या इंटरेक्शन की आवश्यकता होती है।

जब वॉच को रेंडर किए गए विकल्प चयन या एक सुसंगत ब्राउज़र सत्र की आवश्यकता हो, तो Scrapeless Agent Browser का उपयोग करें। क्लाउड ब्राउज़र आपका प्रोडक्ट मैचिंग पॉलिसी, टेनेंट अनुमतियाँ, या मूल्य निर्धारण निर्णय उपलब्ध नहीं कराता। इसके रनटाइम ख़र्चों की तुलना अपने कलेक्शन बजट से Scrapeless pricing का उपयोग करके करें।

कलेक्शन को अनुक्रमिक रूप से शुरू करें और केवल स्टोर की घोषित सीमाओं और अपने अकाउंट की क्षमता के भीतर ही विस्तार करें। शेड्यूल करने से पहले एक्सेस नीतियाँ पढ़ें। रोबोट्स एक्सक्लूज़न प्रोटोकॉल क्रॉलर प्राथमिकताओं का वर्णन करता है; यह एक्सेस ऑथराइज़ेशन का विकल्प नहीं है।

निष्कर्ष: हर मूल्य परिवर्तन को व्याख्यायोग्य बनाएं

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

अपनी Shopify प्राइस मॉनिटरिंग पाइपलाइन बनाने के लिए तैयार?

हमारे समुदाय से जुड़ें, एक मुफ़्त प्लान प्राप्त करें और उन डेवलपरों से कनेक्ट हों जो ईकॉमर्स डेटा सेवाएँ बना रहे हैं: Discord · Telegram.

app.scrapeless.com पर साइन अप करें और कलेक्शन लेयर को अपनी अनुमोदित स्टोरफ़्रंट वॉचलिस्ट के अनुसार अनुकूलित करें।

FAQ

प्रश्न: सार्वजनिक Shopify स्टोर्स की प्राइस मॉनिटरिंग क़ानूनी है?

क़ानूनी स्थिति न्याय क्षेत्र, एक्सेस विधि, स्टोर की शर्तों और इच्छित उपयोग पर निर्भर करती है। इन स्थितियों की समीक्षा करें और जिस सेवा को आप संचालित करते हैं उसके लिए क़ानूनी सलाह प्राप्त करें; केवल सार्वजनिक दृश्यता हर प्रश्न का समाधान नहीं करती।

प्रश्न: Shopify प्राइस मॉनिटरिंग ऐप को कितनी बार डेटा एकत्र करना चाहिए?

कैडेंस को निर्णय की अधिकतम स्वीकार्य ऑब्ज़र्वेशन आयु और स्रोत की एक्सेस सीमाओं से निर्धारित करें। प्रोमोशन अलर्ट्स को असॉर्टमेंट रिपोर्ट्स से अलग विंडो की आवश्यकता हो सकती है। दोनों ही मामलों में वास्तविक कैप्चर समय प्रदर्शित करें।

प्रश्न: क्या हर प्राइस मॉनिटरिंग जॉब को प्रॉक्सी की आवश्यकता होती है?

एक सार्वजनिक रूप से सुलभ रिस्पॉन्स बिना प्रॉक्सी के काम कर सकता है, जैसा कि जाँचे गए ब्राउज़र कलेक्शन ने किया। ऐसे ब्राउज़र वर्कफ़्लो जो किसी मार्केट पर निर्भर हों, उन्हें प्रलेखित proxyCountry पैरामीटर कॉन्फ़िगर करना चाहिए और परिणामी मुद्रा को स्वतंत्र रूप से सत्यापित करना चाहिए।

प्रश्न: ऐप को एक्सेस चैलेंज या बदलते मार्कअप के साथ क्या करना चाहिए?

किसी मूल्य की बजाय एक अपुष्ट कलेक्शन परिणाम रिकॉर्ड करें। एक ऑथराइज़्ड ब्राउज़र वर्कफ़्लो के लिए, उसी सत्र में पहले होमपेज लोड करें और वास्तविक प्रोडक्ट मार्कर का इंतज़ार करें। जब स्टोरफ़्रंट मार्कअप बदले तो एक्सट्रैक्टर को पुनः जाँचें।

प्रश्न: क्या पाइपलाइन बिना AI एजेंट के चल सकती है?

हाँ। Python इनजेशन स्टेप सीधे चलता है, और एक शेड्यूलर शेष एप्लिकेशन चरणों का समन्वय कर सकता है। AI एजेंट स्रोत निरीक्षण में सहायता कर सकता है, लेकिन डिटरमिनिस्टिक वैलिडेशन को संग्रहीत कीमतों और अलर्ट्स को नियंत्रित करना चाहिए।

प्रश्न: पहली इम्प्लिमेंटेशन को किस कन्सरनसी और URL नीति का उपयोग करना चाहिए?

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

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

सबसे लोकप्रिय लेख

सूची