🥳हमारे शक्तिशाली वेब स्क्रैपिंग टूलकिट तक पहुंचने के लिए स्क्रैपलेस कम्युनिटी और अपने नि: शुल्क परीक्षण का दावा करें!
वापस ब्लॉग पर

PowerShell के साथ Selenium का उपयोग कैसे करें [ट्यूटोरियल 2025]

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

01-Mar-2025

Selenium वेब स्क्रैपिंग और ब्राउज़र ऑटोमेशन के माध्यम से परीक्षण के लिए एक लोकप्रिय विकल्प बना हुआ है। ये कार्य पारंपरिक रूप से स्क्रिप्टिंग भाषाओं का उपयोग करके लिखे जाते हैं, जिसमें PowerShell भी शामिल है। PowerShell के साथ Selenium की क्षमताओं का लाभ उठाने के लिए, डेवलपर समुदाय ने समर्पित बाइंडिंग बनाई हैं जो इस एकीकरण को संभव बनाती हैं।

हालांकि, Cloudflare जैसी परिष्कृत एंटी-बॉट प्रणालियों के कारण वेब स्क्रैपिंग तेजी से चुनौतीपूर्ण होती जा रही है। इस व्यापक गाइड में, आप देखेंगे:

  • Selenium और PowerShell के साथ आरंभ करना
  • ब्राउज़र में वेब पेजों के साथ इंटरैक्ट करना
  • एंटी-बॉट सिस्टम से ब्लॉक से बचना
  • Scrapeless स्क्रैपिंग ब्राउज़र के साथ Cloudflare चुनौतियों को हल करना

आइए शुरू करते हैं!

क्या आप PowerShell के साथ Selenium का उपयोग कर सकते हैं?

Selenium आईटी समुदाय में सबसे लोकप्रिय हेडलेस ब्राउज़र लाइब्रेरी है। इसका समृद्ध और सुसंगत API इसे परीक्षण और वेब स्क्रैपिंग के लिए ब्राउज़र ऑटोमेशन स्क्रिप्ट बनाने के लिए एकदम सही बनाता है।

PowerShell एक शक्तिशाली कमांड शेल है जो Windows क्लाइंट और सर्वर दोनों वातावरणों पर उपलब्ध है। ब्राउज़र ऑटोमेशन स्क्रिप्टिंग को पूरी तरह से पूरक करता है, यही कारण है कि डेवलपर समुदाय ने selenium-powershell बनाया, जो PowerShell के लिए Selenium WebDriver का एक पोर्ट है।

भले ही लाइब्रेरी वर्तमान में रखरखावकर्ताओं की तलाश में है, फिर भी यह PowerShell में वेब ऑटोमेशन के लिए गो-टू मॉड्यूल बनी हुई है।

नोट: यदि आपको इस Selenium PowerShell ट्यूटोरियल में कूदने से पहले मूल बातों पर ब्रश करने की आवश्यकता है, तो हेडलेस ब्राउज़र स्क्रैपिंग और PowerShell के साथ वेब स्क्रैपिंग की मूल बातों की समीक्षा करें।

Selenium और PowerShell के साथ वेब स्क्रैपिंग: मूल बातें

नोट: इस लेख में दिए गए उदाहरण Windows ऑपरेटिंग सिस्टम के लिए डिज़ाइन किए गए हैं, क्योंकि Selenium-PowerShell मॉड्यूल और COM ऑब्जेक्ट जैसी कुछ सुविधाएँ Windows-विशिष्ट हैं। यदि आप macOS या Linux का उपयोग कर रहे हैं, तो आपको इन स्क्रिप्ट को तदनुसार अनुकूलित करने की आवश्यकता हो सकती है।

इस खंड में, हम PowerShell के साथ Selenium का उपयोग करने की मूल अवधारणाओं का परिचय देंगे। G2 जैसी अधिक जटिल Cloudflare-सुरक्षित साइटों में कूदने से पहले, मूल बातों को समझना मददगार है।

हमारा लक्ष्य: G2 समीक्षाएं

