PhantomJS দিয়ে Web Scraping

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

245

PhantomJS হল একটি headless browser (যেখানে কোনো গ্রাফিক্যাল ইউজার ইন্টারফেস নেই), যা JavaScript, Web scraping, automated testing, এবং page rendering এর জন্য ব্যবহৃত হয়। PhantomJS আপনাকে ওয়েব পেজের স্ক্রিনশট নেওয়া, পেজ লোড করা, এবং অন্যান্য ব্রাউজার-ভিত্তিক কাজ করতে সাহায্য করে।

PhantomJS দিয়ে Web Scraping

Web Scraping হল একটি প্রক্রিয়া যেখানে ওয়েব পেজের ডেটা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়। PhantomJS দিয়ে আপনি HTML কন্টেন্ট, ইমেজ, টেবিল ডেটা, অথবা অন্য কোন ওয়েব উপাদান বের করতে পারেন। PhantomJS একটি headless browser হওয়ায়, এটি ব্রাউজারের মতোই কাজ করে কিন্তু কোনো UI ছাড়া।

PhantomJS দিয়ে Web Scraping করার প্রক্রিয়া

Step 1: PhantomJS ইনস্টল করা

PhantomJS ব্যবহার করতে প্রথমে PhantomJS ইনস্টল করতে হবে। এটি বিভিন্ন প্ল্যাটফর্মে উপলব্ধ, এবং NPM এর মাধ্যমে বা সরাসরি PhantomJS ওয়েবসাইট থেকে ডাউনলোড করা যায়।

Installation Example (Linux/Mac):

sudo apt-get install phantomjs

For Windows: Windows প্ল্যাটফর্মের জন্য PhantomJS Windows Downloads থেকে ইনস্টল করুন।

Step 2: PhantomJS স্ক্রিপ্ট তৈরি করা

এখন আপনি PhantomJS দিয়ে scraping স্ক্রিপ্ট তৈরি করবেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে PhantomJS দিয়ে একটি ওয়েব পেজের ডেটা সংগ্রহ করা হচ্ছে:

PhantomJS Scraping Example:

var page = require('webpage').create();
var url = 'https://example.com'; // URL of the page you want to scrape

// Open the page
page.open(url, function(status) {
    if (status === 'success') {
        // Scrape data from the page
        var content = page.evaluate(function() {
            return document.querySelector('h1').innerText; // Get the text from <h1> tag
        });

        console.log('Scraped content: ' + content); // Log the scraped content

        // Optionally, take a screenshot of the page
        page.render('screenshot.png'); // Save screenshot as PNG

        phantom.exit(); // Exit PhantomJS
    } else {
        console.log('Failed to open the page');
        phantom.exit();
    }
});

Explanation:

  1. Page Creation: var page = require('webpage').create(); – PhantomJS এ একটি নতুন পেজ তৈরি করা হয়েছে।
  2. Opening a Page: page.open(url, function(status) {...}); – এখানে একটি নির্দিষ্ট URL খোলা হয়েছে এবং তার পর পেজের status চেক করা হচ্ছে।
  3. Data Scraping: page.evaluate(function() {...}) – এখানে, আপনি যে ওয়েব পেজে আছেন, তার DOM থেকে ডেটা বের করছেন।
  4. Screenshot: page.render('screenshot.png'); – পেজের স্ক্রিনশট নেওয়া হচ্ছে এবং PNG ফরম্যাটে সেভ করা হচ্ছে।

Step 3: PhantomJS স্ক্রিপ্ট রান করা

এই স্ক্রিপ্টটি .js ফাইল হিসেবে সেভ করুন, যেমন scrape.js, এবং কমান্ড লাইন থেকে PhantomJS দিয়ে রান করুন:

phantomjs scrape.js

এই কমান্ডটি স্ক্রিপ্টটি রান করবে, পেজটি খুলবে, h1 ট্যাগ থেকে ডেটা স্ক্র্যাপ করবে, এবং পেজের স্ক্রিনশট screenshot.png নামে সেভ করবে।

Advanced PhantomJS Web Scraping Example

