Building a Powerful Web Scraper with Python and BeautifulSoup on Termux
বর্তমান ডিজিটাল যুগে ডেটাই হলো প্রধান শক্তি (Data is the new gold)। কাস্টম এআই মডেল ট্রেইনিং, ই-কমার্স প্রোডাক্টের দাম ট্র্যাক করা, লিড জেনারেশন বা অটোমেটেড নিউজ পোর্টাল বানানোর জন্য আমাদের ইন্টারনেটের বিভিন্ন ওয়েবসাইট থেকে প্রচুর ডেটা সংগ্রহ করতে হয়। আর এই কাজটিকে অটোমেট করার প্রক্রিয়াকেই বলা হয় Web Scraping।
পাইথনের শক্তিশালী লাইব্রেরি এবং টারমাক্সের পোর্টেবিলিটি ব্যবহার করে আমরা পিসির সাহায্য ছাড়াই সরাসরি মোবাইলে হাই-পারফরম্যান্স স্ক্রাপার ও ক্রলার তৈরি করতে পারি। আজকের গাইডে আমরা দেখবো কীভাবে Requests এবং BeautifulSoup4 ব্যবহার করে যেকোনো ডাইনামিক ওয়েবসাইট স্ক্রাপ করার একটি প্রফেশনাল আর্কিটেকচার স্ক্রিপ্ট তৈরি করা যায়।
ধাপ ১: টারমাক্সে প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
স্ক্রাপিং প্রজেক্টের জন্য আমাদের দুটি প্রধান প্যাকেজ লাগবে। প্রথমত requests (যা ওয়েবসাইটের সোর্স কোড ডাউনলোড করবে) এবং দ্বিতীয়ত beautifulsoup4 (যা ডাউনলোড করা এইচটিএমএল কোড এনালাইসিস বা পার্স করবে)। আপনার টারমাক্স এ গিয়ে ভার্চুয়াল এনভায়রনমেন্ট বা গ্লোবাল টার্মিনালে নিচের কমান্ডটি রান করুন:
pip install requests beautifulsoup4 lxml
নোট: আমরা এখানে lxml পার্সার ইনস্টল করেছি কারণ পাইথনের ডিফল্ট এইচটিএমএল পার্সারের চেয়ে এটি কয়েক গুণ দ্রুত কাজ করে এবং ভাঙা বা ত্রুটিপূর্ণ এইচটিএমএল আর্কিটেকচার সহজেই হ্যান্ডেল করতে পারে।
ধাপ ২: সিক্রেট অ্যান্টি-ব্লকিং মেকানিজম (User-Agents)
যেকোনো সাধারণ পাইথন স্ক্রিপ্ট দিয়ে যখন কোনো সাইটে রিকোয়েস্ট পাঠানো হয়, তখন সাইটের সার্ভার বুঝতে পারে এটি একটি অটোমেটেড বোট (কারণ ডিফল্ট হেডার হিসেবে পাইথন-রিকোয়েস্ট পাঠানো হয়)। ফলস্বরূপ সার্ভার আইপি ব্লক বা 403 Forbidden এরর দেয়।
এই ব্লকিং বাইপাস করার সেরা উপায় হলো রিকোয়েস্ট হেডারে একটি রিয়েল ব্রাউজারের User-Agent যুক্ত করে দেওয়া, যাতে সার্ভার মনে করে কোনো আসল ইউজার ক্রোম বা ফায়ারফক্স ব্রাউজার দিয়ে সাইটটি ভিজিট করছে।
ধাপ ৩: কাস্টম পাইথন স্ক্রাপার কোড (JSON এ ডেটা সেভ)
টারমাক্সে nano scraper.py ফাইল তৈরি করে নিচের অ্যাডভান্সড কোডটি পেস্ট করুন। এই কোডটি একটি ডেমো ব্লগ সাইট থেকে আর্টিকেলের টাইটেল, লিঙ্ক এবং ক্যাটাগরি স্ক্রাপ করে সরাসরি একটি পরিচ্ছন্ন `JSON` ফাইলে আউটপুট সেভ করবে:
import requests
from bs4 import BeautifulSoup
import json
def scrape_ahyan_hub(target_url):
# রিয়েল ব্রাউজার হেডার মাস্কিং (Anti-Bot Bypass)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
print(f"Connecting to target: {target_url}...")
try:
response = requests.get(target_url, headers=headers, timeout=10)
if response.status_code == 200:
print("Successfully connected! Parsing HTML...")
soup = BeautifulSoup(response.text, "lxml")
scraped_data = []
# ধরি ওয়েবসাইটের কার্ডগুলোর ক্লাস নাম '.blog-card'
cards = soup.select(".blog-card")
for card in cards:
# কাস্টম ট্রাই-ক্যাচ যাতে একটি এলিমেন্ট মিস হলেও লুপ বন্ধ না হয়
try:
title = card.select_one(".card-title").text.strip()
link = card.select_one("a.read-more-btn")["href"]
category = card.select_one(".card-meta span").text.strip()
record = {
"title": title,
"link": link,
"category": category
}
scraped_data.append(record)
except AttributeError:
continue # কোনো উপাদানের ক্লাস মিস থাকলে পরেরটায় যাও
# ডেটা JSON ফাইলে এক্সপোর্ট করা
with open("output_data.json", "w", encoding="utf-8") as f:
json.dump(scraped_data, f, ensure_ascii=False, indent=4)
print(f"🎉 Success! Scraped {len(scraped_data)} items and saved to 'output_data.json'")
else:
print(f"❌ Failed to fetch page. HTTP Status: {response.status_code}")
except Exception as e:
print(f"An unexpected error occurred: {str(e)}")
if __name__ == "__main__":
# টেস্ট করার জন্য এখানে টার্গেট ব্লগের URL দিন
url = "https://blog.ahyancreations.top"
scrape_ahyan_hub(url)
ধাপ ৪: এক্সিকিউশন ও ক্রন অটোমেশন
ন্যানো এডিটর সেভ করে বের হয়ে আসুন এবং স্ক্রিপ্টটি রান করতে লিখুন:
python scraper.py
স্ক্রিপ্টটি সফলভাবে রান করার সাথে সাথেই আপনার ডিরেক্টরিতে একটি নতুন output_data.json ফাইল তৈরি হবে। ক্যাট কমান্ড (cat output_data.json) দিয়ে আপনি সংগৃহীত স্ট্রাকচার্ড ডেটা দেখতে পাবেন।
এই স্ক্রাপারটিকে যদি আপনি প্রতিদিন বা প্রতি ঘণ্টায় অটোমেটিকভাবে ব্যাকগ্রাউন্ডে রান করাতে চান, তবে পূর্বের গাইডে দেখানো গিটহাব অ্যাকশনস ক্রন-জব (GitHub Actions Cron) অথবা টারমাক্সের নিজস্ব termux-cron প্যাকেজ ব্যবহার করে স্ক্রিপ্টটি ফুল ফ্রি অটোমেশনে সেট করে দিতে পারেন।
এথিক্যাল স্ক্রাপিং ওrobots.txt গাইড: যেকোনো সাইট স্ক্রাপ করার আগে সবসময় সেই ডোমেনের শেষে /robots.txt (যেমন: example.com/robots.txt) লিখে তাদের স্ক্রাপিং পলিসি চেক করে নেওয়া উচিত। তাছাড়া সার্ভারের ওপর যেন অতিরিক্ত লোড না পড়ে, সেজন্য লুপের ভেতর ১-২ সেকেন্ডের টাইম ডিলে (time.sleep(2)) ব্যবহার করা একটি স্ট্যান্ডার্ড এবং প্রফেশনাল ডেভলপার প্র্যাকটিস।