تخطَّ إلى المحتوى
NerdLevelTech
تطوير الواجهة الخلفية

كشط الويب في ٢٠٢٦: الأدوات، والأخلاقيات، والتقنيات

قم بعمليات الكشط بمسؤولية باستخدام robots.txt، وحدود معدل الطلبات، وPlaywright، وBeautifulSoup وScrapy. تعامل مع الصفحات الديناميكية، وجدران الحماية ضد البوتات، والبيانات غير المنظمة.

Nerd Level Techنُشر في تم التحديث ٨ دقائق للقراءةEnglish
صورة غلاف: كشط الويب في 2026: الأدوات، والأخلاقيات، والتقنيات

أعيد إنشاؤه: ٢٧ مارس ٢٠٢٦ · آخر تحقق: ٣ نوفمبر ٢٠٢٦.

ملخص

يعمل كشط الويب (Web scraping) على استخراج البيانات من المواقع الإلكترونية باستخدام أدوات مثل Playwright (الخيار الافتراضي للمشاريع الجديدة في ٢٠٢٦)، وBeautiful Soup، وScrapy. يحترم الكشط الأخلاقي ملف robots.txt، وتحديد معدل الطلبات (rate limiting)، والشروط القانونية؛ بينما يتعامل الاستخراج المدعوم بـ LLM مع البيانات غير المنظمة؛ وتظل البيانات المنظمة (JSON-LD، microdata) هي الخيار المفضل دائماً عند توفرها.

الويب مليء بالبيانات. قوائم الوظائف، أسعار المنتجات، قوائم العقارات، الأوراق البحثية — كلها محبوسة داخل HTML، وتنتظر من يحللها. كشط الويب هو فن استخراج هذه البيانات برمجياً.

لكن كشط الويب يتواجد في منطقة رمادية. بعض المواقع ترحب بالكاشطات (scrapers)، بينما يقوم البعض الآخر بحظرها بقوة. وتلوح في الأفق مخاوف تتعلق بحقوق الطبع والنشر وشروط الخدمة، كما أن المسؤولية القانونية أمر واقع.

في عام ٢٠٢٦، تطور مشهد الكشط. أصبحت أدوات مكافحة الكشط أكثر تطوراً، ولكن كذلك فعلت مكتبات الكشط. أصبح Playwright الآن خيار أتمتة المتصفح الافتراضي لمعظم المشاريع الجديدة، بينما يظل Puppeteer بديلاً قوياً مخصصاً لـ Chrome فقط. وقد فتحت نماذج LLMs إمكانيات جديدة لاستخراج البيانات من الصفحات غير المنظمة. وبشكل متزايد، يتساءل المطورون المسؤولون: "هل يجب أن أقوم بالكشط، أم يجب أن أستخدم API العام أو البيانات المنظمة بدلاً من ذلك؟"

يغطي هذا الدليل تقنيات الكشط الأخلاقية، والأدوات الحديثة، ومتى يجب ألا تقوم بالكشط.

الكشط الأخلاقي: الأساس

قبل كتابة سطر واحد من الكود، افهم المشهد الأخلاقي والقانوني.

احترام robots.txt

كل موقع إلكتروني لديه ملف /robots.txt. يحدد هذا الملف الأجزاء المتاحة للكشط من الموقع ومدى سرعة الزحف المسموح بها.

# example.com/robots.txt
User-agent: *
Disallow: /admin/
Disallow: /cart/
Disallow: /checkout/
Crawl-delay: 10

# A specific bot can be granted (or denied) different access
User-agent: Googlebot
Allow: /

هذا يعني: "جميع البوتات، ابقوا بعيداً عن /admin/، و/cart/، و/checkout/، وانتظروا ١٠ ثوانٍ على الأقل بين الطلبات. أما Googlebot فمسموح له في كل مكان."

