Loading...
Back to blog. Article language: BN EN ES FR HI ID PT RU UR VI ZH

ওয়েব স্ক্র্যাপিং PHP: একটি ব্যবহারিক ধাপ-ভিত্তি গাইড

W3Techs-এর তথ্য অনুযায়ী, ইন্টারনেটের প্রায় ৭৭% সার্ভার-সাইড ওয়েবসাইট PHP দ্বারা পরিচালিত হয়। এটি ব্যাকএন্ডে সরাসরি ডেটা কালেকশন অটোমেশনের জন্য অন্যতম ব্যবহারিক একটি ভাষা। এই গাইডটি ডেভেলপার এবং টেকনিক্যাল টিমের জন্য তৈরি করা হয়েছে, যাতে তারা ওয়েব স্ক্র্যাপিং PHP সম্পর্কে একটি স্পষ্ট এবং কার্যকর ধারণা পায়: এটি কীভাবে কাজ করে, কোন টুলগুলো ব্যবহার করতে হয় এবং কীভাবে বাস্তব পরিবেশে টিকে থাকার মতো স্ক্রিপ্ট তৈরি করা যায়। এখানে উল্লিখিত প্রতিটি কৌশল সর্বজনীনভাবে উপলব্ধ ডেটার দায়িত্বশীল এবং বৈধ ব্যবহারের প্রতিফলন।

এই PHP ওয়েব স্ক্র্যাপিং টিউটোরিয়ালটি ডেভেলপারদের এনভায়রনমেন্ট সেটআপ থেকে শুরু করে স্ট্রাকচার্ড ডেটা আউটপুট পর্যন্ত পাইপলাইনের প্রতিটি ধাপের মধ্য দিয়ে নিয়ে যাবে।

PHP-তে ওয়েব স্ক্র্যাপিং কী এবং কখন এটি ব্যবহার করবেন

এর মূল বিষয় হলো, PHP ডেটা এক্সট্রাকশন বলতে বুঝায় টার্গেট ইউআরএল-এ HTTP রিকোয়েস্ট পাঠানো, রেসপন্স হিসেবে HTML গ্রহণ করা এবং সেই মার্কআপ থেকে স্ট্রাকচার্ড তথ্য বের করার জন্য পার্স করা। স্ক্রিপ্টটি একটি ব্রাউজার যা করে, তার অনুকরণে কাজ করে কিন্তু কোনো মানুষের ক্লিক ছাড়াই প্রোগ্রাম্যাটিকভাবে এটি সম্পন্ন হয়। এপিআই (API)-এর মতো এখানে ডেটা সোর্সের সাথে কোনো আনুষ্ঠানিক চুক্তি থাকে না: সার্ভার যে HTML ফেরত দেয়, আপনি সরাসরি তা নিয়েই কাজ করেন।

প্রোডাকশন কনটেক্সটে PHP ওয়েব স্ক্র্যাপিংয়ের সবচেয়ে চমৎকার উদাহরণ হলো একটি প্রাইস মনিটরিং স্ক্রিপ্ট, যা cURL-এর মাধ্যমে প্রতিযোগীদের পেজ ফেচ করে এবং পার্স করা ফলাফল MySQL-এ জমা করে।

📖 সংজ্ঞা: ওয়েব স্ক্র্যাপিং PHP হলো ওয়েব পেজ ফেচ করা এবং তাদের HTML স্ট্রাকচার থেকে নির্দিষ্ট ডেটা এক্সট্রাক্ট করার একটি স্বয়ংক্রিয় প্রক্রিয়া। PHP-তে সাধারণত রিকোয়েস্টের জন্য cURL এবং পার্সিংয়ের জন্য DOMDocument বা Simple HTML DOM ব্যবহার করা হয় - এবং আউটপুট ডেটাবেস, JSON ফাইল বা CSV-তে সংরক্ষণ করা হয়।

প্যারামিটারওয়েব স্ক্র্যাপিংএপিআই ইন্টিগ্রেশন
ডেটা প্রাপ্যতাযেকোনো পাবলিক HTMLশুধুমাত্র যা প্রোভাইডার প্রকাশ করে
সেটআপের জটিলতামাঝারি (HTML পার্সিং প্রয়োজনীয়)কম (স্ট্রাকচার্ড এন্ডপয়েন্ট)
স্থায়িত্বসাইট স্ট্রাকচারের উপর নির্ভরশীলউচ্চ (ভার্সনযুক্ত চুক্তি)
খরচশুধুমাত্র ইনফ্রাস্ট্রাকচারপ্রায়শই সাবস্ক্রিপশন-ভিত্তিক
আইনি স্বচ্ছতাযথাযথ অধ্যবসায় প্রয়োজনToS চুক্তির আওতাভুক্ত

স্ক্র্যাপিংয়ের জন্য PHP ব্যবহারের সুবিধাসমূহ

স্ক্র্যাপিংয়ের আলোচনায় পাইথনের তুলনায় PHP হয়তো কিছুটা কম মনোযোগ পায়, কিন্তু নির্দিষ্ট কিছু ক্ষেত্রে এর স্পষ্ট সুবিধাসমূহ রয়েছে। যদি আপনার টিমের ইতিমধ্যে একটি PHP ব্যাকএন্ড থাকে, তবে একই কোডবেসে একটি ক্রলার স্ক্রিপ্ট যুক্ত করা আলাদা কোনো পাইথন সার্ভিস রক্ষণাবেক্ষণ করার চেয়ে অনেক সহজ। এই ল্যাঙ্গুয়েজের সাথে বিল্ট-ইন cURL সাপোর্ট, নেটিভ DOM পার্সার এবং শেয়ার্ড ও VPS হোস্টিংয়ের সাথে ব্যাপক সামঞ্জস্যতা রয়েছে - যা কন্টেইনারাইজড ইনফ্রাস্ট্রাকচার ব্যবহার না করা টিমগুলোর জন্য গুরুত্বপূর্ণ।

