হাতে-কলমে পাইথন: পর্ব ৩ (খবর এক এক করে বের করা)

আগের পর্ব-২ এ আমরা দেখেছি কিভাবে পাইথনে বিভিন্ন অবজেক্ট নিয়ে গুতাগুতি করতে হয়; এবং এই জ্ঞান থেকে আমরা ওয়েবপেজের HTML মার্কআপ বের করে ফেলেছি। এবার সেটি parse করে হেডলাইন বের করে আনার পালা!

স্যুপ মানেই সৌন্দর্য্য

এক কাজ করি, iPython এ ডেইলি স্টারের পেজটা আবারও লোড করি।

import requests
daily_star = requests.get('http://www.thedailystar.net')

এবার আরেকটা মডিউল import করতে হবে, BeautifulSoup। (পাইথন প্রোগ্রামারদের আসলে সেন্স অফ হিউমার অসাধারণ, HTML পার্স করার মডিউলের নাম বিউটিফুল সুপ!)

from bs4 import BeautifulSoup

এবার আমাদের ডেইলি স্টারের পেজের HTML মার্কআপ কোডকে parseকরি; একটু হালকা মনে করে দেখি তো আগের পর্বে কিভাবে HTMLদেখেছিলাম? হ্যাঁ, daily_star.text

parsed_html = BeautifulSoup(daily_star.text, 'lxml')

lxml কেন লিখলাম মাথায় ঘুরছে তো? আপাতত এই পর্বের জন্য প্লিইইজ প্রশ্নটা চেপে যাই? 😀 যাই হউক, এবার parsed_html এর ভ্যালু দেখার চেষ্টা করুন তো, আমরা যেভাবে আগে daily_star এর ভ্যালু দেখেছিলাম ঠিক সেইভাবে। আগের মতই দেখবেন স্ক্রীণে এক বালতি লেখা উঠে আসবে :/ এবার আসুন আমাদের parsed_html নিয়ে একটু কাজ করি; কয়েকটি হেডলাইন বের করি তো।

headlines  = parsed_html.find_all('h5')

h5 দিয়ে HTML এর ভাষায় বুঝায় হেডিং। h1 থেকে h6 পর্যন্ত হেডিং আছে। কিন্তু আমরা এই সিরিজে এইচটিএমএল শিখছি না; তাই বিস্তারিত আলোচনা করলাম না এ ব্যাপারে। মনযোগটা পাইথনে দেই।

এবার headlines এর ভ্যালু দেখুন তো, ঠিক আগের মত করেই। ভালো করে দেখুন তো, কি আছে? 😀

হেডলাইনের অনেক কাছাকাছি চলে গিয়েছি আমরা। এখন একটু সেলিব্রেট করা যেতেই পারে; মাগরিবের পরে যদি এই ব্লগ পোস্টটি পড়তে থাকেন, তবে এক গ্লাস পানি খেয়ে নিন! আমরা এখন কি করলাম? parsed_html তথা Daily Star থেকে সকল h5 ট্যাগওয়ালা হেডিং খুঁজে বের করে (find_all) এনে headlines ভ্যারিয়েবলে রেখেছি। পাইথন তো মানুষের ভাষার মতই ^_^

এখন একটা কাজ করুন তো,

headlines[0]

কোনকিছুর কথা মনে পড়ছে? হারিয়ে যাওয়া ভালোবাসা array এর কথা? 😉 পাইথনে array বলে কিছু নেই, array এর কাছাকাছি যা আছে তা হলো list। headlines একটি লিস্ট বলে স্কয়ার ব্র্যাকেটের মধ্যে index নাম্বার লিখে একেকটা হেডলাইন বের করা যাচ্ছে। এবার ছোট কয়েকটা সংখ্যা নিজে বসিয়ে ট্রাই করুন তো! (1-20)

অস্থির তো! জোস কাজ করে ফেলেছি, এখন ট্যাগের ভেতরের থেকে লেখাটা বের করে আনতে পারলেই হত 🙁 সেটা কি কোনভাবে করা সম্ভব বলে আপনার মনে হয়? ওইযে পুরনো dir() ফাংশন বন্ধুটার কথা মনে আছে? ও কিন্তু বলে দিত প্রতিটা অবজেক্টে কি কি তথ্য আছে, বা তা দিয়ে কি কি কাজ করে নেওয়া যায়। dir(headlines[0]) চালিয়ে দেখব নাকি কোনভাবে লেখা বের করে আনার কোন কায়দা বের করা যায় কিনা?

কায়দা মনে হয় আছে। text বলে একটা জিনিস দৃশ্যমান। টেস্ট করে দেখা যেতেই পারে।

headlines[0].text

কাজ হয়েছে কি? একটু চালিয়ে দেখুন না!

ইয়েএএএএএ! কাজ হয়েছে! হেডলাইন একটা একটা করে দেখা যাচ্ছে!!!!!!!! আমরা পেরে গেছি। কিন্তু, u"..." এইভাবে উদ্ভটভাবে লেখা আসছে কেন? :/ আমরা সুন্দরভাবে দেখতে চাই। আসলেই এইটা দিয়ে পাইথন বুঝাচ্ছে যে এটি একটি unicode স্ট্রিং, অর্থাৎ এখানে যেকোন ভাষার লেখা রাখা নিয়ে কাজ করা যাবে। এটাকে আরেকটু সুন্দর করে দেখতে হলে আমরা print() ফাংশনটি ব্যবহার করতে পারি।

print(headlines[0].text)

হয়ে গেছে! হয়ে গেছে! এতক্ষণে আপনি নিশ্চয়ই ভাবছেন একটা একটা না করে সবগুলো নিউজ হেডলাইন একসাথে প্রিন্ট করা যায় না? লুপ ব্যবহার করে? হুম অবশ্যই করা যায়। সেইটা আমরা আগামী পর্বে দেখব। আজ এই পর্যন্তই থাক, আজ যা শিখলাম তা নিয়ে একটু গুতোগুতি করুন। শুভ কামনা রইল।

আমার ব্লগ পোস্টগুলো পেতে আমার ফেসবুক পেজে লাইক দিতে পারেন, এবং নোটিফিকেশনও অন করে রাখতে পারেন।

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।

This site uses Akismet to reduce spam. Learn how your comment data is processed.