Master Web Automation: Scraping Dynamic Sites with Headless Puppeteer
সাধারণ `axios` বা `cheerio` দিয়ে স্ট্যাটিক এইচটিএমএল স্ক্র্যাপ করা গেলেও, রিয়্যাক্ট (React) বা ভিউ (Vue) দিয়ে তৈরি ডায়নামিক সিঙ্গেল পেজ অ্যাপ্লিকেশন (SPA) স্ক্র্যাপ করা অসম্ভব হয়ে পড়ে। কারণ এ ধরনের সাইটের ডেটা জাভাস্ক্রিপ্ট এক্সিকিউট হওয়ার পর লোড হয়। এই সমস্যার সমাধান হলো **Puppeteer**।
পাপেটিয়ার হলো একটি নোড লাইব্রেরি যা ব্যাকগ্রাউন্ডে একটি হেডলেস ক্রোমিয়াম (Headless Chromium) ব্রাউজার রান করে সম্পূর্ণ মানুষের মতো মাউস ক্লিক, ফর্ম সাবমিট এবং স্ক্রিনশট নেওয়ার মতো কাজগুলো রিমোটলি অটোমেট করতে পারে।
১. লাইব্রেরি ইনস্টলেশন
আপনার প্রোজেক্ট ডিরেক্টরিতে পাপেটিয়ার প্যাকেজটি ইনস্টল করে নিন। এটি স্বয়ংক্রিয়ভাবে মানানসই ক্রোমিয়াম বাইনারি ডাউনলোড করে নেবে:
npm install puppeteer
ধাপ ২: কোর অটোমেশন স্ক্রিপ্ট (`scrape.js`)
একটি নির্দিষ্ট ওয়েবসাইট ভিজিট করে সেটির ডেটা রেন্ডার হওয়া পর্যন্ত অপেক্ষা করা এবং প্রয়োজনীয় এলিমেন্ট স্ক্র্যাপ করার জন্য নিচের প্রোফেশনাল কোড আর্কিটেকচারটি ব্যবহার করুন:
const puppeteer = require('puppeteer');
(async () => {
// হেডলেস মোডে ব্রাউজার লঞ্চ করা
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox'] // ক্লাউড বা লিনাক্স সার্ভার অপ্টিমাইজেশন
});
const page = await browser.newPage();
// টার্গেট ইউআরএল এ নেভিগেট করা
await page.goto('https://example.com/dynamic-products', {
waitUntil: 'networkidle2' // নেটওয়ার্ক রিকোয়েস্ট সম্পূর্ণ শেষ হওয়া পর্যন্ত অপেক্ষা করবে
});
// নির্দিষ্ট সিএসএস সিলেক্টর লোড হওয়া নিশ্চিত করা
await page.waitForSelector('.product-card');
// ডম (DOM) থেকে ডেটা এক্সট্র্যাক্ট করা
const products = await page.evaluate(() => {
const items = document.querySelectorAll('.product-card');
let data = [];
items.forEach(item => {
data.push({
title: item.querySelector('.title').innerText,
price: item.querySelector('.price').innerText
});
});
return data;
});
console.log('Scraped Data:', products);
// পুরো পেজের একটি স্ক্রিনশট নেওয়া (ঐচ্ছিক)
await page.screenshot({ path: 'screenshot.png', fullPage: true });
await browser.close();
})();
মোবাইল ও সার্ভার অপ্টিমাইজেশন টিপস: আপনি যদি Termux বা কোনো কম র্যামের লিনাক্স VPS সার্ভারে এটি চালাতে চান, তবে puppeteer-core ব্যবহার করে মোবাইলের নিজস্ব ক্রোমিয়াম পাথ লিঙ্কিং করে দিলে মেমোরি খরচ অর্ধেকের নিচে নেমে আসবে।