MySQL-এর সাথে ইন্টিগ্রেশন সহজ এবং এর প্রচুর ডকুমেন্টেশন রয়েছে। বেশির ভাগ PHP ডেভেলপার এক ঘণ্টার কম সময়ে ডেটাবেসের সাথে একটি স্ক্র্যাপিং পাইপলাইন যুক্ত করতে পারেন। ডেপ্লয়মেন্টও ঝামেলামুক্ত: কোনো ভার্চুয়াল এনভায়রনমেন্ট বা ডিপেন্ডেন্সি আইসোলেশন নেই - শুধু আপলোড করুন এবং চালান। ছোট ইঞ্জিনিয়ারিং টিমের জন্য এই সরলতার বাস্তব অপারেশনাল ভ্যালু রয়েছে।

  • ✅নেটিভ cURL সাপোর্ট - অধিকাংশ হোস্টে অতিরিক্ত ইন্সটলেশনের প্রয়োজন নেই
  • ✅DOMDocument এবং XPath - কোর ল্যাঙ্গুয়েজে বিল্ট-ইন শক্তিশালী HTML পার্সিং
  • ✅শক্তিশালী হোস্টিং সামঞ্জস্যতা - শেয়ার্ড, VPS এবং ডেডিকেটেড সার্ভারে কাজ করে
  • ✅এক্সট্রাক্ট করা ডেটা সংরক্ষণের জন্য সহজ MySQL ইন্টিগ্রেশন
  • ❌তীব্র স্কেল ডিস্ট্রিবিউটেড ক্রলিংয়ের জন্য আদর্শ নয়
  • ❌Async/concurrent রিকোয়েস্ট হ্যান্ডলিং Node.js বা পাইথনের মতো সহজ নয়

USA বাজারে সাধারণ ব্যবহারিক ক্ষেত্র

যুক্তরাষ্ট্রে ওয়েব স্ক্র্যাপিং PHP সাধারণত প্রতিযোগিতামূলক প্রাইস ইন্টেলিজেন্সে ব্যবহৃত হয় - বিশেষ করে ই-কমার্সে, যেখানে টিমগুলো প্রতিদিন হাজার হাজার SKU মনিটর করে। রিয়েল এস্টেট টেক কোম্পানিগুলো অভ্যন্তরীণ সার্চ এবং ভ্যালুয়েশন টুলের জন্য পাবলিক পোর্টাল থেকে লিস্টিং ডেটা সংগ্রহ করে। ফিন্যান্সিয়াল অ্যানালিটিক্স ড্যাশবোর্ডগুলো পাবলিক মার্কেট কমেন্টারি, SEC ফাইলিং এবং নিউজের শিরোনাম সংগ্রহ করে সেন্টিমেন্ট মডেল তৈরি করে।

PHP-তে নির্ভরযোগ্যভাবে ওয়েব পেজ কন্টেন্ট স্ক্র্যাপ করতে হলে, পার্সার HTML ছোঁয়ার আগেই ফেচ লেয়ারের রিরিডাইরেক্ট, টাইমআউট এবং নন-UTF-8 এনকোডিং হ্যান্ডেল করতে হয়।

📦 কেস স্টাডি

SaaS প্রাইস মনিটরিং টুল, মিড-মার্কেট ই-কমার্স: একটি মার্কিন-ভিত্তিক SaaS কোম্পানি একটি PHP ক্রলার তৈরি করেছে যা প্রতিযোগীদের ওয়েবসাইট থেকে পাবলিকলি লিস্ট করা পণ্যের দাম ৪ ঘণ্টার চক্রে সংগ্রহ করে। স্ক্রিপ্টটি রিকোয়েস্টের জন্য cURL এবং পার্সিংয়ের জন্য DOMDocument ব্যবহার করে, এবং ফলাফল একটি MySQL ডেটাবেসে সংরক্ষণ করে। অ্যানালিস্টরা একটি ড্যাশবোর্ডের মাধ্যমে রিয়েল-টাইমে প্রাইসিং অ্যানোমালি (অস্বাভাবিকতা) চিহ্নিত করেন। পুরো পাইপলাইন একটি VPS-এ চলে - কোনো ডিস্ট্রিবিউটেড ইনফ্রাস্ট্রাকচারের প্রয়োজন হয় না - কারণ PHP-র নেটিভ টুলিং তাদের প্রয়োজনীয় স্কেল সাপোর্ট করে।

শেয়ার্ড হোস্টিংয়ে ওয়েব স্ক্র্যাপিং PHP ব্যবহারকারী টিমগুলো এই ল্যাঙ্গুয়েজের নেটিভ cURL এবং DOM সাপোর্টের সুবিধা পায়, যার জন্য কোনো অতিরিক্ত সার্ভার কনফিগারেশনের প্রয়োজন হয় না।

স্ক্র্যাপিংয়ের জন্য PHP এনভায়রনমেন্ট প্রস্তুত করা

স্ক্র্যাপিং লজিকের একটি লাইন লেখার আগেই এনভায়রনমেন্টটি সঠিকভাবে কনফিগার করা প্রয়োজন। এক্সটেনশনের অভাব বা লাইব্রেরি ভার্সনের অমিল পরবর্তীতে জটিল সমস্যা তৈরি করতে পারে। ১৫ মিনিট সময় নিয়ে শুরুতেই সেটআপ যাচাই করা সবসময় লাভজনক। নিচের ধাপগুলো লিনাক্স বা ম্যাকওএস-এ একটি স্ট্যান্ডার্ড PHP 8.x ডেভেলপমেন্ট এনভায়রনমেন্টকে প্রতিফলিত করে।

উইন্ডোজ ব্যবহারকারীরা XAMPP বা WSL ব্যবহার করে একই লজিক অনুসরণ করতে পারেন। মূল শর্ত হলো cURL যেন সক্রিয় থাকে এবং কমান্ড লাইন (CLI) থেকে অ্যাক্সেসযোগ্য হয় - শুধুমাত্র ওয়েব সার্ভার কনটেক্সটে নয়। অনেক ডেভেলপার সমস্যায় পড়েন কারণ তাদের cURL অ্যাপাচি-র জন্য এনাবল থাকলেও কমান্ড-লাইন স্ক্রিপ্টের জন্য থাকে না।

