~/utility/rag-web-crawler

RAG Web Crawler — वेब पेज से Markdown और टेक्स्ट चंक

सार्वजनिक वेब पेजों को साफ़ Markdown, सादे टेक्स्ट और ओवरलैप होने वाले टेक्स्ट चंक में बदलें, हर चंक के साथ स्रोत URL और कैरेक्टर ऑफ़सेट — RAG के लिए एम्बेड करने को तैयार।

RAG डेटा TypeScriptMozilla ReadabilityjsdomTurndown वैश्विक
proooxy/rag-web-crawler — स्पेक
कैटेगरीutility / RAG डेटा
भाषाTypeScript
स्टैकTypeScript, Mozilla Readability, jsdom, Turndown
मार्केट्सवैश्विक
आउटपुटसाफ, RAG-तैयार JSON

मुख्य विशेषताएं

हर पेज से साफ़ Markdown और सादा टेक्स्ट, जिसमें हेडिंग, सूचियाँ, लिंक, कोड ब्लॉक और सरल तालिकाएँ बनी रहती हैं

एम्बेड करने को तैयार चंक, जो एक-दूसरे से ओवरलैप होते हैं और जहाँ तक हो सके पैराग्राफ़ या वाक्य की सीमा पर ख़त्म होते हैं; हर चंक के साथ स्थिर id, स्रोत URL और शीर्षक, और उद्धरण के लिए सटीक कैरेक्टर ऑफ़सेट

पहले मुख्य सामग्री: मेन्यू, हेडर, फ़ुटर और साइडबार हटा दिए जाते हैं, और आप जो भी और बताएँ उसे CSS सेलेक्टर से हटाया जा सकता है

हर साइट के अंदर लिंक फ़ॉलो करना, पाँच स्तर तक, और हर पेज केवल एक बार लाना

URL की जगह सर्च: किसी क्वेरी के हर परिणाम पेज को स्टार्ट URL की तरह क्रॉल किया जाता है (Apify का पेड प्लान ज़रूरी)

डिफ़ॉल्ट रूप से robots.txt का पालन, और एक ही साइट पर अनुरोधों के बीच शालीन अंतराल

पेज अपनी मूल भाषा में रहते हैं — अंग्रेज़ी, चीनी और अन्य — बिना अनुवाद के

हर पेज के लिए स्टेटस और एरर कोड, और हर रन के लिए गिनती और रुकने के कारण वाला सारांश

यूज़ केस

  • डॉक्यूमेंटेशन और हेल्प-सेंटर पेजों से RAG चैटबॉट का नॉलेज बेस बनाना
  • AI एजेंटों के जवाबों को ताज़ा वेब पेजों पर आधारित करना, जिनका वे हवाला दे सकें
  • लेखों की सूची को सिमेंटिक सर्च के लिए एम्बेडिंग में बदलना
  • किसी विषय पर सर्च से मिले पेज उनकी मूल भाषा में इकट्ठा करना
  • वेक्टर स्टोर को तय समय पर रिफ़्रेश करना, जहाँ पेज न बदलने तक चंक की id भी नहीं बदलती
  • Apify के MCP सर्वर के ज़रिए AI एजेंटों को वेब पेज Markdown में देना

इनपुट पैरामीटर

