वेब स्क्रैपिंग और बॉट · पाठ

कतार-आधारित कार्य वितरण

जानिए कि Redis और Celery जैसी संदेश कतारें URL खोज को फ़ेचिंग से अलग करके कई वर्कर में स्क्रैपिंग का विस्तार कैसे करती हैं।

पाठ 4, कुल 4 में से13 चरण

कतार-आधारित कार्य वितरण, CoddyKit पर वेब स्क्रैपिंग और बॉट का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह वेब स्क्रैपिंग और बॉट सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। वेब स्क्रैपिंग और बॉट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्केलिंग की बाधा

एकल-प्रक्रिया स्क्रैपर एक मशीन के CPU और नेटवर्क तक सीमित होता है। बड़े पैमाने पर काम करने के लिए आप कार्य को समानांतर चलने वाले कई वर्कर में बाँटते हैं, जो अलग-अलग सर्वर पर भी हो सकते हैं।

कार्य कतार काम को सुरक्षित रूप से वितरित करने वाली कड़ी है।

उत्पादक और उपभोक्ता

कतार पैटर्न में दो भूमिकाएँ होती हैं:

  • उत्पादक URL खोजते हैं और कार्यों को कतार में डालते हैं।
  • उपभोक्ता (वर्कर) कार्य निकालते हैं और पृष्ठ प्राप्त करते हैं।

उन्हें अलग रखने से दोनों पक्षों को स्वतंत्र रूप से बढ़ाया जा सकता है।

Redis-आधारित कतार

Redis सूचियाँ सरल और तेज़ कतार बनाती हैं। उत्पादक URL को LPUSH करते हैं; वर्कर उन्हें BRPOP से निकालते हैं और काम उपलब्ध होने तक प्रतीक्षा करते हैं।

import redis
r = redis.Redis()

# producer
r.lpush('urls', 'https://site.com/page1')

# worker
_, url = r.brpop('urls')
print('processing', url)

Python सूची साझा क्यों न करें

मेमोरी में मौजूद सूची केवल एक प्रक्रिया के भीतर काम करती है। Redis कतार प्रक्रियाओं और मशीनों के बीच साझा की जा सकती है, वर्कर के क्रैश होने पर भी बनी रहती है और समवर्ती कार्य को परमाणु रूप से संभालती है।

Celery का परिचय

Celery Redis जैसे ब्रोकर पर बना एक पूर्ण कार्य ढाँचा है। आप कार्यों को फ़ंक्शन के रूप में परिभाषित करके उन्हें अतुल्यकालिक रूप से बुलाते हैं; वर्कर उन्हें अपने-आप उठा लेते हैं।

from celery import Celery
app = Celery('scraper', broker='redis://localhost:6379/0')

@app.task
def scrape(url):
    return fetch_and_parse(url)

कार्य भेजना

.delay() को बुलाने से कार्य कतार में जुड़ जाता है और नियंत्रण तुरंत वापस मिल जाता है। celery worker चला रहे वर्कर उन्हें समानांतर रूप से प्राप्त करके निष्पादित करते हैं।

for url in discovered_urls:
    scrape.delay(url)

पुनः प्रयास और विफलताएँ

Celery विफल कार्यों का बैकऑफ़ के साथ अपने-आप पुनः प्रयास कर सकता है, इसलिए क्षणिक नेटवर्क त्रुटि के कारण कोई URL छूटता नहीं है।

@app.task(bind=True, max_retries=3, default_retry_delay=10)
def scrape(self, url):
    try:
        return fetch_and_parse(url)
    except ConnectionError as e:
        raise self.retry(exc=e)

URL के दोहराव को हटाना

वितरित क्रॉलिंग में एक ही URL दो बार खोजा जा सकता है। पहले से देखे गए URL को फ़िल्टर करने के लिए Redis सेट का उपयोग करें, ताकि प्रत्येक पृष्ठ केवल एक बार प्राप्त किया जाए।

if r.sadd('seen', url):
    scrape.delay(url)  # sadd returns 1 only if newly added

बैकप्रेशर और समवर्तीता

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

# start 4 worker processes
// celery -A scraper worker --concurrency=4

परिणाम और संग्रहण

वर्कर को पार्स किए गए डेटा को कतार के माध्यम से लौटाने के बजाय किसी साझा संग्रह (डेटाबेस या ऑब्जेक्ट स्टोरेज) में लिखना चाहिए। कतार कार्य ले जाती है; डेटा संग्रह परिणाम रखता है।

प्राथमिकता वाली कतारें

सभी URL समान नहीं होते। अत्यावश्यक कार्यों, जैसे कई चाइल्ड पृष्ठ खोलने वाली श्रेणी-सूची, को उच्च-प्राथमिकता वाली कतार में भेजें, ताकि वर्कर कम-मूल्य वाले पृष्ठों से पहले उन्हें संभालें।

scrape.apply_async(args=[url], priority=9)  # higher runs sooner

त्वरित जाँच

कतार-आधारित वितरण की अपनी समझ जाँचें।

पुनरावलोकन

आपने कार्य कतारों के साथ स्क्रैपिंग को बड़े पैमाने पर करना सीखा: उत्पादक/उपभोक्ता पैटर्न, Redis-आधारित कतारें, .delay() वाले Celery कार्य, स्वचालित पुनः प्रयास, Redis सेट के साथ URL का दोहराव हटाना, समवर्तीता को समायोजित करना और परिणामों को साझा संग्रह में लिखना।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “कतार-आधारित कार्य वितरण” पाठ निःशुल्क है?

हाँ — वेब स्क्रैपिंग और बॉट अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कतार-आधारित कार्य वितरण” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। वेब स्क्रैपिंग और बॉट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कतार-आधारित कार्य वितरण” में मैं क्या सीखूँगा?

जानिए कि Redis और Celery जैसी संदेश कतारें URL खोज को फ़ेचिंग से अलग करके कई वर्कर में स्क्रैपिंग का विस्तार कैसे करती हैं। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ वेब स्क्रैपिंग और बॉट का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या वेब स्क्रैपिंग और बॉट शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

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

“कतार-आधारित कार्य वितरण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस वेब स्क्रैपिंग और बॉट पाठ में कोड लिख और चला सकता हूँ?

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

इस पाठ्यक्रम के सभी पाठ

  1. Scrapy से वितरित स्क्रैपिंग
  2. स्क्रैपिंग के लिए Cloud Functions
  3. निगरानी और लॉगिंग
  4. कतार-आधारित कार्य वितरण
← वेब स्क्रैपिंग और बॉट पर वापस जाएँ