আগের পর্ব-২ এ আমরা দেখেছি কিভাবে পাইথনে বিভিন্ন অবজেক্ট নিয়ে গুতাগুতি করতে হয়; এবং এই জ্ঞান থেকে আমরা ওয়েবপেজের 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)

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