এখন, ধরুন আপনি একটি ওয়েব পেজ থেকে টেবিল ডেটা স্ক্র্যাপ করতে চান। নিচে একটি উন্নত উদাহরণ দেওয়া হয়েছে:

var page = require('webpage').create();
var url = 'https://example.com/table';

page.open(url, function(status) {
    if (status === 'success') {
        var data = page.evaluate(function() {
            var rows = document.querySelectorAll('table tr'); // Select all rows in the table
            var tableData = [];

            rows.forEach(function(row) {
                var columns = row.querySelectorAll('td');
                var rowData = [];
                columns.forEach(function(col) {
                    rowData.push(col.innerText); // Get text content of each column
                });
                tableData.push(rowData);
            });

            return tableData;
        });

        console.log('Scraped Table Data: ' + JSON.stringify(data)); // Print the scraped data

        phantom.exit();
    } else {
        console.log('Failed to open the page');
        phantom.exit();
    }
});

Explanation of Advanced Scraping:

  • Select Rows: document.querySelectorAll('table tr'); – পেজের মধ্যে থাকা টেবিলের সমস্ত tr (টেবিল রো) সিলেক্ট করা হচ্ছে।
  • Loop Through Rows and Columns: পরবর্তী লুপে প্রতিটি রো এবং কলাম থেকে innerText নিয়ে আসা হচ্ছে এবং তা একটি অ্যারে হিসেবে সংরক্ষণ করা হচ্ছে।
  • Output: স্ক্র্যাপ করা ডেটা JSON ফরম্যাটে কনসোলে প্রিন্ট করা হচ্ছে।

PhantomJS Web Scraping এর সুবিধা:

  1. Headless Browser: PhantomJS একটি headless ব্রাউজার, যা UI ছাড়াই ওয়েব পেজ লোড করতে সক্ষম। এটি দ্রুত স্ক্র্যাপিং করতে সাহায্য করে।
  2. Dynamic Content Handling: JavaScript চালানো সাপোর্ট করে, তাই AJAX এর মাধ্যমে ডাইনামিক কনটেন্ট লোড করা ওয়েব পেজগুলি স্ক্র্যাপ করা সহজ।
  3. Customizable: আপনি কোডে কাস্টম স্ক্র্যাপিং লজিক তৈরি করতে পারেন এবং নির্দিষ্ট উপাদানগুলো সিলেক্ট করতে পারেন।

PhantomJS Web Scraping Best Practices:

  1. Respect Robots.txt: ওয়েবসাইট স্ক্র্যাপ করার সময় তাদের robots.txt ফাইল চেক করুন যাতে স্ক্র্যাপিং নিয়মাবলী মেনে চলা হয়।
  2. Delay Requests: সার্ভারকে অতিরিক্ত লোড না দেওয়ার জন্য বিভিন্ন রিকোয়েস্টের মধ্যে বিলম্ব (delay) দিন।
  3. Error Handling: স্ক্র্যাপিং স্ক্রিপ্টে যথাযথ error handling যোগ করুন, যেমন ওয়েব পেজ লোড না হলে পুনরায় চেষ্টা করা।
  4. Headers and User-Agent: ওয়েবসাইট থেকে ডেটা স্ক্র্যাপ করার সময় সঠিক user-agent হেডার ব্যবহার করা উচিৎ যাতে ওয়েবসাইট মনে না করে আপনি একটি বট।

PhantomJS একটি শক্তিশালী টুল যা ওয়েব স্ক্র্যাপিং এবং অটোমেটেড টেস্টিংয়ের জন্য ব্যবহৃত হয়। আপনি PhantomJS এর মাধ্যমে সহজেই ওয়েব পেজের ডেটা স্ক্র্যাপ করতে পারেন, যেমন HTML কন্টেন্ট, টেবিল ডেটা, ইমেজ, এবং আরও অনেক কিছু। এছাড়া, স্ক্রিপ্টের মাধ্যমে স্ক্রিনশট গ্রহণ এবং ডাইনামিক কনটেন্ট ম্যানিপুলেশনও করা সম্ভব।