يعتبر Crawl-delay تلميحاً غير قياسي ولكنه محترم على نطاق واسع. تفسره محركات البحث الكبرى بشكل مختلف (جوجل يتجاهله؛ بينما يلتزم به بينج وياندكس)، لذا لا تعتمد عليه كعقد ملزم — أضف فترات التأخير الخاصة بك في الكود.

قم بجلب ملف robots.txt، وحلله، واحترم قواعده:

python
from urllib.robotparser import RobotFileParser

rp = RobotFileParser()
rp.set_url('https://example.com/robots.txt')
rp.read()

if rp.can_fetch('MyScraperBot/1.0', 'https://example.com/page'):
    print('OK to scrape')
else:
    print('Not allowed by robots.txt')

تحديد معدل الطلبات (Rate Limiting)

حتى لو كان الكشط مسموحاً به، لا تضغط على الموقع بكثافة. أضف فترات تأخير بين الطلبات.

python
import time
import requests

urls = ['https://example.com/page1', 'https://example.com/page2']

for url in urls:
    response = requests.get(url)
    process_response(response)
    time.sleep(2)  # 2-second delay between requests

الكاشط المنضبط يضيف:

  • تأخير من ٢ إلى ٥ ثوانٍ بين الطلبات
  • ترويسة User-Agent تحدد هوية الكاشط الخاص بك
  • التراجع (Backing off) في حال تلقي استجابات ٤٢٩ (Too Many Requests)

الكشط ليس غير قانوني بطبيعته، ولكن هناك عدة عوامل تحدد قانونيته:

  1. شروط الخدمة: هل يمنع الموقع الكشط صراحةً؟ إذا كان الأمر كذلك، فإن انتهاك شروط الخدمة ينطوي على مخاطر قانونية.
  2. حقوق الطبع والنشر: يمكنك كشط المعلومات العامة، ولكن إعادة نشر المحتوى المحمي بحقوق الطبع والنشر دون إذن يعد انتهاكاً.
  3. الاحتيال الحاسوبي: لا تتجاوز عمليات المصادقة أو الـ CAPTCHA. لا تستخدم الكاشطات لارتكاب عمليات احتيال.
  4. حماية البيانات: إذا كانت البيانات تتضمن معلومات شخصية (عناوين بريد إلكتروني، أرقام هواتف)، فإن قوانين GDPR والقوانين المماثلة تنطبق هنا.

ممارسات آمنة:

  • تحقق من ملف robots.txt وشروط الخدمة الخاصة بالموقع
  • اكشط فقط ما تحتاجه
  • لا تعيد نشر المحتوى المحمي بحقوق الطبع والنشر مباشرة
  • استخدم البيانات المكشوطة للتحليل، وليس لإعادة التوزيع التجاري
  • اطلب الإذن عندما تكون في شك

Playwright: المعيار الحديث

أصبح Playwright الخيار الافتراضي لأتمتة المتصفحات لمعظم مشاريع الكشط (scraping) واختبارات النهاية إلى النهاية (end-to-end) في عام ٢٠٢٦. لا يزال Puppeteer متفوقاً قليلاً من حيث عدد نجوم GitHub الخام، ويظل مناسباً جداً لمهام عمل Chrome فقط، ولكن دعم Playwright الممتاز لـ Chromium و Firefox و WebKit (محرك Safari)، بالإضافة إلى الروابط الرسمية لـ Python و Node.js و .NET و Java، يمنحه نطاق تغطية أوسع. فهو يتحكم في المتصفحات بدون واجهة (headless browsers) ويتعامل مع المواقع التي تعتمد بكثافة على JavaScript بشكل تلقائي.

الاستخدام الأساسي

python
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto('https://example.com')
    title = page.title()
    print(title)
    browser.close()

يقوم Playwright بمعالجة JavaScript، والتعامل مع ملفات تعريف الارتباط (cookies)، وإدارة جلسات المتصفح. إنه مثالي لتطبيقات الصفحة الواحدة (single-page apps) والمحتوى الديناميكي.

