ভূমিকা

ডাটা সাইন্স, ডাটা অ্যানালাইসিস, মেশিন লার্নিং, ডিপ লার্নিং সহ প্রায় সব ধরনের ডাটা সংক্রান্ত পরিক্ষা-নিরিক্ষার জন্যই ডাটা দরকার পরে। প্রয়োজনীয় ডাটার পরিমানটাও নেহায়েত কম নয়।

এত ডাটার জন্য অনেক ডাটা রিপোজিটরি আছে, যেমনঃ kaggle, Google Public Data Explorer, World Bank Open Data ইত্যাদি। এদের সবার ডাটা-ই সবার জন্য উন্মুক্ত৷ কিন্তু তারপরেও সবসময় সব ডাটা পাওয়া সম্ভব হয় না। বা একদম নতুন ডাটা পাওয়া সম্ভব হয় না। তখন নিজেকেই ডাটা তৈরি করে নিতে হয়।

আমাদের ডাটা পাওয়ার অন্যতম মাধ্যম হচ্ছে বিভিন্ন ওয়েব সাইট৷ এইসব ওয়েব সাইট থেকে কেউ চাইলে ম্যানুয়ালি ডাটা নিতে পারে আবার কিছু সহজ টুলস ব্যবহার করে অটোমেটিক ভাবেও ডাটা বের করে নেয়া সম্ভব। এই অটোমেটিক পদ্ধতিকেই বলা হয় ওয়েব স্ক্র‍্যাপিং।  

কেন করব?

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

প্রয়োজনীয় টুলস

আমরা পাইথন ৩.৬ এবং এর একটি লাইব্রেরি BeautifulSoup 4.0 ব্যবহার করব। পাইথন ইন্সটল করা না থাকলে Python.org  থেকে পাইথন ইন্সটল করে নিতে হবে। এর পরে BeautifulSoup ইন্সটল করার জন্য টার্মিনাল (লিনাক্স) বা cmd (উইন্ডোজ) এ নিমোক্ত কমান্ড দিব ।
pip install beautifulsoup4

উদ্দেশ্য

আমাদের এই প্রজেক্ট এর উদ্দেশ্য হবে আমরা দৈনিক প্রথম-আলো পত্রিকার অনলাইন আর্কাইভ থেকে নির্দিষ্ট তারিখের সব খবরের হেডলাইন সংগ্রহ করব।

অ্যানালাইসিস

প্রথমে আমাদের দেখতে হবে আমাদের টার্গেট পেজটিতে ডাটা কিভাবে আছে । তার জন্য আমরা এই পেজ টিতে যাব https://www.prothomalo.com/archive/2019-05-25 . এখন আমরা যদি এই পেজটির HTML দেখি (ctrl + U) এবং যেকোনো একটি হেডলাইন এর কোড দেখি সেটা এরকম হবে -

দেখা যাচ্ছে আমাদের প্রয়োজনীয় HTML element টি হচ্ছে <spanclass="title">সেই সিঙ্গুরের মানুষ এখন শিল্প চান</span> যাকে এর ক্লাস (title) দিয়ে unique ভাবে ফিল্টার করা সম্ভব ।

আমাদের ছোট এই সিস্টেম টি কাজ করবে ২ টি ভাগে। একটি অংশ যেকোন একটি পেজ থেকে সবগুলো হেডলাইন বের করে নিয়ে আসবে। আরেকটি অংশ কাজ আগের অংশটিকে প্রয়োজনীয় পেজ এর যোগান দিবে।

আমরা Python 3 এর request লাইব্রেরি ব্যবহার করে প্রথমেই url এর সম্পূর্ণ html file টি নিয়ে আসি। এর পরে BeautifulSoup এর সাহায্যে ফাইলটিকে parse করি। BeautifulSoup এর parsed object এ খুব সহজেই যেকোনো html element খোঁজা সম্ভব। soup.find_all() ফাংশনটি সম্পূর্ণ পেজের যেকোনো element খুঁজে বের করে python array হিসেবে return করে। অ্যারেটির প্রত্যেকটি element একেকটি soup object. ফাংশনে আমরা  element খুঁজছি এবং ফিল্টার হিসেবে এর attribute, class এর নাম "title" দিয়ে দিচ্ছি। এখন title array টি প্রিন্ট করলে আমরা সব গুলো হেডলাইন পেয়ে যাব।

দ্বিতীয় অংশের জন্য আমরা যে ফাংশনটি ব্যবহার করব তাকে সচরাচর crawler বলা হয়ে থাকে। Web indexing, search engine এ এধরণের ফাংশন ব্যবহার করা হয় যদিও তা অনেক বেশি জটিল।

এ ফাংশনটি বুঝার আগে আমাদের বুঝতে হবে প্রথম-আলোর আর্কাইভটি কিভাবে সাজানো আছে । আমরা দেখতে পারি আর্কাইভটি তারিখ অনুযায়ী সাজানো এবং url গুলোও সব তারিখ দিয়ে তৈরি হচ্ছে এবং তারিখের ১ এর বেশি পেজ থাকলে সেগুলো তার পরে add হচ্ছে। অর্থাৎ একেকটি পেজ এর url ফরমেট https://www.prothomalo.com/archive/$date?page=$page_number। এই ফাংশনটি আমাদের এই ফরমেটে url তৈরি করে দিবে যা আমরা scrap ফাংশন এ ব্যবহার করতে পারব।

সম্পূর্ন কোডঃ https://github.com/mehedi-shafi/prothom-alo-scrapper

সতর্কিকরণ

এই ব্লগ এবং ব্লগ সম্পর্কিত সকল কোড এবং তার implementation সম্পূর্নরূপে শেখার উদ্দেশ্যে মাত্র। কোনোরকম বাণিজ্যিক প্রয়োগের জন্য নয়।