ডাইনামিক কন্টেন্ট এবং AJAX এর মাধ্যমে ডেটা স্ক্র্যাপ করা

PhantomJS দিয়ে Web Scraping - ফ্যান্টমজেএস (PhantomJS) - Web Development

229

PhantomJS একটি হেডলেস ব্রাউজার (একটি ব্রাউজার যা UI ছাড়া কাজ করে) যা JavaScript ভিত্তিক স্ক্রিপ্টিং জন্য ব্যবহৃত হয়। এটি WebKit ইঞ্জিন ব্যবহার করে এবং ডেভেলপারদের বিভিন্ন ব্রাউজার কার্যকারিতা পরীক্ষা এবং স্ক্রিপ্টিং করতে সাহায্য করে। PhantomJS এর সবচেয়ে শক্তিশালী বৈশিষ্ট্যগুলির মধ্যে একটি হল, এটি dynamic content এবং AJAX এর মাধ্যমে ডেটা স্ক্র্যাপ করতে পারে, যা ওয়েব পেজের ডাইনামিক বা লোড হওয়া ডেটা প্রক্রিয়া করতে সহায়ক।

এখানে PhantomJS এর মাধ্যমে dynamic content এবং AJAX থেকে ডেটা স্ক্র্যাপ করার প্রক্রিয়া ব্যাখ্যা করা হয়েছে।

PhantomJS দিয়ে Dynamic Content এবং AJAX এর মাধ্যমে ডেটা স্ক্র্যাপ করা

PhantomJS মূলত headless browser হওয়ায় এটি JavaScript চালানোর ক্ষমতা রাখে, তাই যেকোনো AJAX request অথবা ডাইনামিক কন্টেন্ট যা সাধারণভাবে DOM লোড হওয়ার পর JavaScript দ্বারা প্রক্রিয়াজাত হয়, সেগুলোর স্ক্র্যাপিং করা সম্ভব। PhantomJS এই সব কন্টেন্ট লোড করতে পারে এবং তারপরে সেই ডেটা সংগ্রহ করে।

Steps to Scrape Data Using PhantomJS:

  1. Install PhantomJS: প্রথমে, আপনাকে PhantomJS ইন্সটল করতে হবে। এটি npm অথবা Homebrew এর মাধ্যমে করা যেতে পারে।

    Using npm (Node.js package manager):

    npm install -g phantomjs
    
  2. Write PhantomJS Script to Handle AJAX Requests and Scrape Data:

    PhantomJS স্ক্রিপ্ট লিখে আপনি ওয়েব পেজে লোড হওয়া ডাইনামিক কন্টেন্ট বা AJAX ডেটা স্ক্র্যাপ করতে পারেন। এখানে একটি সাধারণ উদাহরণ দেওয়া হল যেখানে একটি AJAX call এর মাধ্যমে ডেটা স্ক্র্যাপ করা হচ্ছে।

PhantomJS Script Example for Scraping Dynamic Content with AJAX:

var page = require('webpage').create();  // Create a new webpage instance
var url = 'https://example.com';  // The URL from which to scrape the data

// Open the page and wait for it to load
page.open(url, function(status) {
    if (status === 'success') {
        // Wait for AJAX content to load (adjust the timeout accordingly)
        page.waitForSelector('.ajax-loaded', function() {
            // Now, capture the required data from the page
            var content = page.evaluate(function() {
                return document.querySelector('.ajax-loaded').textContent;
            });

            // Output the scraped content to console or save to a file
            console.log(content);

            // Close the page after scraping is done
            phantom.exit();
        });
    } else {
        console.log('Failed to load the page');
        phantom.exit();
    }
});

Explanation of the Script:

  • page.open(url, function(status)): এটি পেজটি ওপেন করতে ব্যবহার হয় এবং পেজের স্ট্যাটাস চেক করে (যেমন, যদি পেজ লোড হয় তবে "success", নাহলে "fail")।
  • page.waitForSelector('.ajax-loaded', function()): এটি নিশ্চিত করে যে ডাইনামিক কন্টেন্ট (যেমন AJAX request-এর মাধ্যমে লোড হওয়া ডেটা) পেজে পুরোপুরি লোড হয়ে গেছে। এই সিলেক্টরের মাধ্যমে আপনি নিশ্চিত করতে পারবেন যে AJAX কন্টেন্টটি লোড হয়েছে।
  • page.evaluate(function()): এই মেথডটি PhantomJS এর মধ্যে কাজ করছে, এবং এটি পেজের DOM থেকে ডেটা সংগ্রহ করে। এই ক্ষেত্রে, .ajax-loaded ক্লাসের মধ্যে থাকা টেক্সট কনটেন্ট স্ক্র্যাপ করা হচ্ছে।
  • phantom.exit(): স্ক্রিপ্ট শেষ হলে PhantomJS কে বন্ধ করার জন্য ব্যবহৃত হয়।

Handling Dynamic Content with AJAX Calls:

যেহেতু PhantomJS সম্পূর্ণভাবে JavaScript চালাতে সক্ষম, এটি AJAX কলগুলোর মাধ্যমে ডাইনামিক কন্টেন্ট লোড হওয়ার পর সেই কন্টেন্ট স্ক্র্যাপ করতে পারে। আপনি একাধিক AJAX requests বা long-polling এর জন্য অপেক্ষা করতে পারেন, যাতে সেই ডেটা সম্পূর্ণ লোড হয়ে যাওয়ার পরে স্ক্র্যাপ করা যায়।

Handling Multiple AJAX Requests Example:
var page = require('webpage').create();
var url = 'https://example.com';

page.open(url, function(status) {
    if (status === 'success') {
        page.onResourceReceived = function(response) {
            if (response.status === 200 && response.url.indexOf('/api/data') > -1) {
                console.log('AJAX Request Data: ' + response.body);
            }
        };

        // Wait for the page to load completely and process AJAX
        page.waitForSelector('.ajax-loaded', function() {
            var data = page.evaluate(function() {
                return document.querySelector('.ajax-loaded').textContent;
            });
            console.log('Scraped Data: ' + data);
            phantom.exit();
        });
    } else {
        console.log('Failed to load page');
        phantom.exit();
    }
});

Explanation:

  • page.onResourceReceived: এটি একটি ইভেন্ট হ্যান্ডলার যা AJAX requests-এর রেসপন্স গ্রহণ করে। এখানে response.url.indexOf('/api/data') চেক করা হচ্ছে যাতে শুধুমাত্র নির্দিষ্ট API endpoints এর ডেটা পাওয়া যায়।
  • response.body: AJAX কলের মাধ্যমে প্রাপ্ত ডেটার body প্রিন্ট করা হচ্ছে।

PhantomJS ব্যবহার করে dynamic content এবং AJAX এর মাধ্যমে ডেটা স্ক্র্যাপিং করা একটি শক্তিশালী পদ্ধতি, যা headless browser হিসেবে কাজ করে এবং আপনার স্ক্র্যাপিং টাস্ককে দ্রুত এবং দক্ষ করে তোলে। PhantomJS এর সাহায্যে আপনি AJAX requests বা JavaScript-rendered content সঠিকভাবে স্ক্র্যাপ করতে পারবেন। এটি আপনার ওয়েব ডেটা সংগ্রহের প্রক্রিয়াকে আরও সহজ, দ্রুত এবং কার্যকরী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...