كشط المحتوى الديناميكي

تقوم المواقع الحديثة بتحميل البيانات عبر JavaScript. طلبات HTTP التقليدية تحصل فقط على HTML الأولي. ينتظر Playwright حتى يتم معالجة JavaScript، ثم يلتقط الـ DOM بعد تعبئته بالبيانات.

python
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()

    # Navigate and wait for data to load
    page.goto('https://example.com/products')
    page.wait_for_selector('.product-item')  # Wait for products to load

    # Extract product names and prices
    products = page.query_selector_all('.product-item')
    data = []
    for product in products:
        name = product.query_selector('.name').text_content()
        price = product.query_selector('.price').text_content()
        data.append({'name': name, 'price': price})

    print(data)
    browser.close()

تعتبر wait_for_selector() حاسمة — فهي تضمن انتهاء تحميل الصفحة قبل استخراج البيانات.

التعامل مع تدابير مكافحة البوتات

تقوم المواقع بحظر أدوات الكشط لحماية خوادمها. يساعدك Playwright في التغلب على ذلك:

python
# Add realistic delays
page.wait_for_timeout(1000)  # 1 second delay

# Use a realistic User-Agent
context = browser.new_context(
    user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
)

# Rotate through proxy servers (if heavily blocked)
context = browser.new_context(proxy={'server': 'http://proxy.example.com:8080'})

# Handle cookies and session state
context.add_cookies([{'name': 'session', 'value': 'abc123'}])

لكن احذر: إذا كان الموقع يحظر أدوات الكشط بنشاط باستخدام CAPTCHAs وحظر عناوين IP، فإن تجاوز هذه التدابير قد ينتهك قوانين الاحتيال الحاسوبي. احترم رغبة الموقع في حظرك.

Beautiful Soup: تحليل HTML الثابت

بالنسبة للمواقع التي تقدم HTML كاملاً في الاستجابة الأولية (بدون JavaScript)، فإن Beautiful Soup خفيف وقوي.

python
from bs4 import BeautifulSoup
import requests

response = requests.get('https://example.com/products')
soup = BeautifulSoup(response.content, 'html.parser')

# Extract product elements
products = soup.find_all('div', class_='product')

for product in products:
    name = product.find('h2').text
    price = product.find('span', class_='price').text
    print(f'{name}: {price}')

Beautiful Soup أبسط من Playwright، وأسرع، ويستهلك ذاكرة أقل. استخدمه للمواقع الثابتة؛ واترك Playwright للمواقع الديناميكية.

Scrapy: الكشط على مستوى المؤسسات

Scrapy هو إطار عمل متكامل لمشاريع الكشط واسعة النطاق. وهو يتعامل مع:

  • الطلبات المتزامنة (عدة مواقع في وقت واحد)
  • جدولة الطلبات وتحديد أولوياتها
  • البرمجيات الوسيطة (Middleware) للتعامل مع ملفات تعريف الارتباط، والبروكسي، و User agents
  • دعم مدمج لملف robots.txt وتحديد معدل الطلبات (rate limiting)
  • تصدير البيانات إلى CSV أو JSON أو قواعد البيانات
python
import scrapy

class ProductSpider(scrapy.Spider):
    name = 'products'
    start_urls = ['https://example.com/products']

    def parse(self, response):
        for product in response.css('div.product'):
            yield {
                'name': product.css('h2::text').get(),
                'price': product.css('.price::text').get(),
            }

        # Follow pagination links
        next_page = response.css('a.next::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)

قم بتشغيله:

bash
scrapy crawl products -o output.json

يعتبر Scrapy مبالغاً فيه للمشاريع الفردية البسيطة، ولكنه ضروري لكشط المواقع الضخمة التي تحتوي على ملايين الصفحات.

استخراج البيانات المدعوم بـ LLM

يمكن لنماذج اللغة الكبيرة (LLMs) استخراج بيانات مهيكلة من HTML غير مهيكل، مما يبسط كود الكشط بشكل كبير.

python
import anthropic

html = """
<div class="product">
  <h2>MacBook Pro 16-inch</h2>
  <span class="price">$1,999</span>
  <p>Powerful laptop for developers and creators</p>
</div>
"""

client = anthropic.Anthropic()
message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": f"Extract product name, price, and description from this HTML:\n\n{html}"
        }
    ]
)