इस ट्यूटोरियल के लिए, हम G2 से समीक्षाओं को स्क्रैप करने पर ध्यान केंद्रित करेंगे, विशेष रूप से इस पते पर Airtable समीक्षाएं: https://www.g2.com/products/airtable/reviews। यह Cloudflare-सुरक्षित साइट का एक वास्तविक उदाहरण है जो पारंपरिक स्क्रैपिंग विधियों के लिए चुनौतियाँ प्रस्तुत करता है।

यहाँ बताया गया है कि G2 को एक दिलचस्प लक्ष्य क्या बनाता है:

  1. यह Cloudflare द्वारा संरक्षित है, जो अधिकांश बुनियादी स्क्रैपिंग प्रयासों को अवरुद्ध करता है
  2. इसमें मूल्यवान व्यवसाय सॉफ़्टवेयर समीक्षाएं शामिल हैं जो बाजार अनुसंधान के लिए उपयोगी हो सकती हैं
  3. समीक्षाएँ एक ऐसे तरीके से संरचित हैं जो उन्हें डेटा निष्कर्षण के लिए आदर्श बनाती हैं
  4. यह उच्च-मूल्य वाले व्यवसाय डेटा के प्रकार का प्रतिनिधित्व करता है जो अक्सर एंटी-बॉट सिस्टम के पीछे होता है

आइए पहले देखें कि PowerShell दृष्टिकोण के साथ पारंपरिक Selenium इस साइट के साथ कैसे संघर्ष करेगा, फिर Scrapeless समस्या को कैसे हल कर सकता है।

सही Chrome WebDriver प्राप्त करना (फ़रवरी 2025)

PowerShell के साथ Selenium सेट करते समय एक महत्वपूर्ण कदम यह सुनिश्चित करना है कि आपके पास आपके Chrome ब्राउज़र से मेल खाने वाला सही ChromeDriver संस्करण है। 28 फ़रवरी, 2025 तक, यहाँ नवीनतम Chrome संस्करण और उनके संगत WebDrivers हैं:

Chrome स्थिर (133.0.6943.141):

  • Windows 64-बिट के लिए ChromeDriver: chromedriver-win64.zip
  • Windows 32-बिट के लिए ChromeDriver: chromedriver-win32.zip
  • Mac (Intel) के लिए ChromeDriver: chromedriver-mac-x64.zip
  • Mac (M1/M2) के लिए ChromeDriver: chromedriver-mac-arm64.zip
  • Linux के लिए ChromeDriver: chromedriver-linux64.zip

यदि आप एक अलग Chrome संस्करण (बीटा, डेव या कैनरी) का उपयोग कर रहे हैं, तो परीक्षण डाउनलोड पृष्ठ के लिए Chrome के संबंधित अनुभाग से मिलान करने वाले ChromeDriver को डाउनलोड करना सुनिश्चित करें।

अपने सिस्टम के लिए उपयुक्त ChromeDriver डाउनलोड करें, ZIP फ़ाइल निकालें, और निष्पादन योग्य को अपनी प्रोजेक्ट फ़ोल्डर में रखें। फिर अपनी PowerShell स्क्रिप्ट में इस स्थान का संदर्भ लें:

Copy
$Driver = Start-SeChrome -WebDriverDirectory '/path/to/chromedriver/folder' -Headless

सही ChromeDriver संस्करण का उपयोग करना आवश्यक है - यदि कोई संस्करण विसंगति है, तो Selenium त्रुटियां देगा और Chrome को ठीक से नियंत्रित करने में विफल रहेगा।

बुनियादी Selenium के साथ G2 को स्क्रैप करने का प्रयास

अब, आइए अपने बुनियादी Selenium सेटअप के साथ G2 समीक्षाओं तक पहुँचने का प्रयास करें:

Copy
Import-Module -Name Selenium

# Selenium WebDriver को इनिशियलाइज़ करें
$Driver = Start-SeChrome -WebDriverDirectory './chromedriver-win64' -Headless

# G2 समीक्षाएं पृष्ठ पर जाएँ
Enter-SeUrl 'https://www.g2.com/products/airtable/reviews' -Driver $Driver

# पेज लोड होने के लिए कुछ समय प्रतीक्षा करें
Start-Sleep -Seconds 5

# पेज शीर्षक प्राप्त करें
$Title = $Driver.Title
Write-Host "पेज शीर्षक: $Title"

# पेज स्रोत प्रिंट करें
$Html = $Driver.PageSource
$Html | Out-File -FilePath "g2_response.html"