Content added By

PhantomJS হল একটি headless ব্রাউজার, যা মূলত JavaScript, Web Scraping, এবং Automation এর জন্য ব্যবহৃত হয়। এটি একটি ব্রাউজারের মতো আচরণ করে তবে গ্রাফিকাল ইউজার ইন্টারফেস (GUI) ছাড়াই, এবং এটি কমান্ড লাইন থেকে নিয়ন্ত্রণ করা যায়। PhantomJS বিশেষত ওয়েব স্ক্র্যাপিং এবং অটোমেশন টাস্কে খুবই কার্যকরী।

Web Scraping এর জন্য PhantomJS ব্যবহার

Web Scraping হল একটি প্রক্রিয়া, যার মাধ্যমে একটি ওয়েব পেজের তথ্য স্বয়ংক্রিয়ভাবে সংগৃহীত হয়। PhantomJS এটি করার জন্য খুবই কার্যকর, কারণ এটি একটি headless ব্রাউজার, তাই আপনি স্ক্র্যাপিং এর সময় ওয়েব পেজের সম্পূর্ণ DOM এবং JavaScript রান করতে পারেন, যা সাধারণ ব্রাউজারে করার মতো।

PhantomJS ব্যবহার করে Web Scraping শুরু করা:

১. PhantomJS ইনস্টলেশন: প্রথমে, PhantomJS ইনস্টল করতে হবে। এটি ইনস্টল করার জন্য আপনার সিস্টেমে npm (Node Package Manager) থাকতে হবে।

npm install -g phantomjs

অথবা আপনি PhantomJS এর অফিসিয়াল ওয়েবসাইট থেকে ডাউনলোড এবং ইনস্টল করতে পারেন: PhantomJS Downloads

২. PhantomJS স্ক্র্যাপিং স্ক্রিপ্ট লেখা:

এখন, PhantomJS এর মাধ্যমে ওয়েব স্ক্র্যাপিং করার জন্য একটি স্ক্রিপ্ট তৈরি করতে হবে। নিচে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে একটি ওয়েব পেজ থেকে তথ্য সংগ্রহ করা হচ্ছে:

PhantomJS Web Scraping Script Example:

var page = require('webpage').create();  // Create a webpage instance
var url = 'https://example.com';         // The URL you want to scrape

// Open the page
page.open(url, function(status) {
    if (status === 'success') {
        // Extract content from the page
        var title = page.evaluate(function() {
            return document.title; // Extract the page title
        });

        console.log('Page Title: ' + title);  // Log the extracted title

        // Optionally, take a screenshot of the page
        page.render('screenshot.png'); // Save the screenshot

    } else {
        console.log('Failed to load the page.');
    }
    phantom.exit();  // Exit PhantomJS
});

Explanation of the Script:

  1. require('webpage').create(): এটি একটি নতুন ওয়েবপেজ তৈরি করে, যা PhantomJS এর মধ্যে ব্যবহৃত হবে।
  2. page.open(url, callback): এটি নির্দিষ্ট URL এ যেতে PhantomJS কে নির্দেশ দেয় এবং ওয়েব পেজ লোড হলে callback ফাংশন চালাবে।
  3. page.evaluate(function() {...}): এটি ওয়েব পেজের DOM-এ এক্সিকিউট করে এবং এখানে আপনি ওয়েব পেজের যেকোনো ডেটা এক্সট্রাক্ট করতে পারেন।
  4. page.render('screenshot.png'): এটি পেজের একটি স্ক্রিনশট নেয় এবং ফাইল হিসেবে সেভ করে। আপনি PNG, JPEG, অথবা PDF ফরম্যাটে স্ক্রিনশট নিতে পারেন।

Output Example:

  • এটি পেজের শিরোনাম (title) console এ প্রিন্ট করবে।
  • পেজের স্ক্রিনশট একটি PNG ফাইল হিসেবে সেভ করবে।

PhantomJS এর সাথে স্ক্র্যাপিংয়ের আরও উন্নত ফিচার:

1. Dynamic Content Scraping:

PhantomJS মূলত headless browser, তাই এটি JavaScript রেন্ডার করতে পারে, যা অন্যান্য static scrapers (যেমন BeautifulSoup বা Scrapy) করতে পারে না। যদি একটি পেজ JavaScript দ্বারা ডাইনামিকভাবে লোড হয়, PhantomJS তা স্ক্র্যাপ করতে পারে।

2. Interacting with Forms:

PhantomJS ফর্মে ইনপুট করার জন্যও ব্যবহৃত হতে পারে, যেমন login forms বা search forms। আপনি সহজেই ফর্ম ফিল্ড ভ্যালু সেট করতে পারেন এবং সাবমিট করতে পারেন।

Example - Filling out a form:

var page = require('webpage').create();

page.open('https://example.com/login', function(status) {
    if (status === 'success') {
        page.evaluate(function() {
            document.querySelector('input[name="username"]').value = 'myusername';
            document.querySelector('input[name="password"]').value = 'mypassword';
            document.querySelector('form').submit(); // Submit the form
        });
    }
    phantom.exit();
});

3. Handling AJAX Requests:

PhantomJS ব্যবহার করে আপনি AJAX রিকোয়েস্ট হ্যান্ডেল করতে পারেন। এটি আপনাকে AJAX থেকে ডেটা এক্সট্রাক্ট করার সুযোগ দেয় যেগুলো সরাসরি HTML তে উপস্থিত থাকে না।

4. Handling Cookies and Sessions:

PhantomJS কুকি ম্যানেজমেন্টের জন্য সমর্থন প্রদান করে। আপনি cookies সেট করতে পারেন এবং সেগুলিকে ওয়েব পেজের বিভিন্ন রিকোয়েস্টের সাথে ব্যবহার করতে পারেন।

5. Delayed Page Loading:

কখনও কখনও, পেজের সমস্ত উপাদান লোড হতে সময় নেবে, বিশেষ করে AJAX বা JavaScript ডেটা লোডিং এর মাধ্যমে। PhantomJS এ আপনি পেজ লোড হওয়ার পরবর্তী স্টেট চেক করতে পারেন এবং সেই অনুযায়ী স্ক্র্যাপিং কার্যক্রম শুরু করতে পারেন।

page.onLoadFinished = function(status) {
    if (status === "success") {
        console.log("Page Loaded Successfully");
    }
};

PhantomJS Web Scraping Best Practices:

  1. Respect Robots.txt:
    • robots.txt ফাইলটি দেখুন, এটি নির্দেশ করে কোন ওয়েব পেজ স্ক্র্যাপ করা যেতে পারে বা যাবে না। এটির প্রতি সম্মান জানানো গুরুত্বপূর্ণ।
  2. Throttle Requests:
    • স্ক্র্যাপিংয়ের সময় আপনি ওয়েব সাইটের সার্ভারে অতিরিক্ত চাপ না ফেলতে rate limiting প্রয়োগ করতে পারেন। অর্থাৎ, একসাথে অনেক রিকোয়েস্ট পাঠানো থেকে বিরত থাকতে হবে।
  3. Error Handling:
    • পেজ লোড না হলে বা কোনো স্ক্র্যাপিং সমস্যার সম্মুখীন হলে সঠিক ত্রুটি সনাক্তকরণ এবং লগিং প্রয়োজন।
  4. Use Proxies if Necessary:
    • একাধিক রিকোয়েস্ট পাঠানোর ফলে ওয়েব সাইট ব্লক হয়ে যেতে পারে। এর থেকে রক্ষা পেতে আপনি proxies ব্যবহার করতে পারেন।

PhantomJS Alternatives:

  • Puppeteer: এটি Google Chrome বা Chromium ব্রাউজারের জন্য একটি headless Node.js API, যা PhantomJS এর তুলনায় আরও আধুনিক এবং উন্নত ফিচার সরবরাহ করে।
  • Playwright: এটি Puppeteer এর মতো একটি Node.js লাইব্রেরি, তবে এটি আরও বেশি ব্রাউজার সাপোর্ট প্রদান করে (যেমন Firefox, Webkit এবং Chromium)।