पैरामीटरटाइपआवश्यकविवरण
startUrlsarrayवैकल्पिकक्रॉल करने के लिए सार्वजनिक पेजों के URL, 1,000 तक
querystringवैकल्पिकसर्च क्वेरी, जिसके परिणाम पेज क्रॉल होते हैं (Apify का पेड प्लान ज़रूरी)
queriesarrayवैकल्पिकऔर सर्च क्वेरी, जो query के साथ मिला दी जाती हैं
maxResultsPerQuerynumberवैकल्पिकहर क्वेरी पर क्रॉल होने वाले सर्च परिणाम (डिफ़ॉल्ट 5, अधिकतम 50)
maxPagesnumberवैकल्पिकएक रन में शेड्यूल होने वाले अलग-अलग पेजों की अधिकतम संख्या (डिफ़ॉल्ट 20, अधिकतम 1,000)
maxDepthnumberवैकल्पिकहर साइट के अंदर लिंक कितने स्तर तक फ़ॉलो हों (डिफ़ॉल्ट 0 = केवल स्टार्ट URL, अधिकतम 5)
maxConcurrencynumberवैकल्पिकएक साथ प्रोसेस होने वाले पेज (डिफ़ॉल्ट 3)
maxSearchRequestsnumberवैकल्पिकहर रन में सर्च अनुरोध, दोबारा कोशिशों सहित (डिफ़ॉल्ट 10, 0 = सर्च नहीं)
maxFetchRequestsnumberवैकल्पिकहर रन की सभी नेटवर्क कोशिशें, robots.txt और दोबारा कोशिशों सहित (डिफ़ॉल्ट 100)
requestTimeoutSecsnumberवैकल्पिकहर अनुरोध का टाइमआउट, सेकंड में (डिफ़ॉल्ट 30)
maxResponseBytesnumberवैकल्पिकस्वीकार किया जाने वाला सबसे बड़ा पेज रिस्पॉन्स (डिफ़ॉल्ट 2 MiB)
maxContentCharsnumberवैकल्पिकहर पेज पर रखा जाने वाला सबसे लंबा टेक्स्ट, कैरेक्टर में (डिफ़ॉल्ट 50,000)
maxOutputBytesnumberवैकल्पिकहर रन का कुल आउटपुट (डिफ़ॉल्ट 20 MiB)
respectRobotsTxtbooleanवैकल्पिकपहले हर साइट का robots.txt जाँचें (डिफ़ॉल्ट रूप से चालू)
onlyMainContentbooleanवैकल्पिकपेज की केवल मुख्य सामग्री रखें (डिफ़ॉल्ट रूप से चालू)
removeSelectorsarrayवैकल्पिकएक्सट्रैक्शन से पहले हटाए जाने वाले एलिमेंट के CSS सेलेक्टर
chunkSizenumberवैकल्पिकचंक की लंबाई कैरेक्टर में, टोकन में नहीं (डिफ़ॉल्ट 1,000)
chunkOverlapnumberवैकल्पिकलगातार दो चंक में साझा कैरेक्टर (डिफ़ॉल्ट 150)

आउटपुट उदाहरण

एक असली रन में सेव हुआ एक पेज, टेक्स्ट छोटा किया गया है और उसके पाँच चंक में से एक दिखाया गया है:

 1{
 2  "schemaVersion": "1.0",
 3  "url": "https://www.w3.org/WAI/tutorials/tables/one-header/",
 4  "title": "Tables with One Header",
 5  "description": "Accessibility resources free online from the international standards organization: W3C Web Accessibility Initiative (WAI).",
 6  "languageCode": "en",
 7  "canonicalUrl": "https://www.w3.org/WAI/tutorials/tables/one-header/",
 8  "markdown": "# Tables with One Header\n\nin [Tables Tutorial](https://www.w3.org/WAI/tutorials/tables/)\n\n## Overview\n\n…",
 9  "text": "Tables with One Header\n\nin Tables Tutorial\n\nOverview\n\nThis page covers tables that have one simple header for rows or one simple header for columns. …",
10  "chunks": [
11    {
12      "id": "495cb4e58e13bbf9b5cdbe922f7ea652973ca4dfda61b952aaa021db045a450c",
13      "index": 0,
14      "text": "Tables with One Header\n\nin Tables Tutorial\n\nOverview\n\nThis page covers tables that have one simple header for rows or one simple header for columns. …",
15      "startChar": 0,
16      "endChar": 988,
17      "sourceUrl": "https://www.w3.org/WAI/tutorials/tables/one-header/",
18      "title": "Tables with One Header"
19    }
20  ],
21  "contentTruncated": false,
22  "sources": [],
23  "crawl": {
24    "depth": 0,
25    "httpStatusCode": 200,
26    "loadedAt": "2026-10-19T07:03:53.643Z",
27    "contentType": "text/html",
28    "renderingMode": "http",
29    "extractionMethod": "main"
30  }
31}