# ब्राउज़र बंद करें
Stop-SeDriver -Driver $Driver

जब आप इस स्क्रिप्ट को चलाते हैं, तो वास्तविक G2 समीक्षा पृष्ठ प्राप्त करने के बजाय, आपको संभवतः दिखाई देगा:

  1. Cloudflare चुनौती पृष्ठ
  2. "बस एक पल..." या "अपने ब्राउज़र की जाँच कर रहा है..." जैसा शीर्षक
  3. HTML जिसमें Cloudflare की जावास्क्रिप्ट चुनौती शामिल है

ऐसा इसलिए है क्योंकि Cloudflare Selenium जैसे स्वचालित ब्राउज़र का पता लगाता है और एक चुनौती प्रस्तुत करता है जिसे बुनियादी Selenium कॉन्फ़िगरेशन स्वचालित रूप से हल नहीं कर सकते हैं।

G2 स्क्रैपिंग चुनौती: समीक्षा संरचना को समझना

डेटा निकालने का प्रयास करने से पहले, आइए समझें कि हम क्या स्क्रैप करने का प्रयास कर रहे हैं। G2 समीक्षाओं में एक संरचित प्रारूप है जिसमें शामिल हैं:

  1. समीक्षा शीर्षक: आमतौर पर समीक्षा का एक उद्धृत सारांश
  2. रेटिंग: सितारों (5 में से) के रूप में प्रदर्शित
  3. तिथि: समीक्षा कब प्रकाशित हुई थी
  4. समीक्षा पाठ: "आपको सबसे अच्छा क्या पसंद है?" और "आपको क्या पसंद नहीं है?" जैसे अनुभागों में विभाजित
  5. उपयोगकर्ता जानकारी: समीक्षा लिखने वाले के बारे में विवरण

HTML संरचना में एक विशिष्ट G2 समीक्षा कैसी दिखती है:

Copy
<div class="paper__bd">
  <div class="d-f mb-1">
    <div class="f-1 d-f ai-c mb-half-small-only">
      <div class="stars large xlarge--medium-down stars-10"></div>
      <div class="time-stamp pl-4th ws-nw">
        <span><span class="x-current-review-date" data-poison-date="">
          <meta content="2025-02-11" itemprop="datePublished">
          <time datetime="2025-02-11">Feb 11, 2025</time>
        </span></span>
      </div>
    </div>
  </div>
  <div class="d-f">
    <div class="f-1">
      <div data-poison="">
        <a class="pjax" href="https://www.g2.com/products/airtable/reviews/airtable-review-10822745">
          <div class="m-0 l2" itemprop="name">"Helped us get a handle on our complicated team-based scheduling and management."</div>
        </a>
      </div>
      <div data-poison-text="">
        <div itemprop="reviewBody">
          <div>
            <div class="l5 mt-2">What do you like best about Airtable?</div>
            <div>
              <p class="formatted-text">The best part about airtable is it's customiizable nature. We worked with a tech specialist to configure Airtable to meet our unique needs and it has so far been adaptable to everything we needed it to do...</p>
            </div>
          </div>
          <!-- More review sections... -->
        </div>
      </div>
    </div>
  </div>
</div>

समाधान: Cloudflare को बायपास करने के लिए Scrapeless स्क्रैपिंग ब्राउज़र

उन्नत Selenium कॉन्फ़िगरेशन के साथ भी, कई स्क्रैपिंग प्रोजेक्ट Cloudflare की सुरक्षा प्रणालियों द्वारा अवरुद्ध हो जाते हैं। यहीं पर Scrapeless स्क्रैपिंग ब्राउज़र एक गेम-चेंजिंग समाधान के रूप में आता है।

Scrapeless स्क्रैपिंग ब्राउज़र क्या है?

Scrapeless स्क्रैपिंग ब्राउज़र क्या है

Scrapeless स्क्रैपिंग ब्राउज़र एक उच्च-प्रदर्शन समाधान है जो एक हेडलेस ब्राउज़र वातावरण प्रदान करता है, जिससे आप अपने स्वयं के बुनियादी ढाँचे को बनाए रखे बिना जावास्क्रिप्ट चुनौतियों को बायपास कर सकते हैं। यह सहज ऑटोमेशन के लिए Puppeteer और Playwright के साथ एकीकृत होता है और प्रदान करता है:

Scrapeless डैशबोर्ड में तुरंत लॉग इन करें और API KEY प्रबंधन में अपनी API KEY बनाएँ

API कुंजी प्राप्त करें

G2 समीक्षाओं को निकालने के लिए Scrapeless स्क्रैपिंग ब्राउज़र का उपयोग करना

अब जब हम समझते हैं कि PowerShell के साथ मानक Selenium, G2 जैसी Cloudflare-सुरक्षित साइटों के साथ कैसे संघर्ष करता है, तो आइए Scrapeless स्क्रैपिंग ब्राउज़र का उपयोग करके एक समाधान लागू करें।

Puppeteer के साथ Scrapeless स्क्रैपिंग ब्राउज़र सेट करना

Scrapeless स्क्रैपिंग ब्राउज़र का उपयोग करने का सबसे प्रभावी तरीका Node.js के साथ Puppeteer के माध्यम से है। इसे सेट करने का तरीका यहां बताया गया है:

  1. Node.js स्थापित करें
  • nodejs.org से Node.js डाउनलोड और स्थापित करें
  • कमांड प्रॉम्प्ट खोलकर और टाइप करके इंस्टॉलेशन को सत्यापित करें:
Copy
node --version
npm --version
  1. एक प्रोजेक्ट फ़ोल्डर बनाएँ
  • अपनी स्क्रैपिंग प्रोजेक्ट के लिए एक नया फ़ोल्डर बनाएँ
  • इस फ़ोल्डर में एक कमांड प्रॉम्प्ट खोलें
  1. आवश्यक पैकेज स्थापित करें
  • npm के साथ puppeteer-core स्थापित करें:
Copy
npm install puppeteer-core
  1. अपनी स्क्रैपिंग स्क्रिप्ट बनाएँ
  • निम्न कोड के साथ scrape.js नाम की एक फ़ाइल बनाएँ:
Copy
// scrape.js
const puppeteer = require('puppeteer-core');