সঠিক PHP ওয়েব স্ক্র্যাপিং লাইব্রেরি নির্বাচন করা নির্ভর করে টার্গেট HTML-এর জটিলতার ওপর - DOMDocument অধিকাংশ ক্ষেত্রে যথেষ্ট, যেখানে যারা CSS-স্টাইল সিলেক্টর পছন্দ করেন তাদের জন্য Simple HTML DOM উপযুক্ত।

প্রয়োজনীয় টুল ও লাইব্রেরি

নতুন প্রজেক্টের জন্য PHP 8.1 বা তার উপরের ভার্সন সুপারিশ করা হয় - আগের ভার্সনে কিছু টাইপ-সেফটি ফিচারের অভাব থাকে যা বড় স্ক্র্যাপার রক্ষণাবেক্ষণ করা কঠিন করে তোলে। ল্যাঙ্গুয়েজ ছাড়াও, গুরুত্বপূর্ণ উপাদানগুলো হলো cURL এক্সটেনশন, DOM এক্সটেনশন (সাধারণত সাথে থাকে), ডিপেন্ডেন্সি ম্যানেজমেন্টের জন্য কম্পোজার (Composer), এবং ঐচ্ছিকভাবে Simple HTML DOM, যা jQuery-এর মতো সিলেক্টর সিনট্যাক্স খুঁজলে ব্যবহার করা যেতে পারে।

যেকোনো ওয়েব স্ক্র্যাপিং PHP cURL ইমপ্লিমেন্টেশনের ভিত্তি হলো CURLOPT_RETURNTRANSFER অপশন, যা সার্ভার রেসপন্সকে প্রিন্ট না করে স্ট্রিং হিসেবে ক্যাপচার করে।

কোন এক্সটেনশনগুলো কার্যকর তা নিশ্চিত করতে টার্মিনালে php -m কমান্ডটি চালান। আউটপুটে curl এবং dom খুঁজুন। যদি না থাকে, তবে php.ini ফাইলে সংশ্লিষ্ট লাইনগুলো আনকমেন্ট করে সার্ভার রিস্টার্ট করুন।

টুলউদ্দেশ্যপ্রয়োজনীয় / ঐচ্ছিক
PHP 8.1+রানটাইম এনভায়রনমেন্টপ্রয়োজনীয়
cURL এক্সটেনশনHTTP রিকোয়েস্ট পাঠানোপ্রয়োজনীয়
DOMDocumentনেটিভ HTML পার্সিংপ্রয়োজনীয়
XPathDOM ট্রি-এর মধ্যে নোড খোঁজাপ্রয়োজনীয়
Composerডিপেন্ডেন্সি ম্যানেজমেন্টসুপারিশকৃত
Simple HTML DOMবিকল্প CSS-সিলেক্টর পার্সিংঐচ্ছিক
Monologস্ট্রাকচার্ড লগিংঐচ্ছিক

একটি মৌলিক স্ক্র্যাপিং প্রজেক্ট সেটআপ

একটি সুসংগঠিত প্রজেক্ট স্ট্রাকচার এমন একটি স্ক্রিপ্ট তৈরি করতে সাহায্য করে যা আপনি দীর্ঘদিন মেইনটেইন করতে পারবেন। কনফিগারেশন (টার্গেট ইউআরএল, সিলেক্টর, আউটপুট পাথ) লজিক থেকে আলাদা ফাইলে রাখুন। ডেভেলপমেন্টের সময় Raw HTML রেসপন্সগুলো একটি আলাদা ক্যাশে ফোল্ডারে রাখুন - এতে পার্সার রিফাইন করার সময় টার্গেট সাইটে বারবার হিট করা এড়ানো যায়।

বেশির ভাগ ব্যাকএন্ড টিম যারা ইতিমধ্যে PHP ইনফ্রাস্ট্রাকচার চালাচ্ছে, তারা দেখে যে ওয়েব স্ক্র্যাপিং PHP কোনো নতুন ডিপেন্ডেন্সি ছাড়াই তাদের বিদ্যমান কোডবেসে স্বাভাবিকভাবে খাপ খেয়ে যায়।

🛠 হাউ-টু: আপনার প্রথম PHP স্ক্র্যাপিং স্ক্রিপ্ট তৈরি করা

  1. একটি প্রজেক্ট ফোল্ডার তৈরি করুন এবং composer init ব্যবহার করে কম্পোজার ইনিশিয়ালাইজ করুন
  2. টার্গেট ইউআরএল এবং সিলেক্টর ডেফিনিশনের জন্য config.php ফাইল যোগ করুন
  3. সমস্ত cURL রিকোয়েস্ট লজিকের জন্য src/fetcher.php তৈরি করুন
  4. DOM-ভিত্তিক এক্সট্রাকশন ফাংশনের জন্য src/parser.php তৈরি করুন
  5. একটি logs/ ডিরেক্টরি এবং একটি সাধারণ ফাইল লগার যোগ করুন
  6. ফেচার এবং পার্সারকে সংযুক্ত করতে run.php-কে এন্ট্রি পয়েন্ট হিসেবে তৈরি করুন
  7. প্যাজিনেটেড বা মাল্টি-ইউআরএল ফ্লোতে যাওয়ার আগে একটি ইউআরএল দিয়ে টেস্ট করুন

ধাপে ধাপে: PHP-তে একটি সাধারণ স্ক্র্যাপার তৈরি করা

এটি মূল অংশ। নিচের ফ্লোটি যেকোনো PHP স্ক্র্যাপিং টিউটোরিয়ালের তিনটি মৌলিক অপারেশন কভার করে: একটি পেজ ফেচ করা, HTML পার্স করা এবং ফলাফলকে একটি ব্যবহারযোগ্য ফরম্যাটে রূপান্তরিত করা। প্রতিটি ধাপ পরেরটির উপর ভিত্তি করে তৈরি এবং সবশেষে একটি সম্পূর্ণ কার্যকর পাইপলাইন গঠন করে।

