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

Agent 1: Autonomous Web Scraper Agent

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

এই এজেন্টকে আপনি যেকোনো একটি ওয়েবসাইটের লিংক দেবেন। সে নিজে নিজে ওই লিংকে যাবে, পেজের সমস্ত ডেটা (যেমন: ইমেইল, নাম, ফোন নম্বর) খুঁজে বের করবে এবং সুন্দর করে একটি Excel ফাইলে সেভ করে দেবে।

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

  • requests: ওয়েব পেজ থেকে ডেটা আনার জন্য।
  • beautifulsoup4: HTML থেকে ডেটা ফিল্টার করার জন্য।
  • pandas: ডেটাগুলো Excel ফাইলে সেভ করার জন্য।
  • re (Regular Expression): ইমেইল এবং ফোন নম্বর খুঁজে বের করার জন্য (এটি পাইথনের সাথেই থাকে)।

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

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

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re

class AutonomousScraperAgent:
    def __init__(self, url):
        self.url = url
        self.emails = set()
        self.phones = set()

    def fetch_data(self):
        print(f"[Agent] {self.url} এ যাচ্ছি...")
        try:
            response = requests.get(self.url, timeout=10)
            if response.status_code == 200:
                print("[Agent] ডেটা সফলভাবে আনা হয়েছে। এক্সট্র্যাক্ট করা শুরু করছি...")
                self.extract_information(response.text)
            else:
                print(f"[Agent] Error: {response.status_code}")
        except Exception as e:
            print(f"[Agent] Failed to connect. Error: {e}")

    def extract_information(self, html_content):
        # BeautifulSoup দিয়ে HTML পার্স করা
        soup = BeautifulSoup(html_content, "html.parser")
        text_content = soup.get_text(separator=" ")

        # Regular Expression দিয়ে ইমেইল খোঁজা
        email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
        self.emails.update(re.findall(email_pattern, text_content))

        # Regular Expression দিয়ে ফোন নম্বর খোঁজা (বাংলাদেশের ফরম্যাট অনুযায়ী ডেমো)
        phone_pattern = r'(?:\+88|88)?(01[3-9]\d{8})'
        self.phones.update(re.findall(phone_pattern, text_content))

    def save_to_excel(self):
        print("[Agent] ডেটা Excel এ সেভ করা হচ্ছে...")
        
        # ইমেইল এবং ফোন নম্বর আলাদাভাবে সেভ করার জন্য
        data = {
            "Emails": list(self.emails) if self.emails else ["Not Found"],
            "Phones": list(self.phones) if self.phones else ["Not Found"]
        }
        
        # Pandas এর সাহায্যে Excel তৈরি
        # যেহেতু দুটি লিস্টের সাইজ সমান নাও হতে পারে, তাই আমরা আলাদা DataFrame বানাতে পারি
        # অথবা সবচেয়ে বড় লিস্টের সমান করে ছোট লিস্টকে ফিলাপ করতে পারি।
        # সহজ করার জন্য আমরা এখানে Dictionary কে DataFrame এ নিচ্ছি (Missing value NaN হবে)
        df = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in data.items() ]))
        df.to_excel("scraped_data.xlsx", index=False)
        print("[Agent] কাজ শেষ! 'scraped_data.xlsx' ফাইলটি চেক করুন।")

# এজেন্টকে কাজে লাগানো
if __name__ == "__main__":
    target_url = input("কোন ওয়েবসাইট স্ক্র্যাপ করতে চান? লিংক দিন: ")
    # উদাহরণ: https://books.toscrape.com/ (যদিও এখানে ইমেইল নেই, তবে অন্য সাইটে ট্রাই করতে পারেন)
    
    agent = AutonomousScraperAgent(target_url)
    agent.fetch_data()
    agent.save_to_excel()

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

  • বর্তমানে এটি শুধু একটি পেজ থেকে ডেটা নেয়। আপনি চাইলে এর ভেতরে এমন লজিক দিতে পারেন যেন সে ওয়েবসাইটের ভেতরের অন্যান্য লিংকগুলোতেও ঢুকে ডেটা কালেক্ট করে (যাকে Crawling বলে)।
  • ডায়নামিক ওয়েবসাইটের জন্য requests এর বদলে Playwright ব্যবহার করতে পারেন।