async function scrapeG2Reviews() {
  // अपने वास्तविक Scrapeless API टोकन से बदलें
  const API_TOKEN = 'YOUR_API_TOKEN_HERE';
  
  // Scrapeless स्क्रैपिंग ब्राउज़र से कनेक्शन कॉन्फ़िगर करें
  const connectionURL = `wss://browser.scrapeless.com/browser?token=${API_TOKEN}&session_ttl=180&proxy_country=ANY`;
  
  console.log('Scrapeless स्क्रैपिंग ब्राउज़र से कनेक्ट हो रहा है...');
  
  const browser = await puppeteer.connect({
    browserWSEndpoint: connectionURL,
    defaultViewport: null,
  });
  
  console.log('कनेक्टेड!');
  
  const page = await browser.newPage();
  
  // नेविगेशन के लिए एक लंबा समय सीमा निर्धारित करें
  page.setDefaultNavigationTimeout(120000);
  
  // सभी समीक्षाओं को रखने के लिए ऐरे
  const allReviews = [];
  
  // स्क्रैप करने के लिए पृष्ठों की संख्या
  const pagesToScrape = 3;
  
  for (let currentPage = 1; currentPage <= pagesToScrape; currentPage++) {
    console.log(`पेज ${currentPage} पर नेविगेट हो रहा है...`);
    
    // सीधे विशिष्ट पृष्ठ संख्या पर नेविगेट करें
    const pageUrl = currentPage === 1 
      ? 'https://www.g2.com/products/airtable/reviews' 
      : `https://www.g2.com/products/airtable/reviews?page=${currentPage}`;
      
    await page.goto(pageUrl, {
      waitUntil: 'networkidle2',
      timeout: 60000
    });
    
    console.log(`पेज ${currentPage} लोड हो गया है। स्क्रीनशॉट ले रहा है...`);
    
    // यह सत्यापित करने के लिए एक स्क्रीनशॉट लें कि पृष्ठ सही ढंग से लोड हुआ है
    await page.screenshot({ path: `g2_page_${currentPage}.png` });
    
    // पेज सामग्री लोड होने की प्रतीक्षा करें
    // विभिन्न संभावित चयनकर्ताओं का प्रयास करें क्योंकि संरचना बदल गई होगी
    try {
      console.log('सामग्री लोड होने की प्रतीक्षा कर रहा है...');
      
      // पहले मूल चयनकर्ता का प्रयास करें
      await page.waitForSelector('.paper__bd', { timeout: 10000 })
        .then(() => console.log('चयनकर्ता मिला: .paper__bd'))
        .catch(() => console.log('चयनकर्ता .paper__bd नहीं मिला, विकल्पों की कोशिश कर रहा है...'));
      
      // अगर हम अभी भी यहां हैं, तो आइए किसी अन्य दृष्टिकोण का उपयोग करके पृष्ठ संरचना की जांच करें
      console.log('पृष्ठ संरचना का विश्लेषण कर रहा है...');
      
      // यह सत्यापित करने के लिए पृष्ठ शीर्षक प्राप्त करें कि हम सही पृष्ठ पर हैं
      const pageTitle = await page.title();
      console.log('पेज शीर्षक:', pageTitle);
      
      // अधिक सामान्य दृष्टिकोण के साथ समीक्षाएं निकालें
      console.log('समीक्षाएँ निकाल रहा है...');
      
      // अधिक लचीले दृष्टिकोण के साथ समीक्षाएँ निकालने का प्रयास करें
      const pageReviews = await page.evaluate(() => {
        // कई चयनकर्ताओं के साथ समीक्षा कंटेनर देखें
        const reviewElements = Array.from(
          document.querySelectorAll('.paper__bd, .review-item, .reviews-section article, [data-testid="review-card"]')
        );
        
        console.log(`${reviewElements.length} संभावित समीक्षा तत्व मिले`);
        
        if (reviewElements.length === 0) {
          // यदि विशिष्ट चयनकर्ताओं के साथ कोई समीक्षा नहीं मिली, तो आइए पृष्ठ संरचना डंप करें
          const html = document.documentElement.outerHTML;
          return { error: 'कोई समीक्षा नहीं मिली', html: html.substring(0, 5000) }; // डिबगिंग के लिए पहले 5000 वर्ण
        }
        
        return reviewElements.map(review => {
          // कई संभावित चयनकर्ताओं के साथ शीर्षक प्राप्त करने का प्रयास करें
          const titleElement = 
            review.querySelector('[itemprop="name"], .review-title, h3, h4') ||
            review.querySelector('a.pjax div');
            
          const title = titleElement ? titleElement.innerText.trim() : 'शीर्षक नहीं';
          
          // कई संभावित चयनकर्ताओं के साथ तिथि प्राप्त करने का प्रयास करें
          const dateElement = 
            review.querySelector('time, .review-date, [data-testid="review-date"]') ||
            review.querySelector('.time-stamp');
            
          const date = dateElement ? dateElement.innerText.trim() : 'तिथि नहीं';
          
          // कई दृष्टिकोणों के साथ रेटिंग प्राप्त करने का प्रयास करें
          let rating = 0;
          const starsElement = review.querySelector('.stars, .rating, [data-testid="star-rating"]');
          
          if (starsElement) {
            // stars-X क्लास की जांच करें
            const starsClass = starsElement.className;
            const starsMatch = starsClass.match(/stars-(\d+)/);
            if (starsMatch) {
              rating = parseInt(starsMatch[1]) / 2;
            } else {
              // अन्यथा aria-label की जांच करें जिसमें रेटिंग हो सकती है
              const ariaLabel = starsElement.getAttribute('aria-label');
              if (ariaLabel) {
                const ratingMatch = ariaLabel.match(/(\d+(\.\d+)?)/);
                if (ratingMatch) {
                  rating = parseFloat(ratingMatch[1]);
                }
              }
            }
          }
          
          // कई संभावित चयनकर्ताओं के साथ समीक्षा पाठ प्राप्त करने का प्रयास करें
          const textElements = review.querySelectorAll('.formatted-text, .review-content, p, [data-testid="review-content"]');
          let content = '';
          
          textElements.forEach(el => {
            const text = el.innerText.trim();
            if (text && !text.includes('Review collected by and hosted on G2.com')) {
              content += text + '\n\n';
            }
          });
          
          return {
            title,
            date,
            rating,
            content: content.trim() || 'सामग्री नहीं मिली'
          };
        });
      });
      
      if (pageReviews.error) {
        console.log('समीक्षाएँ निकालने में त्रुटि:', pageReviews.error);
        console.log('पेज HTML स्निपेट:', pageReviews.html);
      } else {
        console.log(`पेज ${currentPage} से ${pageReviews.length} समीक्षाएं निकाली गईं`);
        
        // हमारे संग्रह में जोड़ें
        allReviews.push(...pageReviews);
      }
      
    } catch (error) {
      console.error('पेज पर त्रुटि:', error);
      // डिबगिंग के लिए त्रुटि पर एक और स्क्रीनशॉट लें
      await page.screenshot({ path: `error_page_${currentPage}.png` });
      
      // डिबगिंग के लिए पेज HTML डंप करें
      const html = await page.content();
      require('fs').writeFileSync(`error_page_${currentPage}.html`, html);
      console.log(`त्रुटि पृष्ठ HTML को error_page_${currentPage}.html में सहेजा गया है`);
    }
    
    // सर्वर के प्रति अच्छा होने के लिए पृष्ठों के बीच छोटा विराम
    await new Promise(r => setTimeout(r, 2000));
  }
  
  console.log(`कुल समीक्षाएं निकाली गईं: ${allReviews.length}`);
  
  // सभी समीक्षाओं को एक फ़ाइल में सहेजें
  require('fs').writeFileSync('g2_reviews.json', JSON.stringify(allReviews, null, 2));
  console.log('समीक्षाएँ g2_reviews.json में सहेजी गई हैं');
  
  await browser.close();
  console.log('हो गया!');
}