PhantomJS হল একটি শক্তিশালী টুল যা web scraping এবং automation কাজের জন্য ব্যবহৃত হয়। এটি headless browser হিসেবে ওয়েব পেজ রেন্ডার করতে পারে এবং JavaScript এর মাধ্যমে ডেটা এক্সট্রাক্ট করতে পারে, যা সাধারণ ওয়েব স্ক্র্যাপিং টুলগুলির জন্য কঠিন হতে পারে। আপনি form submission, AJAX handling, cookies management, এবং আরও অনেক কিছু PhantomJS এর মাধ্যমে করতে পারেন।

Content added By

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

PhantomJS একটি headless browser যা JavaScript এর মাধ্যমে ওয়েব পেজ রেন্ডারিং এবং স্ক্রিপ্টিং কাজ করে। এটি মূলত Webkit এ ভিত্তি করে তৈরি এবং কোনো গ্রাফিক্যাল ইউজার ইন্টারফেস ছাড়াই ওয়েব পেজের স্ক্রিনশট, PDF আউটপুট, এবং অন্যান্য ব্রাউজারীয় কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। PhantomJS এর মাধ্যমে web scraping, automated testing, screenshot capturing, এবং আরও অনেক কাজ করা যায়।

এখানে আলোচনা করা হবে কিভাবে PhantomJS ব্যবহার করে একটি ওয়েব পেজের নির্দিষ্ট ডেটা এলিমেন্ট (যেমন: টেক্সট, HTML উপাদান) ফিল্টার করা যায়।

PhantomJS দিয়ে পেজের নির্দিষ্ট ডেটা এলিমেন্ট ফিল্টার করা

PhantomJS ব্যবহার করে ওয়েব পেজ থেকে specific data elements (যেমন: টেক্সট, HTML উপাদান) ফিল্টার করতে আপনি JavaScript কোড ব্যবহার করতে পারবেন। PhantomJS এর মাধ্যমে আপনি ওয়েব পেজ লোড করার পর, সেই পেজের DOM (Document Object Model) থেকে নির্দিষ্ট তথ্য বের করতে পারেন। এটি একটি সাধারণ স্ক্র্যাপিং পদ্ধতি যেখানে আপনি পেজের HTML কনটেন্ট থেকে উপাদান বের করে তার প্রয়োজনীয় ডেটা সংগ্রহ করতে পারেন।

1. PhantomJS দিয়ে ওয়েব পেজ লোড করা

প্রথমে, PhantomJS স্ক্রিপ্ট তৈরি করে ওয়েব পেজ লোড করতে হবে। এরপর সেই পেজের ডেটা ফিল্টার করার জন্য DOM থেকে উপাদান নির্বাচন করা যাবে।

PhantomJS স্ক্রিপ্ট উদাহরণ:

var webpage = require('webpage').create();  // Create a webpage object
var url = 'http://example.com';  // The URL of the page you want to scrape

webpage.open(url, function(status) {
    if (status === 'success') {
        var data = webpage.evaluate(function() {
            // Inside the evaluate function, you can access the DOM
            // Select the elements you want to filter
            var elements = document.querySelectorAll('h1, .main-content p'); // Example: selecting <h1> and <p> with class "main-content"
            
            var textData = [];
            elements.forEach(function(element) {
                textData.push(element.textContent);  // Push text content to array
            });

            return textData;  // Return the filtered text data
        });

        console.log('Filtered Data: ' + JSON.stringify(data));  // Output the filtered data to the console

    } else {
        console.log('Failed to load the page');
    }

    phantom.exit();  // Exit PhantomJS
});

