আসসালামু আলাইকুম।আশা করি আল্লাহর রহমতে সাবাই ভালোই আছেন।আজকে আমি আপনাদের দেখাবো কিভাবে php দিয়ে simple ওয়েব স্পাইডার তৈরী করতে পারবেন।
তার আগে জানিয়ে রাখছি- এটা একটা সৌখিন(amateur) স্পাইডার মাত্র। পেশাদার স্পাইডার নয়। এ পদ্ধতির অপব্যবহার করবেন না কেউ। আর সতর্ক থাকবেন যেনো ভুল কোডিং এর কারণে আপনি কোন সার্ভারের ব্ল্যাকলিস্টে পড়ে না যান।
প্রথমেই জেনে নিন ওয়েব স্পাইডার/crawler এর কাজটা কি ?
স্পাইডার/Crawler হলো এমন একটা প্রোগ্রাম যা স্বয়ংক্রিয়ভাবে একটি ওয়েব পেজের বিভিন্ন তথ্য সংগ্রহ করতে সক্ষম যেমন –পেজের টাইটেল, শিরোনাম, পেজের লিংক গুলো, পেজের বিভিন্ন তথ্য। বিভিন্ন সার্চ ইঞ্জিন গুলো এ ধরনের রোবট ব্যবহার করে পেজ ইন্ডেক্স করে এবং সার্চ এর ফলাফলে তা প্রদর্শন করে থাকে। গুগলের crawler googlebot, ইয়াহুর crawler slurp নামে পরিচিত। অধিকাংশ রোবট পার্ল/জাভা প্রোগামিং ল্যাংগুয়েজে লেখা এবং সেগুলোতে রোবট নিয়ন্ত্রন করার জন্য বিভিন্ন সুবিধা আছে। PHP তে প্রধান অসুবিধা হচ্ছে এর কাজ শেষ/max_execution_time অতিক্রান্ত হবার আগে এটা বন্ধ করার উপায় সহজ নয়। আপনাকে হয় সার্ভার restart করতে হবে অথবা cmd ব্যবহার করতে হবে।
PHP Crawler তৈরির জন্য আপনার যা যা লাগেব-
ওয়েব সার্ভার হিসাবে যদি আপনি লোকাল সার্ভার বেছে নেন
তাহলে সবচেয়ে ভালো হয় কারণ এতে আপনি দ্রুত কাজটি করতে পারবেন এবং ঝামেলাও কম হবে। নিজের পিসিতে লোকাল সার্ভার ইন্সটল করার জন্য wampserver বেছে নিতে পারেন।পিসিতে wampserver install করা না থাকলে নিচের লিঙ্ক থেকে ডাউনলোড করতে পারবেন
http://www.wampserver.com/en/download.php
এরপর যথানিয়মে ইন্সটল করুন এবং wampserver রান করুন। এতে আপনার পিসির টাস্কবারে wampserver এর আইকন দেখতে পাবেন সেখানে left মাউস বাটন ক্লিক করুন। একটি মেনু আসবে। সেখান থেকে ‘www directory’ তে ক্লিক করুন।একটা নতুন ফোল্ডার খুলবে। এই ফোল্ডারে আপনি যে সকল ফাইল রাখবেন সেগুলো আপনি http://localhost/FileName এর মাধ্যমে প্রবেশ করতে পারবেন।
পেজের সোর্স কোড পড়ার জন্য আমরা যে ফাংশন গুলো ব্যবহার করবো সেগুলোর জন্য অবশ্যই PHP_CURL enable করা থাকতে হবে। wampserver এটা করার নিয়ম হচ্ছে -টাস্কবারে wampserver এর আইকনে left মাউস বাটন ক্লিক করুন। একটি মেনু আসবে। এবার PHP -> PHP extensions -> php_curl এ টিক চিহ্ন দিয়ে দিন।
এটা গেলো সার্ভার এর কথা এবার আসা যাক পিএইচপি এদিকে। আপনি চাইলে কোড গুলো কপি করে কাজ করতে পারবেন। কিন্তু নিজের পছন্দ মতো আরো কিছু ফিচার যোগ করতে চাইলে আপনার পিএইচপি জানা প্রয়োজন।বিশেষ করে লুপিং এর মাধ্যমে পেজের লিংক গুলো ইন্ডেক্স করার সময় অবশ্যই সতর্ক থাকবেন যেনো অসীম লুপ না হয়ে যায় বা লুপের নিষ্ক্রিয় থাকার (sleep time/recess time) সময়টা যথেষ্ট হয় এবং আপনার কোডের কারণে কোন সাইট ওভারলোডেড না হয়ে যায়।
কোড এডিটর হিসাবে আপনি যেটা খুশি ব্যবহার করতে পারেন ।তবে dreamweaver অথবা notepad++ ব্যবহার করলে ভালো সুবিধা পাবেন।
এবার আসা যাক কোডিং এর দিকে।
শুরুতেই আপনাকে একটি ফর্ম তৈরী করতে হবে যেখানে আপনি সাইটের লিংক ইনপুট দিবেন।
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Simple Web Spider</title> </head> <body style="font-family:Tahoma"> <center> <h1>Simple Web Spider</h1> <form action="" method="post"> <label for="url">Enter Url To Fetch Data</label><br/> <input type="text" name="url" id="url" style="border:2px solid orange; width:800px; height:20px" <?php if(isset($_POST['url']))echo 'value="'.htmlentities($_POST['url']).'"'; ?>/> <input type="submit" value="Submit"/> </form> </center> </body> </html>
এতে আপনি পাবেন নিচের ছবির মতো একটা ইন্টারফেস-
এবার আসা যাক মূল কোডিং এর দিকে। আপনি যখন উপরের ফর্মে url বসিয়ে সাবমিট করবেন তখন উক্ত ফর্মের ডাটাগুলো পেজটা নিজেই প্রসেস করবে। আমরা action=”” এর মাধ্যমে সেই কমান্ডটাই দিয়ে রেখেছি।
আমরা url input বক্সটার নাম দিয়েছি url সুতরাং আমরা যদি url এর বক্সে কিছু লিখে সাবমিট করি তাহলে php তে সেটার value access করবো $_POST[‘url’] এর মাধ্যমে কারণ আমরা ফর্মের সাবমিট মেথড হিসাবে POST নির্ধারন করে দিয়েছি।এবার এই $_POST[‘url’] থেকে সাইটের ঠিকানা পাবো এবং আমরা ওই সাইটের সোর্স কোড বের করে সেখান থেকে তথ্য নিবো।
<?php if(array_key_exists("url",$_POST)){//if post data available $url=trim($_POST['url']); $var=curl_init($url); curl_setopt($var,CURLOPT_HEADER,0); curl_setopt($var,CURLOPT_RETURNTRANSFER,1); curl_setopt($var,CURLOPT_FOLLOWLOCATION,1); curl_setopt($var,CURLOPT_BINARYTRANSFER,0); $new_var=curl_exec($var); } ?>
এখানে php curl library ব্যবহার করে আমরা সোর্স কোড বের করেছি যা $new_var এর মাধ্যমে access করা যাবে।এখানে আমি কেবল মাত্র পেজের টাইটেল কিভাবে বের করবেন তা দেখাবো।
টাইটেল বের করার জন্য আমরা রেগুলার এক্সপ্রেশন ব্যবহার করবো এবং সোর্স কোডের কোথায় মিল খুজে পাওয়া যায় তা দেখবো ।পেজের টাইটেল সাধারনত <title>SomeTitle</title> ট্যাগের মধ্যে থাকে।তাই টাইটেল খোজার জন্য আমাদের regular expression pattern টা হবে-
$search_pattern_title="<title>(.*)<\/title>";
তাহলে কোডটি হবে-
<?php echo "<h2>Page Title</h2>"; if(preg_match("/$search_pattern_title/siU", $new_var, $match)){ $title=$match[1]; echo $title; } else echo "No title found"; ?>
একই ভাবে পেজের সকল লিংক বের করার জন্য আমি নিচের pattern ব্যবহার করতে পারি –
$search_pattern_link="((http:\/\/).*([^a-zA-Z0-9\.\?\/\=_-]))|(https:\/\/).*([^a-zA-Z0-9\.\&\?\/\=_-])";
তাহলে সম্পুর্ণ কোডটি দেখে নিন-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Simple Web Spider</title> </head> <body style="font-family:Tahoma, Geneva, sans-serif"> <center> <h1>Simple Web Spider</h1> <form action="" method="post"> <label for="url">Enter Url To Fetch Data</label><br/> <input type="text" name="url" id="url" style="border:2px solid orange; width:800px; height:20px" <?php if(isset($_POST['url']))echo 'value="'.htmlentities($_POST['url']).'"'; ?>/> <input type="submit" value="Submit"/> </form> <?php if(array_key_exists("url",$_POST)){//if post data available $url=$_POST['url']; $var=curl_init($url); curl_setopt($var,CURLOPT_HEADER,0); curl_setopt($var,CURLOPT_RETURNTRANSFER,1); curl_setopt($var,CURLOPT_FOLLOWLOCATION,1); curl_setopt($var,CURLOPT_BINARYTRANSFER,0); $new_var=curl_exec($var); $search_pattern_title="<title>(.*)<\/title>"; echo "<h2>Page Title</h2>"; if(preg_match("/$search_pattern_title/siU", $new_var, $match)){ $title=$match[1]; echo $title; } else echo "No title found"; echo "<h2>Links In The Page</h2>"; $search_pattern_link="((http:\/\/).*([^a-zA-Z0-9\.\?\/\=_-]))|(https:\/\/).*([^a-zA-Z0-9\.\&\?\/\=_-])"; $total_links=0; if(preg_match_all("/$search_pattern_link/siU", $new_var, $matches)) { $tmp=$matches[0]; foreach($tmp as $link){ $link=trim(substr($link,0,strlen($link)-1)); echo $link."<br/>"; $total_links++; } echo "<h2>Total Links :".$total_links."</h2>"; } else echo "No link found"; } ?> <br/><br/> </center> </body> </html>
Curl এর মাধ্যমে সুবিধামতো proxy, user agent ব্যবহার করেও কাজ করা যায়। যেমন-proxy , user agent এর জন্য নিচের option গুলো যোগ করতে হবে-
$proxy=”proxy_server_ip:port”;
$agent=”your_user_agent”;
curl_setopt($ch, CURLOPT_PROXY,$proxy);
curl_setopt($ch, CURLOPT_USERAGENT,$agent);
পুরো সাইট থেকে তথ্য সংগ্রহ করতে চাইলে প্রত্যেক পেজ থেকে প্রাপ্ত লিঙ্ক গুলো একটা ফাইলে সেভ করে রাখবেন এবং তাদের প্রত্যেকের একটা করে সিরিয়াল নম্বর দিবেন। আরেকটি ফাইলে আপনি কোন সিরিয়াল নম্বরধারী লিঙ্কটি থেকে তথ্য নিয়েছেন এবং পরবর্তীতে কোন সিরিয়াল থেকে শুরু করবেন তা লিখে রাখতে পারেন যাতে পরবর্তীতে আপনি ওই সাইটের তথ্য সংগ্রহ চালিয়ে (resume) যেতে পারেন।
সংগ্রহ করা তথ্য আপনি ডাটাবেসে সংরক্ষন করতে পারেন এবং সংরক্ষিত তথ্য ব্যবহার করে তথ্য খোঁজার সুবিধাও (searching facility) চালু করতে পারেন ।
এভাবে আপনি নিজের সুবিধামতো করে কোডগুলো সাজিয়ে নিতে পারেন।
আমি ashik734। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর 8 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 10 টি টিউন ও 70 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
chorom jinish to.try kore dekhte hobe ekhoni