scrapeG2Reviews().catch(console.error);
  1. स्क्रिप्ट चलाएँ
  • इसके साथ स्क्रिप्ट निष्पादित करें:
Copy
node scrape.js

JSON आउटपुट प्रारूप

स्क्रिप्ट चलाने के बाद, आपके पास g2_reviews.json फ़ाइल होगी जिसमें इस तरह की सामग्री होगी:

Copy
[
  {
    "title": "\"Helped us get a handle on our complicated team-based scheduling and management.\"",
    "date": "Feb 11, 2025",
    "rating": 5,
    "content": "What do you like best about Airtable?\nThe best part about airtable is it's customiizable nature. We worked with a tech specialist to configure Airtable to meet our unique needs and it has so far been adaptable to everything we needed it to do. It has a huge capacity in terms of features and we were able to get it up and running in a fairly short period of time.\n\nWhat do you dislike about Airtable?\nThere are no real downsides except the intial learning curve. I believe we could have built Airtable out as we needed but it would have been a bigger intial time investment. Working with a tech specialist who knew Airtable well really helped us get up and running fast. It was worth the cost."
  },
  {
    "title": "\"Great for organization, has changed our workflow\"",
    "date": "Feb 8, 2025",
    "rating": 4.5,
    "content": "What do you like best about Airtable?\nWhat I like best about Airtable is its flexibility and customizability. It allows us to create databases that perfectly fit our needs, with custom fields, views, and formulas. The ability to link records between tables is incredibly powerful.\n\nWhat do you dislike about Airtable?\nSometimes the learning curve can be steep for new users, especially when dealing with more complex formulas and automations. The pricing can also become quite expensive as your needs grow and you require more records or features."
  },
  {
    "title": "\"Powerful database tool with a spreadsheet interface\"",
    "date": "Jan 29, 2025",
    "rating": 4,
    "content": "What do you like best about Airtable?\nAirtable combines the familiarity of spreadsheets with the power of a database. I appreciate how it allows for different views of the same data - grid, kanban, calendar, etc. It's intuitive enough for non-technical users but powerful enough for complex data management.\n\nWhat do you dislike about Airtable?\nThe free tier is quite limited, and pricing jumps significantly for premium features. Sometimes performance can slow down with large datasets, and there are occasional sync issues when multiple team members are editing simultaneously."
  }
]

PowerShell एकीकरण: PowerShell से Scrapeless स्क्रैपिंग ब्राउज़र का उपयोग करना

यदि आप PowerShell के साथ काम करना पसंद करते हैं, तो आप एक रैपर स्क्रिप्ट बना सकते हैं जो Node.js स्क्रिप्ट को कॉल करता है और परिणामों को संसाधित करता है:

  1. एक PowerShell रैपर स्क्रिप्ट बनाएँ
  • निम्न कोड के साथ run-scraper.ps1 नाम की एक फ़ाइल बनाएँ:
Copy
# फ़ाइल: run-scraper.ps1

Write-Host "Scrapeless स्क्रैपिंग ब्राउज़र के साथ G2.com स्क्रैपिंग शुरू हो रहा है..."

# आउटपुट फ़ोल्डर बनाएँ
$outputFolder = "G2_Reviews_" + (Get-Date -Format "yyyyMMdd_HHmmss")
New-Item -ItemType Directory -Path $outputFolder -Force | Out-Null

# Node.js स्क्रिप्ट चलाएँ और आउटपुट कैप्चर करें
$jsonFile = Join-Path $outputFolder "reviews.json"
node scrape.js > $jsonFile

Write-Host "Node.js स्क्रैपिंग पूर्ण। परिणामों को संसाधित कर रहा है..."

# जांचें कि क्या फ़ाइल में मान्य JSON डेटा है
try {
    # फ़ाइल सामग्री पढ़ें
    $content = Get-Content -Path $jsonFile -Raw
    
    # JSON भाग निकालें (मान लें कि यह सभी console.log संदेशों के बाद आउटपुट है)
    if ($content -match '\[.*\]') {
        $jsonContent = $Matches[0]
        Set-Content -Path $jsonFile -Value $jsonContent
        
        # JSON को PowerShell ऑब्जेक्ट में पार्स करें
        $reviews = $jsonContent | ConvertFrom-Json
        
        # CSV में निर्यात करें
        $csvPath = Join-Path $outputFolder "g2_reviews.csv"
        $reviews | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
        
        Write-Host "सफलतापूर्वक $($reviews.Count) समीक्षाएं निकाली गईं"
        Write-Host "परिणाम यहाँ सहेजे गए हैं: $csvPath"
        
        # मूल विश्लेषण
        $averageRating = ($reviews | Measure-Object -Property rating -Average).Average
        Write-Host "औसत रेटिंग: 5 में से $averageRating"
        
        $ratingDistribution = $reviews | Group-Object -Property rating | Sort-Object -Property Name
        foreach ($ratingGroup in $ratingDistribution) {
            Write-Host "$($ratingGroup.Name) सितारे: $($ratingGroup.Count) समीक्षाएं"
        }
    } else {
        Write-Error "आउटपुट में JSON डेटा नहीं मिला"
    }
} catch {
    Write-Error "JSON डेटा संसाधित करने में त्रुटि: $_"
}
  1. PowerShell रैपर स्क्रिप्ट चलाएँ
  • PowerShell खोलें
  • अपनी प्रोजेक्ट फ़ोल्डर पर जाएँ
  • स्क्रिप्ट निष्पादित करें:
Copy
.\run-scraper.ps1
  1. परिणामों की समीक्षा करें
  • स्क्रिप्ट JSON और CSV परिणामों के साथ एक दिनांकित फ़ोल्डर बनाता है
  • कंसोल में बुनियादी आँकड़े प्रदर्शित किए जाते हैं
  • आगे के विश्लेषण के लिए CSV फ़ाइल को एक्सेल या अन्य अनुप्रयोगों में खोला जा सकता है

उन्नत उदाहरण: Scrapeless स्क्रैपिंग ब्राउज़र के साथ मल्टी-पेज स्क्रैपिंग

अधिक उन्नत उपयोग के मामले के लिए, यहाँ एक उदाहरण दिया गया है जो दिखाता है कि कई पृष्ठों से समीक्षाओं को कैसे स्क्रैप किया जाए:

Copy
// फ़ाइल: scrape-g2-multipage.js
const puppeteer = require('puppeteer-core');

