إجابة سريعة: في عام 2026، تتطلب مشاريع python web scraping projects لتغذية نماذج LLM خط أنابيب ثنائي المراحل: معالجة غير متزامنة بالمتصفح الخفي (Playwright أو Crawl4AI) مع تقليم برمجي لشوائب DOM (إزالة SVG والنصوص البرمجية والقوائم) قبل التمرير للنموذج. وللبيانات المنظمة، تضمن مخططات Pydantic عبر Instructor مخرجات JSON دقيقة مع خفض تكاليف الرموز بنسبة 75-88%.
1. المقدمة: كشط الويب في عصر نماذج الذكاء الاصطناعي والوكلاء المستقلين
يعتمد وكلاء الذكاء الاصطناعي المستقلون وأنظمة توليد الإجابات المعززة بالاسترجاع (RAG) على سياق ويب حديث وموثوق. ورغم امتلاك نماذج مثل Claude 3.7 Sonnet وDeepSeek V3/R1 وGPT-4o لنوافذ سياق تصل إلى مليوني رمز، فإن تمرير كود HTML الخام يعد من أكثر الممارسات إهداراً للميزانية.
سابقاً، كان إنجاز مهمة scrape website python يعتمد على requests مع BeautifulSoup أو عناكب Scrapy. اليوم، يهيمن الويب التفاعلي (React, Next.js, Vue) المحمي بأنظمة WAF المتقدمة مثل Cloudflare Turnstile وDataDome.
وتغيرت أهداف الاستخراج بالكامل:
- الكشط التقليدي (2015–2023): استخراج حقول محددة إلى قواعد بيانات علائقية عبر محددات XPath أو CSS.
- كشط الوكلاء والنماذج (2026): تنظيف الضوضاء، والحفاظ على تنسيق Markdown الدلالي، واستخراج مخرجات JSON محكمة باستخدام مخططات Pydantic.
2. مقارنة أطر العمل: BeautifulSoup vs Scrapy vs Playwright vs Crawl4AI
| معيار التقييم | BeautifulSoup4 + Requests | Scrapy (Twisted/AsyncIO) | Raw Playwright (Async Python) | Crawl4AI (v0.9.x+) |
|---|---|---|---|---|
| الاستخدام الأساسي | السكربتات الخفيفة وHTML الثابت | الزحف الضخم والموزع | تطبيقات SPA وتفاعلات JS المعقدة | وكلاء الذكاء الاصطناعي واستخراج LLM |
| تشغيل جافاسكربت | غير مدعوم | غير مدعوم (يتطلب Scrapy-Playwright) | محركات كاملة لـ Chromium وWebKit | محرك Chromium مخصص لنماذج LLM |
| معدل الإنتاجية | ~15-25 طلب/ثانية | ~150-300 طلب/ثانية | ~5-12 صفحة/ثانية (16GB RAM) | ~25-45 صفحة/ثانية (إعادة استخدام السياق) |
| استهلاك الذاكرة | ضئيل جداً (~40MB) | منخفض (~120MB) | مرتفع (150-350MB لكل سياق) | معتدل (~80-140MB لكل تبويب) |
| تحويل Markdown | يتطلب مكتبة خارجية | خط معالجة مخصص | دمج يدوي | Markdown أصلي محسن للنماذج |
| تنقية ضوضاء DOM | تنظيف يدوي بالبرمجة | محددات يدوية | تقييم يدوي عبر CDP | فلتر PruningContentFilter أصلي |
| تجاوز الحظر | ضعيف جداً (UA فقط) | بروكسيات وسيطة | متقدم (playwright-stealth) |
تخفي مدمج ومحاكاة TLS |
| دعم Pydantic | غير مدعوم | ItemLoaders | غير مدعوم | محرك أصلي لمخططات Pydantic |
3. اقتصاديات استخراج البيانات: تنقية DOM وخفض التكاليف
يحتوي كود HTML الخام على 85% إلى 95% من البيانات غير الضرورية كفئات التنسيق وأكواد التتبع.
التحليل المالي لمعالجة 50,000 صفحة يومياً (GPT-4o بسعر $2.50 لكل مليون رمز)
- رموز HTML الخام يومياً: 50,000 × 55,000 = 2.75 مليار رمز
- رموز Markdown المنقى يومياً: 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
# 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. تجاوز الحظر باستخدام 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 صفحة)
| بند التكلفة | Playwright الخام | Playwright + Selectolax | محرك Crawl4AI | سحابة Firecrawl |
|---|---|---|---|---|
| البنية التحتية | $48.00 | $22.00 | $16.00 | $0.00 |
| بروكسيات سكنية | $120.00 | $32.00 | $30.00 | مشمول |
| استنتاج LLM | $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) لعزل الزحف عن الاستنتاج.