যেকোনো ওয়েব স্ক্র্যাপিং PHP প্রজেক্টের কোর লুপ একই প্যাটার্ন অনুসরণ করে: পেজ ফেচ করা, HTML ট্রি পার্স করা, টার্গেট নোড এক্সট্রাক্ট করা এবং স্টোরেজে ফলাফল লেখা।

উদাহরণগুলোতে ভ্যানিলা PHP ব্যবহার করা হয়েছে - কোনো ফ্রেমওয়ার্ক নেই। এটি লজিকটিকে পোর্টেবল রাখে এবং যেকোনো প্রজেক্ট স্ট্রাকচারে সহজে অ্যাডাপ্ট করা যায়। Laravel বা Symfony ব্যবহারকারী টিমগুলো কোনো পরিবর্তন ছাড়াই এই কম্পোনেন্টগুলো সার্ভিস ক্লাসে বসাতে পারে।

যুক্তরাষ্ট্রের ই-কমার্স অ্যানালিটিক্স টিমগুলোর জন্য ওয়েব স্ক্র্যাপিং PHP একটি বাস্তবসম্মত পছন্দ, কারণ এটি অতিরিক্ত রানটাইম সেটআপ ছাড়াই যেকোনো হোস্টিং এনভায়রনমেন্টে চলে।

cURL দিয়ে HTTP রিকোয়েস্ট পাঠানো

PHP cURL স্ক্র্যাপিং শুরু হয় একটি cURL হ্যান্ডেল ইনিশিয়ালাইজ করার মাধ্যমে, তারপর প্রয়োজনীয় অপশন সেট করা, রিকোয়েস্ট এক্সিকিউট করা এবং রেসপন্স ক্যাপচার করা। এখানে কনফিগার করা অপশনগুলো সরাসরি প্রভাবিত করে রিকোয়েস্ট সফল হবে কিনা, টার্গেট সার্ভার কীভাবে এটি ব্যাখ্যা করবে এবং আপনার স্ক্র্যাপার ধীরগতির বা অনির্ভরযোগ্য কানেকশনের প্রতি কতটা স্থিতিস্থাপক হবে।

ওয়েব স্ক্র্যাপিং PHP-তে স্থায়িত্ব ল্যাঙ্গুয়েজের চেয়ে এর এরর হ্যান্ডলিং, রিট্রাই লজিক এবং সিলেক্টর ভার্সনিং কীভাবে শুরুতেই সাজানো হয়েছে তার ওপর বেশি নির্ভর করে।

প্রতিটি রিকোয়েস্টে সেট করার জন্য সবচেয়ে গুরুত্বপূর্ণ অপশনগুলো হলো CURLOPT_RETURNTRANSFER (রেসপন্সকে স্ট্রিং হিসেবে ক্যাপচার করতে), CURLOPT_TIMEOUT (ঝুলে থাকা কানেকশন রোধ করতে), এবং একটি বাস্তবসম্মত CURLOPT_USERAGENT স্ট্রিং। ইউজার এজেন্ট বাদ দিলে প্রায়শই 403 রেসপন্স আসে, কারণ অনেক সার্ভার ডিফল্টভাবে cURL হিসেবে শনাক্ত হওয়া রিকোয়েস্টগুলোকে প্রত্যাখ্যান করে।

DOMDocument এবং XPath দিয়ে HTML পার্সিং

একবার HTML পাওয়া গেলে, PHP DOM পার্সার টুলগুলো কাজ শুরু করে। PHP-র বিল্ট-ইন DOMDocument ক্লাস Raw HTML-কে একটি ট্রাভার্সেবল (যেখানে ঘোরাফেরা করা যায়) ট্রি স্ট্রাকচারে লোড করে। DOMXPath এরপর আপনাকে XPath এক্সপ্রেশন ব্যবহার করে সেই ট্রি-তে কোয়েরি করতে সাহায্য করে - যা ট্যাগ নেম, অ্যাট্রিবিউট, ক্লাস বা আপেক্ষিক অবস্থান অনুযায়ী নোড সিলেক্ট করার একটি আদর্শ সিনট্যাক্স।

ওয়েব স্ক্র্যাপিং PHP-র টুল মূল্যায়নের সময়, বিল্ট-ইন DOMDocument এবং XPath সমন্বয় তৃতীয় পক্ষের ডিপেন্ডেন্সি ছাড়াই বাস্তব জগতের বেশিরভাগ এক্সট্রাকশন কাজ সম্পন্ন করে।

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

ডেটা এক্সট্রাক্ট এবং স্ট্রাকচার করা

DOM কোয়েরি থেকে পাওয়া Raw নোড ভ্যালুগুলো খুব কমই সরাসরি স্টোরেজের জন্য প্রস্তুত থাকে। পাঠ্যে সাধারণত অতিরিক্ত হোয়াইটস্পেস, বিশেষ অক্ষর বা এনকোডিং আর্টেফ্যাক্ট থাকে যা পরিষ্কার করা প্রয়োজন। এক্সট্রাকশনের পর, ডেটা একটি সামঞ্জস্যপূর্ণ স্ট্রাকচারে - সাধারণত প্রতি রেকর্ডের জন্য একটি অ্যাসোসিয়েটিভ অ্যারো - রূপান্তরিত করা উচিত, এরপর আপনার পছন্দের আউটপুট ফরম্যাটে সিরিয়ালাইজ করা উচিত।

PHP ব্যবহার করে ওয়েব স্ক্র্যাপিং বিশেষত সেই SaaS প্রোডাক্টগুলোর মধ্যে সাধারণ, যাদের আলাদা পাইথন বা Node.js সার্ভিস রক্ষণাবেক্ষণের ওভারহেড ছাড়াই পাবলিকলি উপলব্ধ ডেটা সংগ্রহ করতে হয়।

সঠিক আউটপুট ফরম্যাট নির্বাচন করা নির্ভর করে পরবর্তী ব্যবহারের ওপর। JSON এপিআই কনজাম্পশন এবং আন্তঃ-সার্ভিস কমিউনিকেশনের জন্য সবচেয়ে নমনীয়। CSV অ্যানালিস্ট ওয়ার্কফ্লো এবং স্প্রেডশিট-ভিত্তিক পর্যালোচনার জন্য ভালো। MySQL স্টোরেজ তখন অর্থবহ হয় যখন ডেটাকে কোয়েরি, অ্যাট্রিবিউট বা বিদ্যমান রেকর্ডের সাথে যোগ করতে হয়।