async function scrapeG2ReviewsMultiPage() {
  // अपने वास्तविक Scrapeless API टोकन से बदलें
  const API_TOKEN = 'YOUR_API_TOKEN_HERE';
  
  // Scrapeless स्क्रैपिंग ब्राउज़र से कनेक्शन कॉन्फ़िगर करें
  const connectionURL = `wss://browser.scrapeless.com/browser?token=${API_TOKEN}&session_ttl=300&proxy_country=ANY`;
  
  console.log('Scrapeless स्क्रैपिंग ब्राउज़र से कनेक्ट हो रहा है...');
  
  const browser = await puppeteer.connect({
    browserWSEndpoint: connectionURL,
    defaultViewport: null,
  });
  
  console.log('कनेक्टेड! G2.com खोल रहा है...');
  
  const page = await browser.newPage();
  
  // एक उचित नेविगेशन समय सीमा निर्धारित करें
  page.setDefaultNavigationTimeout(60000);
  
  // सभी समीक्षाओं को रखने के लिए ऐरे
  const allReviews = [];
  
  // वर्तमान पृष्ठ से समीक्षाएँ निकालने का कार्य
  const extractReviews = async () => {
    return page.evaluate(() => {
      return Array.from(document.querySelectorAll('.paper__bd')).map(review => {
        // शीर्षक
        const titleElement = review.querySelector('a.pjax div[itemprop="name"]');
        const title = titleElement ? titleElement.innerText : 'शीर्षक नहीं';
        
        // तिथि
        const dateElement = review.querySelector('time');
        const date = dateElement ? dateElement.innerText : 'तिथि नहीं';
        
        // रेटिंग
        const starsElement = review.querySelector('.stars');
        let rating = 0;
        if (starsElement) {
          const starsClass = starsElement.className;
          const match = starsClass.match(/stars-(\d+)/);
          if (match) {
            rating = parseInt(match[1])/2;
          }
        }
        
        // समीक्षा सामग्री
        const contentElements = review.querySelectorAll('.formatted-text');
        let content = '';
        contentElements.forEach(el => {
          const text = el.innerText;
          if (!text.includes('Review collected by and hosted on G2.com')) {
            content += text + '\n\n';
          }
        });
        
        return {
          title,
          date,
          rating,
          content: content.trim()
        };
      });
    });
  };
  
  // पहले पृष्ठ पर नेविगेट करें
  await page.goto('https://www.g2.com/products/airtable/reviews', {
    waitUntil: 'networkidle2'
  });
  
  // समीक्षाओं के लोड होने की प्रतीक्षा करें
  await page.waitForSelector('.paper__bd', {timeout: 30000});
  
  // पहले पृष्ठ का स्क्रीनशॉट लें
  await page.screenshot({ path: 'page1.png' });
  
  // स्क्रैप करने के लिए पृष्ठों की संख्या (प्रदर्शन के लिए सीमा)
  const pagesToScrape = 3;
  let currentPage = 1;
  
  while (currentPage <= pagesToScrape) {
    console.log(`पेज ${currentPage} स्क्रैप कर रहा है...`);
    
    // वर्तमान पृष्ठ से समीक्षाएँ निकालें
    const pageReviews = await extractReviews();
    console.log(`पेज ${currentPage} पर ${pageReviews.length} समीक्षाएं मिलीं`);
    
    // हमारे संग्रह में जोड़ें
    allReviews.push(...pageReviews);
    
    // जांचें कि क्या कोई अगला पृष्ठ बटन है


```javascript
const hasNextPage = await page.evaluate(() => {
      const nextButton = document.querySelector('a.next_page');
      return nextButton && !nextButton.classList.contains('disabled');
    });
    
    if (hasNextPage && currentPage < pagesToScrape) {
      // अगले पृष्ठ URL पर सीधे नेविगेट करें
      currentPage++;
      await page.goto(`https://www.g2.com/products/airtable/reviews?page=${currentPage}`, {
        waitUntil: 'networkidle2'
      });
      
      // नए पृष्ठ पर समीक्षाएँ लोड होने की प्रतीक्षा करें
      await page.waitForSelector('.paper__bd', {timeout: 30000});
      
      // नए पृष्ठ का स्क्रीनशॉट लें
      await page.screenshot({ path: `page${currentPage}.png` });
    } else {
      break;
    }
  }
  
  console.log(`कुल समीक्षाएँ निकाली गईं: ${allReviews.length}`);
  
  // सभी समीक्षाओं को JSON के रूप में आउटपुट करें
  console.log(JSON.stringify(allReviews, null, 2));
  
  await browser.close();
  console.log('हो गया!');
}

scrapeG2ReviewsMultiPage().catch(console.error);

स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।

सबसे लोकप्रिय लेख

सूची