print(message.content[0].text)
# Output:
# Product Name: MacBook Pro 16-inch
# Price: $1,999
# Description: Powerful laptop for developers and creators

تتعامل نماذج LLM مع HTML الفوضوي، والاختلافات في الهيكل، وأوصاف اللغة الطبيعية. هي أبطأ وأغلى من تحليل regex ولكنها أكثر موثوقية بكثير.

البيانات المهيكلة: البديل الأفضل

قبل البدء بالكشط، تحقق مما إذا كان الموقع يوفر بيانات مهيكلة. تدمج العديد من المواقع JSON-LD (Linked Data) في الصفحة.

html
<script type="application/ld+json">
{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "MacBook Pro",
  "offers": {
    "@type": "Offer",
    "price": "1999"
  }
}
</script>

قم باستخراجها:

python
import json
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')
script = soup.find('script', {'type': 'application/ld+json'})
data = json.loads(script.string)
print(data['name'])  # MacBook Pro

JSON-LD أنظف، وأسرع، وأكثر أماناً من الناحية القانونية من تحليل HTML. استخدمه كلما كان متاحاً.

قائمة مراجعة للكشط المسؤول

  • تحقق من robots.txt — احترم تأخيرات الزحف والمسارات الممنوعة
  • اقرأ شروط الخدمة (ToS) الخاصة بالموقع — هل الكشط ممنوع صراحةً؟
  • أضف فواصل زمنية بين الطلبات (دقيقتين إلى ٥ ثوانٍ كحد أدنى)
  • حدد هوية أداة الكشط الخاصة بك باستخدام ترويسة User-Agent
  • تعامل مع تحديد معدل الطلبات بلباقة (تحقق من استجابات ٤٢٩)
  • احترم حقوق الطبع والنشر — لا تعيد نشر المحتوى كاملاً
  • فكر في استخدام APIs عامة أو بيانات مهيكلة بدلاً من ذلك
  • تجنب كشط البيانات الشخصية؛ وإذا كان ذلك ضرورياً، اتبع قواعد GDPR
  • توقف إذا تم حظرك — لا تحاول تخطي CAPTCHAs أو حظر الـ IP
  • سجل نشاط الكشط الخاص بك لأغراض التدقيق
  • الخلاصة

    يعد كشط الويب (Web scraping) أداة قوية لاستخراج البيانات من الإنترنت. ولكن القوة تأتي مع المسؤولية. ابدأ دائماً بالتحقق من ملف robots.txt وشروط خدمة الموقع. قم بالكشط باحترام — أضف فواصل زمنية، وعرّف نفسك، وتراجع إذا تم حظرك.

    اختر أداتك بحكمة: Playwright للمواقع الديناميكية، Beautiful Soup لـ HTML الثابت، Scrapy للمشاريع الضخمة على مستوى المؤسسات، و LLMs للبيانات غير المنظمة. وقبل كتابة أي برنامج كشط، اسأل نفسك: "هل هناك API عام أو بيانات منظمة يمكنني استخدامها بدلاً من ذلك؟"

    الخيط الفاصل بين الكشط المحترم والإساءة رفيع جداً. ابقَ دائماً في الجانب الصحيح.

    ابقَ على مسار النيرد

    رسالة واحدة كلّ أسبوع: عدد الخميس يضمّ شرحًا لمنظومة واحدة، وثلاث إشارات، وتمرينًا واحدًا، ووظيفة واحدة، وخلاصة بالعربية.

    بدون إزعاج. إلغاء الاشتراك في أي وقت.