वेब स्क्रैपिंग और LLMs

Python वेब स्क्रैपिंग और LLM निष्कर्षण गाइड (2026)

त्वरित उत्तर: 2026 में LLM के लिए आधुनिक python web scraping projects में दो-चरणीय पाइपलाइन आवश्यक है: उच्च-समवर्ती अतुल्यकालिक हेडलेस रेंडरिंग (Playwright या Crawl4AI) और मॉडल में भेजने से पहले DOM नॉइज़ प्रूनिंग (SVG, स्क्रिप्ट्स और मेनू हटाना)। संरचित डेटा के लिए Instructor के साथ Pydantic schemas का उपयोग करें, जिससे टोकन लागत 75–88% तक कम हो जाती है।


1. परिचय: फ्रंटियर LLMs और AI एजेंट्स के युग में वेब स्क्रैपिंग

स्वायत्त AI एजेंट्स और RAG पाइपलाइनों को ताजा और सटीक वेब संदर्भ की आवश्यकता होती है। यद्यपि Claude 3.7 Sonnet, DeepSeek V3/R1 और GPT-4o जैसे आधुनिक मॉडल्स में 20 लाख टोकन तक के संदर्भ विंडो हैं, बिना साफ किए कच्चे HTML को मॉडल में भेजना अत्यधिक महंगा साबित होता है।

पारंपरिक रूप से, जब scrape website python की आवश्यकता होती थी, तो requests और BeautifulSoup या Scrapy का उपयोग किया जाता था। आज का वेब React, Next.js और Vue आधारित डायनामिक SPAs में बदल चुका है, जो Cloudflare Turnstile, DataDome और Akamai जैसे WAFs से सुरक्षित हैं।

स्क्रैपिंग का उद्देश्य भी बदल गया है:

  • पारंपरिक स्क्रैपिंग (2015–2023): XPath या CSS चयनकर्ताओं के माध्यम से डेटाबेस में विशिष्ट फ़ील्ड निकालना।
  • एजेंट और LLM स्क्रैपिंग (2026): अनावश्यक HTML कोड हटाना, सिमेंटिक मार्कडाउन बनाए रखना और 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 बड़े पैमाने पर वितरित क्रॉलिंग डायनामिक SPAs और जटिल JS कार्य AI एजेंट्स, RAG और LLM एक्सट्रैक्शन
जावास्क्रिप्ट निष्पादन नहीं नहीं (Scrapy-Playwright आवश्यक) पूर्ण Chromium और WebKit इंजन LLM के लिए अनुकूलित Chromium इंजन
थ्रूपुट ~15-25 अनुरोध/सेकंड ~150-300 अनुरोध/सेकंड ~5-12 पेज/सेकंड (16GB RAM) ~25-45 पेज/सेकंड (संदर्भ पुनर्चक्रण)
मेमोरी खपत न्यूनतम (~40MB) कम (~120MB) उच्च (150-350MB प्रति संदर्भ) मध्यम (~80-140MB प्रति टैब)
मार्कडाउन रूपांतरण बाहरी लाइब्रेरी आवश्यक कस्टम पाइपलाइन मैन्युअल एकीकरण मूल LLM-अनुकूलित मार्कडाउन
DOM नॉइज़ प्रूनिंग मैन्युअल कोड मैन्युअल चयनकर्ता मैन्युअल CDP मूल्यांकन अंतर्निहित PruningContentFilter
एंटी-बॉट बचाव बहुत कमजोर (केवल UA) मिडलवेयर प्रॉक्सी उत्कृष्ट (playwright-stealth) अंतर्निहित स्टील्थ और TLS अनुकरण
Pydantic समर्थन नहीं ItemLoaders नहीं मूल Pydantic स्कीमा इंजन

3. LLM स्क्रैपिंग का अर्थशास्त्र: DOM नॉइज़ प्रूनिंग और टोकन बचत

कच्चे HTML का 85% से 95% हिस्सा CSS क्लास, ट्रैकिंग स्क्रिप्ट और फालतू लिंक्स पर बर्बाद होता है।

50,000 पेजों पर वित्तीय प्रभाव (GPT-4o $2.50 / 1M टोकन)

  • कच्चे HTML के दैनिक टोकन: 50,000 × 55,000 = 2.75 अरब टोकन
  • साफ मार्कडाउन के दैनिक टोकन: 50,000 × 4,200 = 2.1 करोड़ टोकन
  • दैनिक बचत: (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 सुरक्षा और प्रॉक्सी रोटेशन

# 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 सम्मिलित
LLM इंफरेंस (GPT-4o) $13,750.00 $1,050.00 $975.00 $825.00
कुल लागत $13,918.00 $1,104.00 $1,021.00 $1,024.00

9. निष्कर्ष और इंजीनियरिंग सिफारिशें

  1. चरणबद्ध रणनीति: स्थिर HTML के लिए curl_cffi और डायनामिक SPAs के लिए Crawl4AI का उपयोग करें।
  2. DOM प्रूनिंग अनिवार्य: कच्चे HTML को कभी भी LLM में न भेजें; 80%+ टोकन संपीड़न सुनिश्चित करें।
  3. Pydantic सत्यापन: Instructor द्वारा स्कीमा सटीकता सुनिश्चित करें।
  4. अतुल्यकालिक पृथक्करण: स्क्रैपिंग और LLM निष्कर्षण को अलग कतारों (Celery/ARQ) में रखें।
← सभी लेख
0 / 4