चंक के ऑफ़सेट text में Unicode कोड पॉइंट गिनते हैं। हर रन REQUESTS भी लिखता है — हर पेज का एक नतीजा, स्टेटस और एरर कोड के साथ — और OUTPUT भी, यानी रन का सारांश, जिसमें गिनती, रुकने का कारण और चार्ज हुए इवेंट होते हैं।

सुझाव

  • अपने वेक्टर स्टोर में id को रिकॉर्ड ID बनाएँ। पेज और चंक सेटिंग न बदलने तक यह हर रन में एक जैसा रहता है, इसलिए शेड्यूल्ड रन में चंक को id के हिसाब से लिखने पर पुराने बदल जाते हैं, नई कॉपियाँ नहीं बनतीं।
  • कुछ पेजों से शुरुआत करें। maxPages या maxDepth बढ़ाने से पहले अपने टारगेट पेजों का Markdown जाँचें, और संबंधित-लिंक बॉक्स जैसी बची हुई चीज़ें removeSelectors से हटाएँ।
  • Dataset के साथ REQUESTS भी पढ़ें। रन सफल होने पर भी कुछ पेज छोड़े गए या फ़ेल हुए हो सकते हैं, और हर एक का कारण दर्ज होता है।

सामान्य प्रश्न

यह सामान्य वेब स्क्रैपर से कैसे अलग है?
आप इसे URL या सर्च क्वेरी देते हैं, सेलेक्टर नहीं। यह हर पेज की मुख्य सामग्री को Markdown और सादे टेक्स्ट के रूप में रखता है और टेक्स्ट को एम्बेड करने लायक़ चंक में काटता है; हर चंक के साथ पेज का URL, शीर्षक और सटीक कैरेक्टर ऑफ़सेट होते हैं, ताकि जवाब अपना स्रोत बता सके।
क्या मुझे API key चाहिए?
कोई बाहरी API key नहीं चाहिए, न क्रॉलिंग के लिए, न सर्च के लिए। आपको Apify खाता चाहिए; Apify के API से Actor को कॉल करने पर आपका Apify टोकन इस्तेमाल होता है।
क्या यह JavaScript रेंडर करता है?
नहीं। यह पेज HTTP से पढ़ता है, इसलिए जिस पेज को अपना टेक्स्ट दिखाने के लिए JavaScript चाहिए, वह NO_CONTENT के साथ फ़ेल हो सकता है या अधूरा आ सकता है। पहले अपने कुछ टारगेट पेज आज़माएँ।
यह कौन-से पेज पढ़ सकता है?
सार्वजनिक HTML, Markdown और सादे टेक्स्ट वाले पेज। लॉगिन, कुकीज़, पेवॉल, CAPTCHA, प्रॉक्सी, PDF और इमेज इसके दायरे से बाहर हैं, और प्राइवेट नेटवर्क के पते और क्रेडेंशियल वाले URL अस्वीकार किए जाते हैं।
क्या वेबसाइटों को क्रॉल करना अनुमत है?
सार्वजनिक रूप से उपलब्ध, ग़ैर-व्यक्तिगत डेटा को क्रॉल करना आम तौर पर क़ानूनी है, लेकिन पेजों की सामग्री अक्सर कॉपीराइट से सुरक्षित होती है और कुछ साइटें अपनी शर्तों में क्रॉलिंग सीमित करती हैं। क्रॉलर डिफ़ॉल्ट रूप से robots.txt का पालन करता है; इकट्ठा की गई सामग्री के उपयोग की ज़िम्मेदारी आपकी है।

~/utility में संबंधित

RAG Web Crawler — वेब पेज से Markdown और टेक्स्ट चंक रन करें, या कस्टम बिल्ड पाएं

मिनटों में Apify पर एक्सट्रैक्शन शुरू करें, या अपने सोर्स और स्कीमा के लिए कस्टम स्क्रैपर और RAG पाइपलाइन बनवाने के लिए मुझे हायर करें।

Apify पर रन करें कस्टम डेटा पाएं