দ্রুত উত্তর: 2026 সালে এলএলএম-এর জন্য আধুনিক python web scraping projects-এ একটি দুই-পর্যায়ের পাইপলাইন অপরিহার্য: উচ্চ-সমবর্তী অ্যাসিঙ্ক হেডলেস রেন্ডারিং (Playwright বা Crawl4AI) এবং মডেলে পাঠানোর আগে অ্যালগরিদমিক DOM নয়েজ ছাঁটাই (SVG, স্ক্রিপ্ট ও নেভিগেশন বর্জন)। কাঠামোগত ডেটার জন্য Instructor-এর সাথে Pydantic schemas ব্যবহার করুন, যা ইনফারেন্স টোকেন খরচ 75–88% পর্যন্ত সাশ্রয় করে।
1. ভূমিকা: ফ্রন্টিয়ার এলএলএম ও এআই এজেন্টের যুগে ওয়েব স্ক্র্যাপিং
স্বায়ত্তশাসিত এআই এজেন্ট এবং RAG পাইপলাইনগুলোর জন্য নির্ভরযোগ্য ও সাম্প্রতিক ওয়েব কনটেক্সট অত্যন্ত জরুরি। যদিও Claude 3.7 Sonnet, DeepSeek V3/R1 এবং GPT-4o-এর মতো ফ্রন্টিয়ার মডেলগুলোতে 20 লাখ পর্যন্ত টোকেন উইন্ডো রয়েছে, অপরিশোধিত কাঁচা HTML মডেলে পাঠানো ব্যাপক আর্থিক ক্ষতির কারণ।
পূর্বে scrape website python কাজের জন্য requests এবং BeautifulSoup বা Scrapy ব্যবহার করা হতো। বর্তমান ওয়েব ডায়নামিক React ও Next.js SPA দ্বারা নির্মিত এবং Cloudflare Turnstile ও Akamai WAF দ্বারা সুরক্ষিত।
স্ক্র্যাপিংয়ের মূল উদ্দেশ্যও পরিবর্তিত হয়েছে:
- ঐতিহ্যবাহী স্ক্র্যাপিং (2015–2023): XPath বা CSS সিলেক্টরের মাধ্যমে নির্দিষ্ট ডেটাবেস কলামে মান সংরক্ষণ।
- এজেন্ট ও এলএলএম স্ক্র্যাপিং (2026): অপ্রয়োজনীয় কোড অপসারণ, মার্কডাউন কাঠামো সংরক্ষণ এবং Pydantic schemas দ্বারা যাচাইকৃত JSON নিষ্কাশন।
2. ফ্রেমওয়ার্ক তুলনা: BeautifulSoup vs Scrapy vs Playwright vs Crawl4AI
| কর্মক্ষমতা মেট্রিক | BeautifulSoup4 + Requests | Scrapy (Twisted/AsyncIO) | Raw Playwright (Async Python) | Crawl4AI (v0.9.x+) |
|---|---|---|---|---|
| মূল ব্যবহার | ছোট স্ক্রিপ্ট ও স্ট্যাটিক HTML | বৃহৎ পরিসরে ডিস্ট্রিবিউটেড ক্রলিং | ডায়নামিক SPA ও জটিল JS ইন্টারঅ্যাকশন | এআই এজেন্ট, RAG ও এলএলএম এক্সট্র্যাকশন |
| জাভাস্ক্রিপ্ট সম্পাদন | নেই | নেই (Scrapy-Playwright প্রয়োজন) | সম্পূর্ণ Chromium ও WebKit ইঞ্জিন | এলএলএম-এর জন্য অপ্টিমাইজড Chromium |
| থ্রুপুট | ~15-25 অনুরোধ/সেকেন্ড | ~150-300 অনুরোধ/সেকেন্ড | ~5-12 পেজ/সেকেন্ড (16GB RAM) | ~25-45 পেজ/সেকেন্ড (কনটেক্সট পুনর্ব্যবহার) |
| মেমরি খরচ | ন্যূনতম (~40MB) | কম (~120MB) | বেশি (150-350MB প্রতি কনটেক্সট) | মাঝারি (~80-140MB প্রতি ট্যাব) |
| মার্কডাউন রূপান্তর | বাহ্যিক লাইব্রেরি আবশ্যক | কাস্টম পাইপলাইন | ম্যানুয়াল ইন্টিগ্রেশন | নেটিভ এলএলএম-অপ্টিমাইজড মার্কডাউন |
| DOM নয়েজ ছাঁটাই | ম্যানুয়াল কোড ফিল্টারিং | ম্যানুয়াল সিলেক্টর | ম্যানুয়াল CDP মূল্যায়ন | বিল্ট-ইন PruningContentFilter |
| অ্যান্টি-বট বাইপাস | দুর্বল (কেবলমাত্র UA) | মিডলওয়্যার প্রক্সি | উন্নত (playwright-stealth) |
বিল্ট-ইন স্টিলথ ও TLS অনুকরণ |
| Pydantic সমর্থন | নেই | ItemLoaders | নেই | নেটিভ Pydantic স্কিমা ইঞ্জিন |
3. এলএলএম স্ক্র্যাপিংয়ের অর্থনীতি: DOM নয়েজ ছাঁটাই ও টোকেন সাশ্রয়
কাঁচা HTML-এর 85% থেকে 95% টোকেন CSS ক্লাস, ট্র্যাকিং স্ক্রিপ্ট এবং অনাবশ্যক লিঙ্কে নষ্ট হয়।
দৈনিক 50,000 পেজে আর্থিক বিশ্লেষণ (GPT-4o $2.50 / 1M টোকেন)
- কাঁচা HTML দৈনিক টোকেন: 50,000 × 55,000 = 2.75 বিলিয়ন টোকেন
- পরিষ্কার মার্কডাউন দৈনিক টোকেন: 50,000 × 4,200 = 210 মিলিয়ন টোকেন
- দৈনিক সাশ্রয়: (2,750 - 210) × $2.50 = $6,350.00 / দিন
- মাসিক সাশ্রয়: $190,500.00 / মাস
4. পাইথন বাস্তবায়ন: Async Playwright এবং Selectolax
# clean_scraper.py
import asyncio
from playwright.async_api import async_playwright
from selectolax.parser import HTMLParser
import markdownify
async def scrape_clean_markdown(url: str) -> str:
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True, args=["--no-sandbox"])
page = await browser.new_page()
await page.goto(url, wait_until="networkidle", timeout=30000)
raw_html = await page.content()
await browser.close()
parser = HTMLParser(raw_html)
for tag in ["script", "style", "svg", "noscript", "header", "footer", "nav", "aside"]:
for node in parser.css(tag):
node.decompose()
main = parser.css_first("main, article, #content") or parser.css_first("body")
return markdownify.markdownify(main.html if main else parser.html, heading_style="ATX")
5. Crawl4AI ফ্রেমওয়ার্ক ব্যবহার
# crawl4ai_pipeline.py
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
from crawl4ai.content_filter_strategy import PruningContentFilter
async def run_crawl4ai(url: str) -> str:
async with AsyncWebCrawler(config=BrowserConfig(headless=True)) as crawler:
config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
content_filter=PruningContentFilter(threshold=0.48),
wait_until="networkidle"
)
res = await crawler.arun(url=url, config=config)
return res.markdown
6. Pydantic এবং Instructor দিয়ে কাঠামোগত JSON নিষ্কাশন
# pydantic_extractor.py
import os
from typing import List, Optional
from pydantic import BaseModel, Field
import instructor
from openai import OpenAI
class TechSpec(BaseModel):
name: str = Field(description="ফিচারের নাম")
supported: bool = Field(description="সমর্থিত কিনা")
class ProductInfo(BaseModel):
product_name: str
price_usd: Optional[float] = None
specs: List[TechSpec]
def extract_data(clean_md: str) -> ProductInfo:
client = instructor.from_openai(OpenAI(api_key=os.environ["OPENAI_API_KEY"]))
return client.chat.completions.create(
model="gpt-4o-mini",
response_model=ProductInfo,
messages=[{"role": "user", "content": clean_md}],
temperature=0.0
)
7. WAF প্রতিরোধ ও curl_cffi স্টিলথ রিকোয়েস্ট
# stealth_requester.py
from curl_cffi import requests
def fetch_stealth(url: str, proxy: str = None) -> str:
proxies = {"http": proxy, "https": proxy} if proxy else None
return requests.get(url, impersonate="chrome124", proxies=proxies, timeout=15).text
8. মোট খরচ তুলনা (100,000 পেজ টেস্ট)
| খরচের খাত | Raw Playwright (কাঁচা HTML) | Playwright + Selectolax | Crawl4AI Async ইঞ্জিন | Firecrawl Cloud |
|---|---|---|---|---|
| কম্পিউট খরচ | $48.00 | $22.00 | $16.00 | $0.00 |
| রেসিডেন্সিয়াল প্রক্সি | $120.00 | $32.00 | $30.00 | অন্তর্ভুক্ত |
| এলএলএম ইনফারেন্স | $13,750.00 | $1,050.00 | $975.00 | $825.00 |
| সর্বমোট খরচ | $13,918.00 | $1,104.00 | $1,021.00 | $1,024.00 |
9. উপসংহার ও স্থাপত্য সুপারিশ
- টায়ার্ড কৌশল: দ্রুত কাজের জন্য
curl_cffiএবং ডায়নামিক পেজের জন্য Crawl4AI ব্যবহার করুন। - DOM ছাঁটাই বাধ্যতামূলক: কাঁচা HTML কখনোই এলএলএম-এ পাঠাবেন না; 80%+ টোকেন হ্রাস নিশ্চিত করুন।
- Pydantic যাচাইকরণ: ডেটা নির্ভুল রাখতে Instructor লাইব্রেরি ব্যবহার করুন।
- অ্যাসিঙ্ক বিচ্ছিন্নতা: ক্রলিং এবং এআই প্রসেসিং আলাদা কিউতে (Celery/ARQ) পরিচালনা করুন।