Explanation of Code:

  1. webpage.create(): এটি একটি নতুন ওয়েব পেজ তৈরি করে, যেটি PhantomJS এর মাধ্যমে লোড করা হবে।
  2. webpage.open(): এখানে ওয়েবপেজটি লোড করা হয় এবং evaluate() ফাংশনের মাধ্যমে DOM এর উপর কাজ করা হয়।
  3. document.querySelectorAll(): এই ফাংশনটি নির্দিষ্ট CSS সিলেক্টর ব্যবহার করে HTML উপাদানগুলো নির্বাচন করে। এখানে, h1 এবং .main-content p নির্বাচন করা হয়েছে।
  4. element.textContent: এটি নির্বাচিত এলিমেন্টের টেক্সট কন্টেন্ট বের করে এবং একটি অ্যারে textData তে যোগ করা হয়।
  5. console.log(): স্ক্রিপ্টের শেষে, ফিল্টার করা ডেটা কনসোলে আউটপুট হিসেবে দেখানো হয়।

2. PhantomJS দিয়ে JSON ডেটা ফিল্টার করা

যদি আপনার পেজে কোনো JSON ডেটা থাকে এবং আপনি সেই ডেটা ফিল্টার করতে চান, তাহলে JavaScript ব্যবহার করে এটি করা সম্ভব। এখানে, JSON ডেটা থেকে নির্দিষ্ট কীগুলি বের করার জন্য একটি উদাহরণ দেয়া হল।

var webpage = require('webpage').create();
var url = 'http://example.com/api/data'; // Example URL for JSON data

webpage.open(url, function(status) {
    if (status === 'success') {
        var data = webpage.evaluate(function() {
            // Assuming the response is a JSON object
            var jsonData = JSON.parse(document.body.innerText);  // Parse the JSON data
            var filteredData = jsonData.map(function(item) {
                return {
                    title: item.title, // Extract specific fields from each item
                    description: item.description
                };
            });
            return filteredData;
        });

        console.log('Filtered Data: ' + JSON.stringify(data));  // Output the filtered data
    } else {
        console.log('Failed to load the page');
    }

    phantom.exit();  // Exit PhantomJS
});

Explanation of Code:

  1. JSON Parsing: JSON.parse() ব্যবহার করে ওয়েব পেজের JSON ডেটা প্যার্স করা হয়েছে। সাধারণত, JSON ডেটা HTML পেজের innerText অথবা response body তে থাকে।
  2. Data Mapping: map() ফাংশন ব্যবহার করে JSON ডেটার নির্দিষ্ট কীগুলি (যেমন: title, description) বের করা হয়েছে।

3. PhantomJS ব্যবহার করে HTML ফিল্টারিং

ফিল্টারিংয়ের মাধ্যমে আপনি HTML ডেটা বের করে সেগুলিকে প্রোসেস করতে পারেন। উদাহরণস্বরূপ, আপনি table বা list items থেকে ডেটা বের করে নিতে পারেন।

var webpage = require('webpage').create();
var url = 'http://example.com/products'; // Example page with product list

webpage.open(url, function(status) {
    if (status === 'success') {
        var productData = webpage.evaluate(function() {
            // Extract product details from a table
            var rows = document.querySelectorAll('table.product-list tr');
            var products = [];
            
            rows.forEach(function(row) {
                var cells = row.querySelectorAll('td');
                var product = {
                    name: cells[0].textContent.trim(),
                    price: cells[1].textContent.trim(),
                    description: cells[2].textContent.trim()
                };
                products.push(product);
            });

            return products;
        });

        console.log('Product Data: ' + JSON.stringify(productData));
    } else {
        console.log('Failed to load the page');
    }

    phantom.exit();  // Exit PhantomJS
});

Explanation of Code:

  1. querySelectorAll('table.product-list tr'): এই সিলেক্টরটি product-list নামক table এর সমস্ত row নির্বাচন করে।
  2. textContent: প্রতিটি সেলের (cell) টেক্সট কন্টেন্ট বের করে নিয়ে, একটি অবজেক্টে name, price, এবং description ডেটা সংগ্রহ করা হচ্ছে।
  3. productData: ফিল্টার করা ডেটা একটি অ্যারে আকারে সংরক্ষণ করা হচ্ছে।

4. PhantomJS ব্যবহার করে পেজে স্ক্রিপ্ট চালানো

