जावास्क्रिप्ट में डेटा पार्सिंग और स्क्रैपिंग: शुरुआत से विशेषज्ञ तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावास्क्रिप्ट में डेटा क्यों पार्स करें जब 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
\n\n

स्टैटिक पेजों के लिए, Axios + Cheerio पर्याप्त होगा। यदि साइट AJAX के माध्यम से डेटा लोड करती है या प्रमाणीकरण की आवश्यकता है, तो Puppeteer का उपयोग करें। अब व्यावहारिक भाग पर चलते हैं।

\n\n
\n\n

उदाहरण 1: Cheerio के साथ स्टैटिक पेज का सरल पार्सिंग

\n\n

मान लीजिए, हमें एक ऐसी वेबसाइट से समाचार शीर्षक एकत्र करने हैं जो तुरंत HTML प्रदान करती है (बिना डायनामिक्स के)। निर्भरताएँ स्थापित करें:

\n\n
npm install axios cheerio
\n\n

अब एक स्क्रिप्ट लिखें जो मुख्य पृष्ठ से सभी h2 शीर्षक निकालेगी (URL को वास्तविक से बदलें):

\n\n
const 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\n
npm install puppeteer
\n\n

परिदृश्य: उत्पाद पृष्ठ पर जाएं, 3 सेकंड प्रतीक्षा करें (जब तक JS लोड हो), फिर उत्पादों के नाम एकत्र करें:

\n\n
const 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 => {                

ब्लॉग

पुस्तक अनुशंसाएँ