Web Scraping، دليل عملي بـPython 2026
دليل لسحب البيانات من المواقع بـPython: BeautifulSoup، Playwright، Scrapy، مع القواعد القانونية — تحقّق من API رسمي، أفضل من السحب 4.
Web Scraping = استخراج بيانات من المواقع برمجياً. مفيد للأبحاث، مراقبة الأسعار، تحليل المنافسين. هذا الدليل يشرح الأدوات والقواعد.
القواعد القانونية والأخلاقية
قبل السحب
- اقرأ robots.txt:
https://example.com/robots.txt - راجع Terms of Service
- تحقّق من API رسمي، أفضل من السحب
- راعِ Rate Limits، لا تُثقل الخادم
- لا تسحب بيانات شخصية بلا موافقة (GDPR)
- حقوق الطبع، البيانات المسحوبة قد تكون محميّة
القاعدة الأخلاقية
- البيانات العامّة (بلا تسجيل): غالباً مقبولة
- البيانات خلف تسجيل: تحتاج موافقة صريحة
- البيانات الشخصية: احترم الخصوصية
المستوى 1: BeautifulSoup (المواقع البسيطة)
للمواقع الثابتة (HTML يُرسل جاهزاً من الخادم).
التثبيت
pip install requests beautifulsoup4 lxml
مثال: سحب عناوين مقالات
import requests
from bs4 import BeautifulSoup
url = "https://example.com/blog"
headers = {"User-Agent": "Mozilla/5.0 (Educational Research Bot)"}
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "lxml")
titles = soup.find_all("h2", class_="post-title")
for title in titles:
print(title.get_text(strip=True))
print(title.find("a")["href"])
مثال متقدّم: سحب جدول
import pandas as pd
# طريقة سريعة
tables = pd.read_html("https://example.com/data")
df = tables[0]
print(df.head())
# طريقة يدوية
soup = BeautifulSoup(html, "lxml")
rows = soup.find("table").find_all("tr")
data = []
for row in rows:
cells = [cell.get_text(strip=True) for cell in row.find_all(["td", "th"])]
data.append(cells)
المستوى 2: Playwright (المواقع الحديثة)
للمواقع التي تُحمّل محتوى بـJavaScript (React، Vue، Angular).
التثبيت
pip install playwright
playwright install chromium
مثال: سحب موقع React
from playwright.sync_api import sync_playwright
def scrape_dynamic_site(url: str):
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto(url)
# انتظر حتى يظهر المحتوى
page.wait_for_selector(".product-card")
# استخرج البيانات
products = page.query_selector_all(".product-card")
results = []
for product in products:
name = product.query_selector(".name").text_content()
price = product.query_selector(".price").text_content()
results.append({"name": name, "price": price})
browser.close()
return results
مثال: تسجيل دخول ثم سحب
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # False للمشاهدة
page = browser.new_page()
# تسجيل الدخول
page.goto("https://example.com/login")
page.fill("input[name=email]", "you@example.com")
page.fill("input[name=password]", "your_password")
page.click("button[type=submit]")
page.wait_for_url("**/dashboard")
# سحب البيانات
page.goto("https://example.com/private-data")
data = page.query_selector_all(".data-item")
browser.close()
المستوى 3: Scrapy (المشاريع الكبيرة)
لسحب آلاف الصفحات بكفاءة.
التثبيت
pip install scrapy
scrapy startproject myscraper
Spider أساسي
# myscraper/spiders/products.py
import scrapy
class ProductSpider(scrapy.Spider):
name = "products"
start_urls = ["https://example.com/products"]
custom_settings = {
"DOWNLOAD_DELAY": 1, # ثانية بين كل طلب
"USER_AGENT": "Mozilla/5.0 (Research Bot)"
}
def parse(self, response):
for product in response.css("div.product"):
yield {
"name": product.css("h3::text").get(),
"price": product.css(".price::text").get(),
"url": product.css("a::attr(href)").get()
}
# الصفحة التالية
next_page = response.css("a.next::attr(href)").get()
if next_page:
yield response.follow(next_page, self.parse)
التشغيل
scrapy crawl products -o products.json
أفضل الممارسات
1) User-Agent صادق
headers = {
"User-Agent": "MyResearchBot/1.0 (contact: you@example.com)"
}
2) Rate Limiting
import time
for url in urls:
scrape(url)
time.sleep(2) # 2 ثانية بين طلبات
3) Retry Logic
from time import sleep
def fetch_with_retry(url: str, max_retries: int = 3):
for i in range(max_retries):
try:
return requests.get(url, timeout=10)
except requests.RequestException:
if i == max_retries - 1:
raise
sleep(2 ** i)
4) Caching
import requests_cache
session = requests_cache.CachedSession(
"scraping_cache",
expire_after=3600 # ساعة
)
response = session.get(url) # يُخزّن ولا يُعيد الطلب
5) Rotate User-Agents
import random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
# إلخ
]
headers = {"User-Agent": random.choice(USER_AGENTS)}
6) Proxy Rotation (للمواقع الصارمة)
proxies = [
"http://user:pass@proxy1.com:8080",
"http://user:pass@proxy2.com:8080",
]
response = requests.get(url, proxies={"http": random.choice(proxies)})
بدائل السحب
1) APIs الرسمية
قبل السحب، ابحث:
- Twitter/X API
- YouTube Data API
- GitHub API
- Google Maps API
دائماً أفضل من السحب.
2) RSS Feeds
كثير من المواقع الإخبارية توفّر RSS، استخدمها بدل السحب.
3) Sitemap.xml
https://example.com/sitemap.xml
يعطيك قائمة URLs، أسرع من زحف الموقع.
4) Third-Party Data Providers
- SimilarWeb، بيانات مواقع
- Ahrefs API، SEO
- DataForSEO، SERP
أخطاء شائعة
1) عدم احترام robots.txt
عقوبة قانونية محتملة.
2) طلبات كثيرة بلا Delay
قد يُحظر IPك.
3) نسيان User-Agent
بعض المواقع ترفض requests بلا UA.
4) عدم معالجة أخطاء الشبكة
السكريبت يتعطّل من أوّل خطأ.
5) سحب محتوى محميّ
قضايا قانونية.
متى تستخدم AI بدل السحب
استخدم AI إذا:
- تحتاج فهم النصّ لا الترميز
- الموقع يتغيّر كثيراً (Scraping يكسر)
- كمّ البيانات صغير
استخدم Scraping إذا:
- تحتاج بيانات منظّمة بكميّة
- تكرار عالٍ
- دقّة عالية
المصادر الرسمية
Web Scraping في السعودية — الجانب القانوني
قبل أن تسحب بيانات من أي موقع سعودي، افهم الحدود القانونية:
١. نظام مكافحة الجرائم المعلوماتية السعودي: يُجرّم الوصول غير المشروع لأي نظام معلوماتي. سحب بيانات من موقع يحمي بياناته بـcaptcha أو تسجيل دخول إجباري = مخالفة.
٢. نظام حماية البيانات الشخصية (PDPL): سحب بيانات شخصية (أسماء، إيميلات، أرقام جوّال) من مواقع سعودية بلا موافقة أصحابها = خرق واضح للنظام.
٣. حقوق التأليف: نسخ محتوى مقالات كامل من موقع سعودي وإعادة نشره على موقعك = خرق حقوق الملكية الفكرية.
٤. robots.txt واتّفاقيات الاستخدام: احترمها. مواقع كثيرة تسمح بـscraping معتدل عبر crawler-friendly، لكنّها تحظر السحب الجماعي.
القاعدة الآمنة:
- يُسمح: بيانات علنية غير شخصية (أسعار منتجات، مقالات عامّة، تقارير حكومية).
- يُمنع: بيانات شخصية، محتوى محمي، أي شيء خلف تسجيل دخول أو captcha.
بدائل قانونية للـWeb Scraping
قبل السحب، فكّر في:
- API الرسمي: أغلب المواقع الكبيرة (تويتر، فيسبوك، جوجل) لها APIs. حتى بعض المواقع السعودية بدأت تفتح APIs (مثل بوّابة البيانات المفتوحة).
- RSS Feeds: للمقالات والأخبار، أبسط من scraping.
- بيانات مفتوحة رسمية: هيئة الإحصاء تنشر بيانات إحصائية سعودية جاهزة.
- شراكات مباشرة: تواصل مع الموقع لطلب تصدير بيانات.
الخيار الأفضل يعتمد على مصدرك المستهدَف — لا تعتمد على scraping كخيار أوّل.
اقرأ أيضاً: أفضل ١٠ أكواد Python · أكواد أتمتة يومية · أكواد Excel و Sheets · Claude Code، دليل المطوّر
الأسئلة الشائعة
يعتمد. البيانات العامّة (بلا تسجيل): غالباً قانوني إذا احترمت robots.txt وسياسة الموقع. البيانات المحميّة (بحساب): يحتاج موافقة. لا تسحب بيانات شخصية أو محتوى محميّ بحقوق.
BeautifulSoup للمواقع البسيطة. Playwright للمواقع الحديثة (React، Vue). Scrapy للمشاريع الكبيرة. requests-html كبديل خفيف.
ضمن سلسلة: البناء بالذكاء الاصطناعي
المقال 15 من 15الـAPI، RAG، قواعد البيانات المتجهية، الضبط الدقيق، الوكلاء المتعدّدون، وMCP.
- 1.OpenAI API، دليل البدء والتسعيرالدليل الشامل
- 5.قواعد المتّجهات (Vector Databases)، دليل شامل
- 6.Fine-tuning و LoRA، تخصيص نماذج AI
- 7.Fine-tuning للنماذج اللغوية: LoRA و QLoRA و Full Fine-tuning
- 8.MLOps، تشغيل نماذج AI في الإنتاج
- 9.أنظمة الوكلاء المتعدّدين (Multi-Agent): AutoGen و CrewAI و LangGraph
- 10.الأنظمة متعدّدة الوكلاء، AutoGen و CrewAI و LangGraph
- 11.MCP، بروتوكول سياق النموذج
- 12.مزوّدو السحابة للـAI، AWS، Azure، Google Cloud
- 13.Cursor، محرّر الكود الذكيّ للمطوّرين
- 14.Claude Code، دليل المطوّر العمليّ
- 15.Web Scraping، دليل عملي بـPython 2026
مقالات ذات صلة
Alat، ذراع PIF التقنية بـ100 مليار$
دليل لـAlat: التأسيس، أمير محمد بن سلمان رئيساً، الاستثمار في Softbank، Lenovo، والطموح لتحويل السعودية لمركز تصنيع تقنيّ.
السيارات الذاتية القيادة: Waymo و Tesla FSD و Zoox، أين نحن فعلاً؟
شرح واقعي لحال السيارات ذاتية القيادة 2026، مستويات SAE، Waymo التي تعمل تجارياً في 5 مدن، Tesla FSD ووعوده، Zoox و Cruise و Baidu Apollo، والتحدّيات…
كيف تختار أداة الذكاء الاصطناعي المناسبة لك
دليل قرار عملي لاختيار أداة الذكاء الاصطناعي حسب مهنتك واحتياجك: 6 مسارات مختلفة مع توصيات محدّدة — قائمة أدوات الذكاء الاصطناعي 2026 تجاوزت 12,000 أداة…
برنامج حافز ٢٠٢٦: التسجيل، الأهلية، والدعم المقدَّم للباحثين عن عمل
دليل حافز الشامل — طريقة التسجيل، شروط الأهلية، مبلغ الدعم الشهري، التزامات المستفيد، ومسار الانتقال من حافز إلى وظيفة.
جامعة اليمامة، التخصّصات والترتيب والقبول
جامعة أهلية في الرياض بتاريخ يمتدّ لأكثر من ٥٠ عاماً، تُدرّس بالإنجليزية، قوية في الأعمال والقانون والحوسبة. دليل الكليات وسوق العمل.
دليل السفر إلى عمّان من السعودية ٢٠٢٦، أفضل وقت والفيزا
متى تزور عمّان، إعفاء الفيزا للسعودي ٩٠ يوماً، البتراء ومعالم الأردن التاريخية — دليل عملي بجداول طقس حقيقية وروابط طيران وفنادق.