PhantomJS ব্যবহার করে আপনি JavaScript কোড পেজে চালাতে পারেন এবং DOM এ ম্যানিপুলেশন করতে পারেন। এটি ওয়েব স্ক্র্যাপিং, টেস্টিং বা অ্যাকশন ট্র্যাকিং-এর জন্য উপকারী।

var page = require('webpage').create();
page.open('http://example.com', function(status) {
    if (status === 'success') {
        page.evaluate(function() {
            // You can execute JavaScript directly within the page
            var title = document.title;
            console.log('Page title is: ' + title);
        });
    }
    phantom.exit();
});

PhantomJS একটি শক্তিশালী টুল যা ওয়েব পেজ থেকে ডেটা ফিল্টার, স্ক্র্যাপিং এবং স্ক্রিনশটসহ অন্যান্য কাজের জন্য ব্যবহৃত হয়। আপনি DOM manipulation, JSON parsing, HTML element filtering, এবং automated tasks এর মাধ্যমে অনেক ধরনের ওয়েব অ্যাপ্লিকেশন অটোমেশন করতে পারবেন। PhantomJS এর মাধ্যমে ওয়েব পেজের নির্দিষ্ট ডেটা সংগ্রহ করা সহজ এবং কার্যকরী হয়ে ওঠে, এবং এটি বিভিন্ন ওয়েব ডেভেলপমেন্ট এবং স্ক্র্যাপিং প্রয়োজনে ব্যবহার করা যেতে পারে।

Content added By

PhantomJS একটি headless browser (বিশেষভাবে ব্যবহৃত WebKit ইঞ্জিন) যা স্ক্রিপ্টিংয়ের মাধ্যমে ওয়েব পেজের উপর কাজ করতে সক্ষম। এটি সাধারণত automation, web scraping, এবং testing এর জন্য ব্যবহৃত হয়। PhantomJS ব্রাউজারের মতো কাজ করলেও, এটি কোনো GUI ছাড়া চলে এবং সার্ভার সাইডে বা কমান্ড লাইন ইন্টারফেস (CLI) এর মাধ্যমে বিভিন্ন কাজ সম্পাদন করতে সক্ষম।

এখন, আপনি যদি PhantomJS এর মাধ্যমে JSON বা CSV ফরম্যাটে ডেটা স্টোর করতে চান, তবে আপনি PhantomJS scripting ব্যবহার করে এই ডেটা ফরম্যাটে তথ্য সংরক্ষণ করতে পারেন। এখানে এর কিছু ব্যবহারিক উদাহরণ দেওয়া হলো।


1. PhantomJS এবং JSON ফরম্যাটে ডেটা স্টোর করা

JSON (JavaScript Object Notation) হল একটি লাইটওয়েট ডেটা বিনিময় ফরম্যাট যা মানুষ দ্বারা পড়া সহজ এবং মেশিন দ্বারা পার্স করা সহজ। PhantomJS এর মাধ্যমে আপনি ওয়েব পেজ থেকে ডেটা সংগ্রহ করে সেটি JSON ফরম্যাটে সংরক্ষণ করতে পারেন।

PhantomJS দিয়ে JSON স্টোর করার উদাহরণ:

script.js (PhantomJS স্ক্রিপ্ট):

var page = require('webpage').create();  // Create a new webpage instance
var fs = require('fs');  // File system module to write the output file

page.open('http://example.com', function(status) {
    if (status === "success") {
        var data = page.evaluate(function() {
            // Extract data from the webpage
            var title = document.title;
            var bodyText = document.body.innerText;

            // Create a JSON object to store data
            return {
                pageTitle: title,
                content: bodyText
            };
        });

        // Write the extracted data into a JSON file
        fs.write('output.json', JSON.stringify(data, null, 4), 'w'); // Format with indentation

        phantom.exit();
    } else {
        console.log("Failed to load the page.");
        phantom.exit(1);
    }
});