আউটপুট ফরম্যাটব্যবহারব্যবসায়িক ভ্যালু
JSONএপিআই রেসপন্স, ফ্রন্টএন্ড ফিডসার্বজনীন ইন্টারঅপারেবিলিটি
CSVঅ্যানালিস্ট রিভিউ, এক্সেল এক্সপোর্টতৈরি করা দ্রুত, অডিট করা সহজ
MySQL / MariaDBকোয়েরিযোগ্য ডেটাসেট, ড্যাশবোর্ডঅ্যাগ্রিগেশন এবং ঐতিহাসিক ট্র্যাকিং সক্ষম করে
SQLiteসিঙ্গেল-সার্ভার লাইটওয়েট স্টোরেজজিরো-কনফিগ, পোর্টেবল

এরর হ্যান্ডল করা এবং স্থায়িত্ব উন্নত করা

একটি নিয়ন্ত্রিত পরীক্ষায় একবার কাজ করে এমন স্ক্র্যাপার এবং প্রোডাকশনে কয়েক মাস ধরে নির্ভরযোগ্যভাবে চলে এমন স্ক্র্যাপারের মধ্যে বড় পার্থক্য রয়েছে। নেটওয়ার্ক অবস্থা পরিবর্তিত হয়, HTML কোনো সতর্কতা ছাড়াই পরিবর্তিত হয় এবং অপ্রত্যাশিতভাবে এনকোডিং-এর জটিলতা দেখা দেয়। শুরু থেকেই এরর হ্যান্ডলিং তৈরি করা - শেষের দিকে চিন্তা না করে - সেসব স্ক্রিপ্টকে আলাদা করে যা অবিরাম তদারকি দাবি করে, বনাম যেগুলো শান্তভাবে চলে এবং পর্যালোচনার জন্য সমস্যাগুলো লগ করে।

PHP প্রযুক্তি ব্যবহার করে ওয়েব স্ক্র্যাপিংয়ের প্রজেক্ট তৈরির সময় প্রথম সিদ্ধান্ত হলো টার্গেট কন্টেন্ট কি সার্ভার-রেন্ডার করা HTML নাকি জাভাস্ক্রিপ্টের মাধ্যমে লোড হওয়া কন্টেন্ট - এই উত্তরটি পুরো টুলচেইন নির্ধারণ করে দেয়।

PHP-তে সাধারণ স্ক্র্যাপিং এররসমূহ

PHP স্ক্র্যাপিং টিউটোরিয়াল কনটেক্সটে বেশিরভাগ ব্যর্থতা ছোট কিছু পুনরাবৃত্তিমূলক ক্যাটাগরিতে পড়ে। কানেকশন টাইমআউট তখন ঘটে যখন টার্গেট সার্ভার ধীরগতির হয় অথবা আইপি রেট-লিমিট করছে। ভঙ্গুর সিলেক্টর (Broken selectors) ঘটে যখন HTML স্ট্রাকচার পরিবর্তিত হয় - এমনকি একটি ক্লাসের নাম পরিবর্তনও ফলাফল খালি দেখানোর জন্য যথেষ্ট। এনকোডিং অমিল হওয়ার ফলে ভুল আউটপুট আসে যখন সার্ভার রেসপন্স হেডারে সঠিকভাবে ঘোষণা না করেই নন-UTF-8 কন্টেন্ট ফেরত দেয়।

  • ❌কানেকশন টাইমআউট - সার্ভার খুব ধীর অথবা আইপি সাময়িকভাবে রেট-লিমিটেড
  • ❌ভঙ্গুর সিলেক্টর - সিলেক্টর লেখার পর থেকে HTML স্ট্রাকচার পরিবর্তিত হয়েছে
  • ❌এনকোডিং অমিল - সঠিক চারসেট ঘোষণা ছাড়া নন-UTF-8 কন্টেন্ট

ডেটা ভ্যালিডেশন এবং কোয়ালিটি কন্ট্রোল

ভ্যালিডেশন মানেই এরর হ্যান্ডলিং নয়। এরর হ্যান্ডলিং টেকনিক্যাল ব্যর্থতা ধরে - যেমন একটি কানেকশন যা পূর্ণ হয় না, এমন একটি এক্সটেনশন যা এক্সেপশন থ্রো করে। ভ্যালিডেশন চেক করে যে সফলভাবে সংগৃহীত ডেটা আদৌ সঠিক কিনা: দাম কি একটি নম্বর? শিরোনাম কি খালি নয়? ইউআরএল কি সুগঠিত?

স্টোরেজ লেয়ারে কোনো ডেটা পৌঁছানোর আগেই এই চেকগুলো সম্পন্ন হওয়া উচিত। ভুল রেকর্ডগুলোকে রিভিইউ কিউ-তে কোয়ারেন্টাইন করা উচিত, চুপচাপ ফেলে দেওয়া নয়। যেসব টিম এই ধাপটি এড়িয়ে যায়, তারা সাধারণত দুর্নীতিগ্রস্ত ডেটাসেট নিয়ে কাজ করে যা পরিষ্কার করা ব্যয়বহুল।

প্রতিযোগিতামূলক প্রাইস ইন্টেলিজেন্সের জন্য PHP দিয়ে ওয়েব স্ক্র্যাপিং করা কোম্পানিগুলো সাধারণত ক্রন জব হিসেবে স্ক্রিপ্ট চালায় এবং ট্রেন্ড বিশ্লেষণের জন্য MySQL-এ টাইমস্ট্যাম্পসহ স্ন্যাপশট জমা রাখে।

প্রোডাকশন স্কেলে PHP-তে ওয়েব স্ক্র্যাপিং করার জন্য রিকোয়েস্ট পেসিং, কানেকশন পুনঃব্যবহার এবং ডেটাবেস রাইট ব্যাচিংয়ের দিকে মনোযোগ প্রয়োজন - যার কোনোটিই ল্যাঙ্গুয়েজ দ্বারা স্বয়ংক্রিয়ভাবে হ্যান্ডেল করা হয় না।

