JavaScript (Node.js) में HTML पार्सिंग: वेब पेजों के साथ काम करने के लिए टूल चयन
HTML पार्सिंग वेब स्क्रैपर्स, कंटेंट एनालाइज़र और ऑटोमेटेड टेस्ट विकसित करने में प्रमुख कार्यों में से एक है। Node.js इकोसिस्टम में कई शक्तिशाली लाइब्रेरी मौजूद हैं, जिनमें से प्रत्येक की अपनी खूबियाँ हैं। इस लेख में हम तीन मुख्य टूल्स पर विचार करेंगे: cheerio, jsdom और htmlparser2, और यह समझेंगे कि कब और किसका उपयोग करना बेहतर है।
1. Cheerio — सर्वर के लिए jQuery
cheerio लाइब्रेरी Node.js में HTML पार्सिंग के लिए सबसे लोकप्रिय विकल्प है। यह DOM ट्री में नेविगेशन और मैनिपुलेशन के लिए परिचित jQuery-जैसा सिंटैक्स प्रदान करती है। Cheerio पूर्ण ब्राउज़र DOM नहीं बनाती, बल्कि हल्के एब्स्ट्रैक्शन के साथ काम करती है, जो इसे बहुत तेज़ बनाता है।
मुख्य विशेषताएँ:
- CSS-सेलेक्टर का समर्थन (jQuery की तरह)
- JavaScript निष्पादन के बिना तेज़ पार्सिंग
- इम्यूटेबल मेथड्स (मूल HTML को नहीं बदलते)
- एट्रीब्यूट्स, टेक्स्ट और HTML संरचना के साथ काम
उपयोग का उदाहरण:
const cheerio = require('cheerio');const html = '<div class="content"><h1>नमस्ते, दुनिया!</h1><p>लेख का टेक्स्ट</p></div>';
const $ = cheerio.load(html);const title = $('h1').text();const paragraphs = $('p').map((i, el) => $(el).text()).get();
console.log(title); // "नमस्ते, दुनिया!"console.log(paragraphs); // ["लेख का टेक्स्ट"]2. JSDOM — Node.js में पूर्ण ब्राउज़र
यदि आपको केवल स्थिर HTML पार्स करने की नहीं, बल्कि JavaScript स्क्रिप्ट्स को निष्पादित करने, इवेंट्स को एमुलेट करने या आधुनिक API (जैसे fetch, localStorage) के साथ काम करने की आवश्यकता है, तो jsdom आपका विकल्प है। यह पूर्ण ब्राउज़र वातावरण बनाता है, जो अधिकतम संगतता प्रदान करता है, लेकिन अधिक संसाधनों की आवश्यकता होती है।
jsdom का उपयोग कब करें:
- डायनामिक कंटेंट वाली साइटें (React/Vue पर SPA)
- पेज स्क्रिप्ट्स को निष्पादित करने की आवश्यकता
- वेब कम्पोनेंट्स का परीक्षण
- इवेंट्स और एसिंक्रोनस ऑपरेशन्स के साथ काम
पार्सिंग का उदाहरण:
const { JSDOM } = require('jsdom');const html = '<html><body><div id="app">कंटेंट</div></body></html>';
const dom = new JSDOM(html);const document = dom.window.document;const content = document.getElementById('app').textContent;
console.log(content); // "कंटेंट"3. Htmlparser2 — अधिकतम प्रदर्शन
htmlparser2 लाइब्रेरी एक निम्न-स्तरीय पार्सर है जो इवेंट-आधारित (SAX-जैसा दृष्टिकोण) काम करता है। यह DOM ट्री नहीं बनाता, बल्कि प्रत्येक टैग, एट्रीब्यूट या टेक्स्ट नोड मिलने पर इवेंट उत्पन्न करता है। यह इसे Node.js में सबसे तेज़ पार्सर बनाता है।
विशेषताएँ:
- स्ट्रीम प्रोसेसिंग (गीगाबाइट आकार की फ़ाइलों को पार्स किया जा सकता है)
- न्यूनतम मेमोरी खपत
- XML और HTML का समर्थन
- नेविगेशन के लिए कोई अंतर्निहित मेथड नहीं (अपनी लॉजिक लिखनी होगी)
उपयोग का उदाहरण:
const htmlparser2 = require('htmlparser2');const html = '<div class="item">उत्पाद 1</div><div class="item">उत्पाद 2</div>';
const items = [];const parser = new htmlparser2.Parser({ onopentag(name, attribs) { if (name === 'div' && attribs.class === 'item') { this.currentItem = ''; } }, ontext(text) { if (this.currentItem !== undefined) { this.currentItem += text; } }, onclosetag(name) { if (name === 'div' && this.currentItem !== undefined) { items.push(this.currentItem.trim()