जावास्क्रिप्ट में डेटा क्यों पार्स करें जब Python मौजूद है?
\n\nनमस्ते दोस्त! यदि आप यह पाठ पढ़ रहे हैं, तो संभवतः आप Python और उसकी BeautifulSoup या Scrapy जैसी लाइब्रेरीज़ से पहले से परिचित हैं। लेकिन क्या होगा यदि आपको ऐसे कार्य का सामना करना पड़े जहाँ Python काम नहीं करता? उदाहरण के लिए, आपको किसी ऐसी वेबसाइट से डेटा एकत्र करना है जो पूरी तरह से React या Angular पर बनी है। सारी जानकारी JavaScript के माध्यम से लोड होती है, और मूल HTML में कुछ नहीं होता। यहाँ पर JavaScript काम आता है!
\n\nजावास्क्रिप्ट में डेटा पार्सिंग और स्क्रैपिंग सिर्फ एक फैशनेबल ट्रेंड नहीं है, बल्कि आधुनिक वेब एप्लिकेशन के साथ काम करने के लिए एक आवश्यकता है। Node.js आपको सर्वर पर ब्राउज़र इंजन चलाने, DOM को प्रोसेस करने, बटन पर क्लिक करने और एसिंक्रोनस कंटेंट के लोड होने की प्रतीक्षा करने की अनुमति देता है। इस लेख में, हम वास्तविक उपकरणों पर चर्चा करेंगे और कोड लिखेंगे जिसे आप अपने प्रोजेक्ट्स में तुरंत उपयोग कर सकते हैं।
\n\nक्या आप JavaScript को डेटा के लिए एक शक्तिशाली वैक्यूम क्लीनर में बदलने के लिए तैयार हैं? चलिए शुरू करते हैं!
\n\n\n\n
जावास्क्रिप्ट में स्क्रैपिंग के लिए मुख्य उपकरण
\n\nकोड लिखने से पहले, आइए हम अपने शस्त्रागार के मुख्य "योद्धाओं" से परिचित हों। जावास्क्रिप्ट में डेटा पार्सिंग के लिए, हम तीन स्तंभों का उपयोग करेंगे:
\n\n- \n
- Axios — अनुरोध भेजने और पेजों का HTML कोड प्राप्त करने के लिए HTTP-क्लाइंट। \n
- Cheerio — HTML पार्स करने के लिए तेज़ और हल्की लाइब्रेरी, जो सर्वर पर jQuery की तरह काम करती है। \n
- Puppeteer — एक पूर्ण headless-ब्राउज़र (Chrome) जो JavaScript निष्पादित कर सकता है, क्लिक कर सकता है, स्क्रॉल कर सकता है और प्रतीक्षा कर सकता है। \n
स्टैटिक पेजों के लिए, Axios + Cheerio पर्याप्त होगा। यदि साइट AJAX के माध्यम से डेटा लोड करती है या प्रमाणीकरण की आवश्यकता है, तो Puppeteer का उपयोग करें। अब व्यावहारिक भाग पर चलते हैं।
\n\n\n\n
उदाहरण 1: Cheerio के साथ स्टैटिक पेज का सरल पार्सिंग
\n\nमान लीजिए, हमें एक ऐसी वेबसाइट से समाचार शीर्षक एकत्र करने हैं जो तुरंत HTML प्रदान करती है (बिना डायनामिक्स के)। निर्भरताएँ स्थापित करें:
\n\nnpm install axios cheerio\n\nअब एक स्क्रिप्ट लिखें जो मुख्य पृष्ठ से सभी h2 शीर्षक निकालेगी (URL को वास्तविक से बदलें):
\n\nconst axios = require('axios');\nconst cheerio = require('cheerio');\n\nasync function parseStaticPage(url) {\n try {\n const { data } = await axios.get(url);\n const $ = cheerio.load(data);\n\n const titles = [];\n $('h2').each((i, el) => {\n titles.push($(el).text().trim());\n });\n\n console.log('पाए गए शीर्षक:');\n titles.forEach((title, index) => {\n console.log(`${index + 1}. ${title}`);\n });\n } catch (error) {\n console.error('पार्सिंग त्रुटि:', error.message);\n }\n}\n\nparseStaticPage('https://example.com/news');\n\nयह कोड एक आधार है जिसके साथ जावास्क्रिप्ट में डेटा स्क्रैपिंग का अध्ययन शुरू करना चाहिए। Cheerio बहुत तेज़ काम करता है, लेकिन स्क्रिप्ट निष्पादित नहीं कर सकता। यदि साइट "लोड हो रहा है..." दिखाती है, तो आगे पढ़ें।
\n\n\n\n
उदाहरण 2: Puppeteer के साथ डायनामिक पेजों का पार्सिंग
\n\nअब कल्पना करें कि डेटा तभी दिखाई देता है जब उपयोगकर्ता पेज को स्क्रॉल करता है या "और दिखाएं" बटन पर क्लिक करता है। ऐसे कार्यों के लिए Puppeteer आदर्श है। इसे स्थापित करें:
\n\nnpm install puppeteer\n\nपरिदृश्य: उत्पाद पृष्ठ पर जाएं, 3 सेकंड प्रतीक्षा करें (जब तक JS लोड हो), फिर उत्पादों के नाम एकत्र करें:
\n\nconst puppeteer = require('puppeteer');\n\nasync function parseDynamicPage(url) {\n const browser = await puppeteer.launch({ headless: true });\n const page = await browser.newPage();\n\n await page.goto(url, { waitUntil: 'networkidle2' });\n // कंटेंट के प्रकट होने की प्रतीक्षा करें (सेलेक्टर .product-title)\n await page.waitForSelector('.product-title', { timeout: 10000 });\n\n const items = await page.evaluate(() => {\n const titles = [];\n document.querySelectorAll('.product-title').forEach(el => {