পাইথন প্রজেক্টস ও লাইব্রেরি

Agent 5: Real Estate / Flat Finder Agent

১. এই এজেন্ট কী কাজ করবে?

বাড়ি বা ফ্ল্যাট খোঁজা অনেক কষ্টের কাজ। আপনার হয়তো মিরপুরে ১৫ হাজার টাকার মধ্যে একটি ফ্ল্যাট দরকার। এই এজেন্ট বিপ্রপার্টি (Bproperty) বা বিক্রয় ডট কম (Bikroy) এর মতো সাইটগুলো স্ক্র্যাপ করবে এবং শুধুমাত্র আপনার পছন্দমতো বাজেটের ফ্ল্যাটের লিস্ট আপনাকে দেবে।

২. কী কী টুলস এবং লাইব্রেরি লাগবে?

  • requests এবং beautifulsoup4: ডেটা স্ক্র্যাপ করার জন্য।
  • pandas: ডেটা সুন্দর করে সাজিয়ে ফিল্টার করার জন্য।

৩. এ টু জেড কোড (A to Z Code)

নিচের কোডটি agent_flat_finder.py নামে সেভ করুন।

import requests
from bs4 import BeautifulSoup
import pandas as pd

class FlatFinderAgent:
    def __init__(self, location, max_budget):
        self.location = location.lower()
        self.max_budget = max_budget
        self.flats = []

    def search_flats(self, url):
        print(f"[Agent] {self.location} এলাকায় {self.max_budget} টাকার মধ্যে ফ্ল্যাট খুঁজছি...")
        
        # এখানে User-Agent ব্যবহার করা হয়েছে যাতে ওয়েবসাইট আমাদেরকে বট না ভাবে
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, "html.parser")
        
        # ডেমো HTML স্ট্রাকচার
        listings = soup.find_all("div", class_="property-listing")
        
        for item in listings:
            title = item.find("h2").get_text(strip=True)
            price_text = item.find("span", class_="price").get_text(strip=True)
            loc_text = item.find("span", class_="location").get_text(strip=True).lower()
            link = item.find("a")["href"]
            
            # "15,000 BDT" থেকে কমা এবং BDT মুছে শুধু নাম্বার বের করা
            try:
                price = int(price_text.replace(',', '').replace('BDT', '').strip())
            except:
                continue

            # ফিল্টার করা (লোকেশন মিললে এবং বাজেট কম হলে)
            if self.location in loc_text and price <= self.max_budget:
                self.flats.append({
                    "Title": title,
                    "Price (BDT)": price,
                    "Location": loc_text.title(),
                    "Link": link
                })

    def generate_report(self):
        if not self.flats:
            print(f"[Agent] দুঃখিত, আপনার বাজেটের মধ্যে কোনো ফ্ল্যাট পাওয়া যায়নি।")
            return

        print(f"[Agent] দারুণ! {len(self.flats)} টি ফ্ল্যাট পাওয়া গেছে।")
        df = pd.DataFrame(self.flats)
        
        # দাম অনুযায়ী ছোট থেকে বড় সাজানো
        df = df.sort_values(by="Price (BDT)")
        
        df.to_excel("affordable_flats.xlsx", index=False)
        print("[Agent] ডেটা 'affordable_flats.xlsx' ফাইলে সেভ হয়েছে।")

if __name__ == "__main__":
    target_area = "Mirpur"
    target_budget = 15000
    demo_url = "https://example-real-estate.com/dhaka/flats"
    
    agent = FlatFinderAgent(target_area, target_budget)
    agent.search_flats(demo_url)
    agent.generate_report()

৪. কীভাবে এটি আরও অ্যাডভান্সড করবেন?

  • রিয়েল এস্টেট সাইটগুলোতে অনেকগুলো পেজ থাকে (Pagination)। আপনি একটি while লুপ ব্যবহার করে এজেন্টকে ১ থেকে ১০ নম্বর পেজ পর্যন্ত সব ডেটা চেক করতে শেখাতে পারেন।
  • Playwright ব্যবহার করতে পারেন, কারণ অনেক রিয়েল এস্টেট সাইটে Map এবং ছবিগুলো JavaScript দিয়ে লোড হয়।