যুক্তরাষ্ট্রে নৈতিক এবং আইনি বিবেচ্য বিষয়সমূহ

যুক্তরাষ্ট্রে ওয়েব স্ক্র্যাপিং PHP-কে ঘিরে আইনি পরিস্থিতি বিশেষ আইনের পরিবর্তে মামলার মাধ্যমে বিবর্তিত হচ্ছে। সবচেয়ে প্রাসঙ্গিক উদাহরণ হলো hiQ বনাম LinkedIn মামলা, যেখানে নাইনথ সার্কিট রুলিং দিয়েছিল যে পাবলিকলি উপলব্ধ ডেটা স্ক্র্যাপ করা সাধারণত Computer Fraud and Abuse Act-এর অধীনে নিষিদ্ধ নয়। তবে, এটি শুধু পাবলিক ডেটার ক্ষেত্রেই প্রযোজ্য এবং প্রতিটি প্রজেক্টকে টার্গেট সাইটের নির্দিষ্ট টার্মস অফ সার্ভিস অনুযায়ী পর্যালোচনা করা উচিত।

  • ✅ওয়েবসাইটের টার্মস অফ সার্ভিসকে সম্মান করুন - প্রতিটি প্রজেক্টের আগে পর্যালোচনা করুন
  • ✅আপনার ইউজার এজেন্টের জন্য robots.txt ডিরেক্টিভ পরীক্ষা করুন এবং সম্মান করুন
  • ✅শুধুমাত্র পাবলিকলি উপলব্ধ ডেটা সংগ্রহ করুন - কখনোই গেটেড বা ব্যক্তিগত কন্টেন্ট এক্সেস করার চেষ্টা করবেন না
  • ✅সার্ভারের ওপর চাপ কমাতে যুক্তিসঙ্গত রিকোয়েস্ট বিলম্ব ব্যবহার করুন
  • ❌আইনি ভিত্তি ছাড়া ব্যক্তিগত শনাক্তযোগ্য তথ্য (PII) সংরক্ষণ বা বিতরণ করা থেকে বিরত থাকুন
  • ❌টেকনিক্যালি এক্সেস সম্ভব হলেও ব্যবহারের শর্ত চুক্তি লঙ্ঘন করা থেকে বিরত থাকুন

"প্রশ্নটি এটা নয় যে আপনি টেকনিক্যালি ডেটা এক্সেস করতে পারেন কিনা - আসল বিষয় হলো আপনি এমনভাবে তা ব্যবহার করছেন কিনা যা আপনার এবং ডেটা সোর্সের মধ্যে হওয়া চুক্তির ভাষা ও চেতনাকে সম্মান করে। দায়িত্বশীল ডেটা কালেকশন মানে টেকসই এক্সেস তৈরি করা, সম্পর্ক নষ্ট করা নয়।"

— সিনিয়র ডেটা ইঞ্জিনিয়ার, মার্কিন এন্টারপ্রাইজ অ্যানালিটিক্স টিম

পারফরম্যান্স অপ্টিমাইজেশান এবং স্কেলেবিলিটি কৌশল

একটি PHP স্ক্র্যাপার যা প্রতিদিন ১০০ ইউআরএল-এ কাজ করে, তা ১০,০০০ ইউআরএল-এ মুখ থুবড়ে পড়তে পারে। পারফরম্যান্স মানে শুধুমাত্র গতি নয় - এটি রিসোর্স ব্যবহার, ডেটাবেস দক্ষতা এবং কোর লজিক নতুন করে না লিখে স্কেল করার ক্ষমতার ওপর নির্ভর করে। নিচের অপ্টিমাইজেশানগুলো বিভিন্ন সাইজের প্রজেক্টে প্রযোজ্য এবং ধীরে ধীরে ইমপ্লিমেন্ট করা যেতে পারে।

রিকোয়েস্ট অপ্টিমাইজেশান এবং লোড কমানো

cURL-এর CURLOPT_FORBID_REUSE অপশন (ডিজেবল) ব্যবহারের মাধ্যমে কানেকশন পুনঃব্যবহার করলে একই ডোমেইন থেকে একাধিক পেজ স্ক্র্যাপ করার সময় TCP হ্যান্ডশেক ওভারহেড কমে যায়। ইউআরএলগুলোকে গ্রুপে ব্যাচ করা এবং একটার পর একটা না চালিয়ে নিয়ন্ত্রিত চক্রে প্রসেস করা রিকোয়েস্ট টাইমিংয়ের ভেরিয়েন্স কমায়। রিকোয়েস্টের মধ্যে একটি কনফিগারেবল বিলম্ব যোগ করা - এমনকি ৫০০ মিলিসেকেন্ড - நீண்டমেয়াদী স্থায়িত্ব দারুণভাবে উন্নত করে এবং আইপি-লেভেল রেট লিমিটের ঝুঁকি কমায়।

ডেটাবেস এবং স্টোরেজ অপ্টিমাইজেশান

বেশিরভাগ PHP স্ক্র্যাপিং প্রজেক্ট MySQL-এ ডেটা জমা রাখে, এবং টেবিল বড় হলে ও কোয়েরি অপটিমাইজ না থাকলে MySQL-এর পারফরম্যান্স দ্রুত কমে যায়। যেসব কলামের বিপরীতে আপনি কোয়েরি করেন - সাধারণত ইউআরএল হ্যাশ, টাইমস্ট্যাম্প এবং ক্যাটাগরি আইডেন্টিফায়ার - সেগুলোতে ইনডেক্স করা আপনার স্ক্র্যাপিং ডেটাবেসে সবচেয়ে কার্যকর বড় পরিবর্তন হতে পারে। লুপের ভেতরে আলাদা আলাদা row ইনসার্ট করার তুলনায় মাল্টি-রো INSERT স্টেটমেন্ট ব্যবহার করে ব্যাচ ইনসার্ট লিখলে রাইট ল্যাটেন্সি অনেক কমে যায়।

