Monday, February 20, 2017

জাভা দিয়ে ওয়েব ক্রলার (Java Web Crawler Implementation)

ওয়েব ক্রলার মূলত একটি প্রোগ্রাম যা বিভিন্ন ওয়েব সাইট ব্রাউজ করে বিভিন্ন তথ্য বের করে। একে অনেক সময় স্পাইডার বা ইন্টারনেট বট ও বলা হয়। একটি ওয়েব ক্রলার তৈরি করা একটি ফান প্রজেক্ট হতে পারে।

জাভা দিয়ে এটি তৈরি করার সময় বেশ কতগুলো বিষয় অর্থাৎ ডিজাইন নিয়ে চিন্তা করা যায়। যেমন -
১. এটি সিঙ্গেল থ্রেডেড (Single threaded,) ও সিনক্রোনাস (synchronous) হতে পারে।
২. মাল্টি থ্রেডেড (multi threaded ) ও কনকারেন্ট (concurrent) হতে পারে।
৩. জাভা ইনপুট/আউটপুটের(I/O) জন্যে স্ট্রিম বেইজড বা নিউআইও(NIO) এর বাফার ও চ্যানেল বেইজড হতে পারে।

শুধুমাত্র ফান প্রজেক্ট হিসেবে করতে চাইলে প্রত্যেকটি কম্বিনেশনের জন্যে আলাদা আলাদা করে তৈরি করা যেতে পারে।

সিঙ্গেল থ্রেডেড ও সিনক্রোনাস ক্রলারের তৈরি করা সহজ। এটি তৈরি করতে হলে নিচের কাজগুলো করতে হবে -
১. প্রথমে একটি ওয়েব অ্যাড্রেস থেকে HTML পেইজ ডাউনলোড করতে হবে।
২. HTML পেইজকে পার্স(parse) করতে হবে।
৩. পার্স করারপর প্রয়োজনীয় তথ্যগুলো আলাদা করতে হবে।
৪. পেইজে আরও কোনো লিংক থাকলে সেগুলো আলাদা করতে হবে।
৫. সেই লিংক থেকে আবার ১ নং এর মতো পুরো প্রক্রিয়াটি শুরু করতে হবে।

এই রকম একটি উদাহরণ পাওয়া যাবে এই লিংকে : https://goo.gl/0EiQnC

তবে এর চেয়ে ভাল উপায় হতে পারে যদি মাল্টি থ্রেডেড ক্রলার তৈরি করতে পারি, যাতে অনেকগুলো থ্রেড একই সাথে পাশাপাশি কাজ করবে।

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

এটি রান করতে হলে আপনার মেশিনে যে যে টুলগুলো থাকবে হবে সেগুলো হলো -
১. গিট (Git)
২. গ্রাডল (Gradle)
৩. জাভা ৮

এটি একটি সংক্ষিপ্ত প্রজেক্ট যাতে ৪ টি ক্লাস রয়েছে এবং দুটি ইন্টারফেস রয়েছে।

মূল অংশ শুরু হবে নিচের ক্লাস থেকে -


এতে প্রথমে একটি বেইজ ইউআরএল দিতে হবে যে ওয়েব সাইট থেকে ক্রল শুরু করবে।

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

সোর্সকোডটি পড়ে বোঝার চেষ্টা করুন। কোনো ফিডব্যাক বা উন্নতি করার উপায় থাকলে ক্লোন করে পুল রিকোয়েস্ট পাঠাতে পারেন।