Explanation:

  • page.evaluate: এটি ওয়েবপেজে JavaScript কোড চালানোর জন্য ব্যবহার করা হয়। এখানে এটি ওয়েব পেজের টাইটেল এবং কন্টেন্ট এক্সট্র্যাক্ট করছে।
  • fs.write: ফাইল সিস্টেম মডিউলটি JSON ফাইল লেখার জন্য ব্যবহৃত হচ্ছে। এখানে JSON ডেটা output.json ফাইলে সংরক্ষণ করা হচ্ছে।
  • JSON.stringify: JSON অবজেক্টকে স্ট্রিং এ রূপান্তরিত করতে এই ফাংশনটি ব্যবহার করা হয়। দ্বিতীয় প্যারামিটার null, 4 একটি ইনডেন্টেশন ফরম্যাট সৃষ্টির জন্য।

Running the Script:

phantomjs script.js

এটি output.json নামে একটি ফাইল তৈরি করবে যাতে পেজের টাইটেল এবং কন্টেন্ট JSON ফরম্যাটে থাকবে।


2. PhantomJS এবং CSV ফরম্যাটে ডেটা স্টোর করা

CSV (Comma-Separated Values) একটি সাধারণ ডেটা ফরম্যাট যা সোজাসুজি টেবিল ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। PhantomJS স্ক্রিপ্ট ব্যবহার করে আপনি ওয়েব পেজ থেকে তথ্য সংগ্রহ করে CSV ফরম্যাটে সেভ করতে পারেন।

PhantomJS দিয়ে CSV স্টোর করার উদাহরণ:

script.js (PhantomJS স্ক্রিপ্ট):

var page = require('webpage').create();  // Create a new webpage instance
var fs = require('fs');  // File system module to write the output file

page.open('http://example.com', function(status) {
    if (status === "success") {
        var data = page.evaluate(function() {
            // Extract data from the webpage
            var title = document.title;
            var bodyText = document.body.innerText;

            // Return data in CSV format (comma-separated values)
            return [
                ['Page Title', 'Content'],
                [title, bodyText]
            ];
        });

        // Convert the array into CSV format
        var csvContent = data.map(function(row) {
            return row.join(',');
        }).join('\n');

        // Write the CSV content to a file
        fs.write('output.csv', csvContent, 'w');  // Write as CSV file

        phantom.exit();
    } else {
        console.log("Failed to load the page.");
        phantom.exit(1);
    }
});

Explanation:

  • page.evaluate: এখানে, পেজের টাইটেল এবং কন্টেন্টের ডেটা নিয়ে আসা হচ্ছে এবং তা একটি 2D array আকারে ফিরিয়ে দেওয়া হচ্ছে, যেটি CSV ফরম্যাটে রূপান্তরিত হবে।
  • map এবং join: এই দুটি মেথড দিয়ে ডেটা CSV ফরম্যাটে কনভার্ট করা হচ্ছে।
  • fs.write: ফাইল সিস্টেম মডিউলটি CSV ফাইল লেখার জন্য ব্যবহৃত হচ্ছে।

Running the Script:

phantomjs script.js

এটি output.csv নামে একটি ফাইল তৈরি করবে, যাতে ওয়েব পেজের টাইটেল এবং কন্টেন্ট CSV ফরম্যাটে থাকবে।


PhantomJS এর মাধ্যমে আপনি JSON এবং CSV ফরম্যাটে ডেটা স্টোর করতে পারবেন সহজে। এতে করে আপনি ওয়েব পেজ থেকে ডেটা এক্সট্র্যাক্ট করে তা ফাইল সিস্টেমে সেভ করতে পারবেন, যা পরবর্তীতে ডেটা অ্যানালাইসিস বা অন্য কোনো উদ্দেশ্যে ব্যবহার করা যেতে পারে। JSON ফরম্যাট হল সাধারণত ডেটা এক্সচেঞ্জের জন্য ব্যবহৃত ফরম্যাট, এবং CSV ফরম্যাট সহজ টেবিল ডেটা স্টোর করার জন্য জনপ্রিয়। PhantomJS এর সাথে web scraping, automation, এবং data extraction কাজ আরও শক্তিশালী এবং সহজ হয়ে ওঠে।

Content added By
Promotion

Are you sure to start over?

Loading...