স্কিমা ডিজাইনও গুরুত্বপূর্ণ। পার্স করা ডেটার সাথে একই টেবিলে Raw HTML জমিয়ে রাখা জায়গা নষ্ট করে এবং কোয়েরি জটিল করে। একটি টু-টেবিল আর্কিটেকচার - একটি Raw ফেচিংয়ের জন্য, অন্যটি পার্স করা রেকর্ডের জন্য - পরিষ্কার, কোয়েরিযোগ্য এবং এক্সট্রাকশন লজিক পরিবর্তন হলে মেইনটেইন করা সহজ।

সিঙ্গেল-থ্রেডেড পদ্ধতি

  • ইমপ্লিমেন্ট এবং ডিবাগ করা সহজ
  • প্রতিদিন ~৫,০০০ ইউআরএল পর্যন্ত কাজ করে
  • একটি ব্যর্থতা পুরো কিউ ব্লক করতে পারে
  • বেশিরভাগ ছোট/মাঝারি প্রজেক্টের জন্য উপযুক্ত

ডিস্ট্রিবিউটেড পদ্ধতি

  • উচ্চ জটিলতা এবং ইনফ্রাস্ট্রাকচারের খরচ
  • প্রতিদিন লক্ষ লক্ষ ইউআরএল স্কেল করা যায়
  • আইসোলেটেড ব্যর্থতা অন্য কর্মীদের প্রভাবিত করে না
  • একটি জব কিউ (Redis, RabbitMQ) প্রয়োজন

স্থিতিশীল ডেটা সংগ্রহের জন্য প্রক্সি ইনফ্রাস্ট্রাকচার ব্যবহার

প্রক্সিসমূহ শুধুমাত্র সীমাবদ্ধতা এড়ানোর টুল নয় - কর্পোরেট প্রেক্ষাপটে, এগুলো বেশ কয়েকটি বৈধ ইনফ্রাস্ট্রাকচারের কাজ করে। প্রক্সি পুলের মাধ্যমে আউটবাউন্ড স্ক্র্যাপিং ট্র্যাফিক রুট করা আপনার প্রাইমারি সার্ভারের আইপি রেপুটেশনকে আপনার ডেটা কালেকশন স্ক্রিপ্টের অ্যাক্টিভিটি থেকে আলাদা রাখে। এর মানে হলো একটি আইপি-তে রেট-লিমিট বা অস্থায়ী ব্লক আপনার প্রোডাকশন সার্ভিস বা অন্য কোনো আউটবাউন্ড ট্র্যাফিকের ওপর প্রভাব ফেলে না।

ব্যবসাগুলো কেন PHP ওয়ার্কফ্লোতে প্রক্সি ইন্টিগ্রেট করে

প্রক্সি পুল জুড়ে লোড ব্যালেন্সিং আউটবাউন্ড রিকোয়েস্ট ছড়িয়ে দেয় যাতে কোনো একটি আইপি কোনো সার্ভারে অস্বাভাবিক বেশি রিকোয়েস্ট না করে। এটি স্বয়ংক্রিয় রেট-লিমিটিং সিস্টেমকে ট্রিগার করার সম্ভাবনা কমায়, যা একটি উৎস থেকে ধারাবাহিক উচ্চ-ফ্রিকোয়েন্সি ট্র্যাফিক খোঁজে, ডিস্ট্রিবিউটেড এবং মানুষের মতো প্যাটার্ন নয়।

PHP-তে প্রক্সি কনফিগারেশনের জন্য বেস্ট প্র্যাকটিস

PHP-তে, প্রক্সি কনফিগারেশন সম্পূর্ণরূপে cURL অপশনগুলোর মাধ্যমে ঘটে। CURLOPT_PROXY প্রক্সি সার্ভার ঠিকানা সেট করে এবং CURLOPT_PROXYUSERPWD অথেনটিকেশন হ্যান্ডেল করে। প্রোডাকশন রানে প্রক্সি এন্ডপয়েন্ট কমিট করার আগে স্বাস্থ্য পরীক্ষা (health checks) - ছোট ছোট টেস্ট রিকোয়েস্ট - ইমপ্লিমেন্ট করলে কানেকশনের স্থায়িত্ব বাড়ে এবং দীর্ঘ সেশনের পরিবর্তে পুল থেকে এন্ডপয়েন্ট রোটেশন করা ভালো।

নির্দিষ্ট এন্ডপয়েন্টগুলো অনির্ভরযোগ্য হয়ে গেলে কোন প্রক্সি কোন রিকোয়েস্ট হ্যান্ডেল করেছে তা লগ করা ডিবাগিং সহজ করে দেয়। একটি হালকা প্রক্সি ম্যানেজার ক্লাস যা প্রতি এন্ডপয়েন্টের সাফল্যের হার ট্র্যাক করে এবং পারফরম্যান্স কম হলে তা ডি-প্রায়োরিটি করে, সেটি প্রতিদিন কয়েক হাজার রিকোয়েস্ট চালানো যেকোনো প্রজেক্টের জন্য একটি যুক্তিসঙ্গত বিনিয়োগ।

💡 ইনফ্রাস্ট্রাকচার সিলেকশন সুপারিশ

  • যদি আপনার ডেটা টার্গেট ইউএস-ভিত্তিক সার্ভিস হয়, তবে যাচাইযোগ্য ইউএস আইপি কাভারেজ আছে এমন প্রোভাইডার নির্বাচন করুন।
  • আইপি-ভিত্তিক বা ইউজারনেম/পাসওয়ার্ড অথেনটিকেশন প্রদানকারী প্রোভাইডার পছন্দ করুন - উভয়ই PHP cURL-এর সাথে স্বচ্ছভাবে কাজ করে।
  • প্রোভাইডারের সাথে যুক্ত হওয়ার আগে এন্ডপয়েন্ট ল্যাটেন্সি টেস্ট করুন; উচ্চ ল্যাটেন্সির প্রক্সি বড় ক্রলকে অনেক ধীর করে ফেলে।
  • আপনার ব্যবহারের ক্ষেত্রটি কভার হচ্ছে কিনা তা নিশ্চিত করতে সবসময় প্রোভাইডারের গ্রহণযোগ্য ব্যবহার নীতি (AUP) পর্যালোচনা করুন।

স্কেলেবল PHP স্ক্র্যাপিং প্রজেক্টের জন্য Nsocks প্রক্সি

PHP ডেভেলপার এবং ডেটা ইঞ্জিনিয়ারিং টিমের জন্য যারা প্রোডাকশন-গ্রেড কালেকশন পাইপলাইন তৈরি করছেন, Nsocks এমন ইনফ্রাস্ট্রাকচার প্রদান করে যা বাস্তব প্রজেক্টের প্রয়োজনীয় স্থায়িত্ব এবং নমনীয়তাকে কেন্দ্র করে ডিজাইন করা। প্ল্যাটফর্মটি উচ্চ আপটাইম আর্কিটেকচারসহ ইউএস-ভিত্তিক আইপি পুল অফার করে, যা এমন স্ক্র্যাপিং পাইপলাইনের জন্য উপযুক্ত যাদের ঘন ঘন এন্ডপয়েন্ট ব্যর্থতা ছাড়াই ধারাবাহিক আঞ্চলিক কাভারেজ প্রয়োজন।

  • ✅ব্যাপক ভৌগোলিক বিস্তৃতিসহ নির্ভরযোগ্য ইউএস-ভিত্তিক আইপি পুল
  • ✅নির্ধারিত প্রোডাকশন পাইপলাইনের জন্য উপযুক্ত উচ্চ আপটাইম আর্কিটেকচার
  • ✅নমনীয় অথেনটিকেশন অপশন - আইপি হোয়াইটলিস্ট বা ক্রেডেনশিয়াল-ভিত্তিক
  • ✅স্ট্যান্ডার্ড PHP cURL কনফিগারেশনের সাথে সামঞ্জস্যপূর্ণ - কোনো কাস্টম লাইব্রেরির প্রয়োজন নেই
  • ❌পলিসি লঙ্ঘন বা এক্সেস কন্ট্রোল এড়িয়ে চলার জন্য উদ্দেশ্যপ্রণোদিত নয়

সাধারণত জিজ্ঞাসিত প্রশ্নাবলি (FAQ)

নিচের প্রশ্নগুলো সেই সাধারণ বিভ্রান্তিগুলোকে সম্বোধন করে যা ডেভেলপাররা একটি PHP স্ক্র্যাপিং প্রজেক্ট শুরু বা স্কেল করার সময় সম্মুখীন হন।

PHP কি বৃহৎ আকারের ওয়েব স্ক্র্যাপিং প্রজেক্টের জন্য উপযুক্ত?

PHP একক সার্ভারে প্রতিদিন হাজার হাজার রিকোয়েস্টের প্রজেক্টের জন্য ভালো কাজ করে। বড় ডিস্ট্রিবিউটেড ক্রলের জন্য, পাইথন বা Node.js-এর তুলনায় এটি কম ব্যবহারিক - মূলত সীমিত নেটিভ অ্যাসিঙ্ক সাপোর্টের কারণে।

PHP-তে HTML পার্স করার জন্য কোন লাইব্রেরিগুলো সেরা?

DOMXPath-এর সাথে যুক্ত নেটিভ DOMDocument সবচেয়ে শক্তিশালী পছন্দ - এটি ভুল HTML ভালোভাবে সামলায় এবং কোনো বাহ্যিক ডিপেন্ডেন্সির প্রয়োজন হয় না। Simple HTML DOM যারা CSS-স্টাইল সিলেক্টর পছন্দ করেন তাদের জন্য একটি জনপ্রিয় বিকল্প। খুব জটিল পেজের জন্য, উভয়কে Symfony-এর DomCrawler কম্পোনেন্টের সাথে ব্যবহার করা যেতে পারে।

আমি কীভাবে আমার PHP স্ক্র্যাপারের স্থায়িত্ব উন্নত করতে পারি?

ফেচ এবং পার্স লেয়ার আলাদা করুন যাতে নেটওয়ার্ক ব্যর্থতা পার্সিং জব বাতিল না করে। ব্যর্থ রিকোয়েস্টের জন্য এক্সপোনেনশিয়াল ব্যাকঅফসহ রিট্রাই লজিক ইমপ্লিমেন্ট করুন। ডেভেলপমেন্টের সময় Raw HTML রেসপন্স লগ করুন এবং স্টোরেজে লেখার আগে নির্ধারিত স্কিমার বিপরীতে এক্সট্রাক্ট করা ডেটা ভ্যালিডেট করুন।

PHP-তে ওয়েব স্ক্র্যাপিং করার জন্য কি প্রক্সির প্রয়োজন?

কম-ভলিউম বা ছোট প্রজেক্টের ব্যবহারের জন্য, প্রক্সি ঐচ্ছিক। যখন আপনি উচ্চ-ফ্রিকোয়েন্সি রিকোয়েস্ট চালাচ্ছেন, ইউএস-নির্দিষ্ট কন্টেন্টের জন্য ভৌগোলিক নির্ভুলতা প্রয়োজন, অথবা আপনার প্রাথমিক সার্ভারের আইপি ডেটা সংগ্রহের কাজ থেকে আলাদা রাখতে চান, তখন প্রক্সি প্রয়োজনীয় হয়ে ওঠে।

ওয়েব স্ক্র্যাপিং কি যুক্তরাষ্ট্রে বৈধ?

বর্তমান মার্কিন মামলার আইন অনুযায়ী, বিশেষ করে hiQ বনাম LinkedIn রুলিংয়ের পর, পাবলিকলি উপলব্ধ ডেটা স্ক্র্যাপ করা সাধারণত বৈধ। তবে, বৈধতা নির্ভর করে কী ডেটা সংগ্রহ করা হচ্ছে, কীভাবে তা ব্যবহার করা হচ্ছে এবং টার্গেট সাইটের টার্মস অফ সার্ভিসকে সম্মান করা হচ্ছে কিনা তার ওপর।

2026-04-22