أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالمناهج والباقات
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • المناهج والباقات
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالمناهجالمدونةالدخول
How To Make It

اعمل Web Scraper بـ Python يسحب أسعار المنتجات في أقل من 40 سطر

مبتدئ٢٩ يونيو ٢٠٢٦5 دقائق قراءة
اعمل Web Scraper بـ Python يسحب أسعار المنتجات في أقل من 40 سطر

المستوى المطلوب: مبتدئ. لو بتفتح موقع وتنقل أسعار المنتجات بإيدك كل يوم، المقال ده هيوفّرلك الساعة دي ويخلّي السكربت يعملها في ثواني. هتطلع منه بسكربت Python شغّال (أقل من 40 سطر) يسحب اسم وسعر كل منتج ويحفظهم في ملف products.csv تقدر تفتحه في Excel.

اعمل Web Scraper بـ Python يسحب أسعار المنتجات أوتوماتيك

المشكلة باختصار

أي صفحة منتجات على النت هي في الأصل ملف HTML: نص مليان وسوم زي <div> و<span>. عينك بتشوف جدول مرتب، لكن الكمبيوتر بيشوف فوضى وسوم. الـ Web Scraping هو إنك تكتب برنامج يقرأ الفوضى دي ويطلّع منها بيانات منظمة: اسم المنتج وسعره في صفوف. ده بيحل مشكلة حقيقية: متابعة الأسعار يدويًا بطيئة وبتغلط.

الفكرة بمثال بسيط قبل التعريف العلمي

تخيّل صاحبك قاعد قدامه جريدة فيها صفحة إعلانات مليانة منتجات وأسعار. انت طلبت منه يكتبلك في دفتر اسم كل منتج وسعره بس. هو بيعمل إيه؟ بيمشي بعينه سطر سطر، يلاقي اسم المنتج، يكتبه، يلاقي السعر جنبه، يكتبه، وينتقل للي بعده لحد ما يخلّص الصفحة.

السكربت بيعمل نفس الحركة بالظبط. الجريدة هي صفحة الـ HTML. وقلم صاحبك اللي بيعرف "ده اسم وده سعر" هو مكتبة بتفهم بنية الـ HTML. والدفتر هو ملف products.csv.

دلوقتي التعريف العلمي الدقيق: الـ HTML بيترتّب على شكل شجرة من العناصر المتداخلة (DOM tree). كل منتج بيبقى عنصر له اسم وسمات (attributes) وكلاس (class) بيميّزه. مكتبة زي Beautiful Soup بتحوّل النص ده لشجرة تقدر تتنقّل فيها، وتطلب منها مثلًا: "هاتلي كل عنصر كلاسه price". الكلام ده اسمه parsing، يعني تحويل نص خام لبنية ليها معنى.

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

هتحتاج أداتين بس:

  • requests: بتجيب محتوى الصفحة (الـ HTML) من السيرفر. زي ما تكون فتحت الصفحة بس من غير متصفح.
  • Beautiful Soup (bs4): بتفهم الـ HTML وتدوّر جواه على العناصر اللي عايزها.

التنصيب بأمر واحد:

Bash
pip install requests beautifulsoup4

هنتدرّب على موقع books.toscrape.com، وهو موقع متعمّل مخصوص عشان الناس تتعلّم عليه الـ scraping بشكل قانوني وآمن. ده أحسن مكان تبدأ منه قبل ما تقرب من أي موقع حقيقي.

الخطوات: من صفر لملف CSV

  1. اجلب الصفحة بـ requests.get وحط لها مهلة (timeout) عشان ميعلّقش برنامجك.
  2. حوّل الـ HTML لشجرة بـ BeautifulSoup.
  3. اختار كل "كرت منتج" بالكلاس بتاعه، واسحب منه الاسم والسعر.
  4. كرّر على كل الصفحات، وحط تأخير بين الصفحة والتانية.
  5. اكتب النتيجة في ملف CSV.
Python
import csv, time, requests
from bs4 import BeautifulSoup

BASE = "https://books.toscrape.com/catalogue/page-{}.html"
products = []

for page in range(1, 6):                     # 5 صفحات
    url = BASE.format(page)
    resp = requests.get(url, timeout=10,
                        headers={"User-Agent": "PriceBot/1.0 (تعلّم)"})
    soup = BeautifulSoup(resp.text, "html.parser")

    for card in soup.select("article.product_pod"):
        name = card.h3.a["title"]
        price = card.select_one(".price_color").text.strip()
        products.append({"name": name, "price": price})

    time.sleep(2)                            # تأخير مؤدّب بين الصفحات

with open("products.csv", "w", newline="", encoding="utf-8-sig") as f:
    w = csv.DictWriter(f, fieldnames=["name", "price"])
    w.writeheader()
    w.writerows(products)

print(f"تم حفظ {len(products)} منتج في products.csv")

السطر soup.select("article.product_pod") بيقول: "هاتلي كل عنصر article كلاسه product_pod". وكل واحد منهم بنسحب منه العنوان من h3 > a والسعر من الكلاس price_color. لاحظ encoding="utf-8-sig": ده بيخلّي Excel يفتح العربي صح من غير ما يبوّظ الحروف.

السحب المؤدّب: قواعد متعدّيهاش

السكربت السريع جدًا بيتحوّل لهجوم على السيرفر. قبل ما تسحب أي موقع حقيقي:

  • اقرأ ملف robots.txt: افتح الموقع/robots.txt. لو المسار اللي عايزه مكتوب جنبه Disallow، متسحبهوش. ده معيار رسمي اسمه RFC 9309.
  • حط تأخير: سطر time.sleep(2) بيقلّل الضغط على السيرفر بشكل كبير. الـ trade-off هنا: بتكسب إنك مؤدّب ومش هتتحظر، بتخسر سرعة (5 صفحات بتاخد ~10 ثواني بدل أقل من ثانية).
  • دوّر على API رسمي الأول: لو الموقع بيوفّر API، استخدمه بدل الـ scraping من الأساس. أنضف وأثبت.

رقم حقيقي وسيناريو

الافتراض إن صفحاتك HTML ثابت (مش مبني بـ JavaScript بعد التحميل). على فرض إنك بتتابع كتالوج فيه 1000 منتج موزّعين على 50 صفحة: Beautiful Soup بتحلّل صفحة فيها 20 منتج في حوالي 30 إلى 50 ميلي ثانية، والوقت الأكبر بيروح في تحميل الصفحات نفسها ومعاه تأخير الـ 2 ثانية. يعني الـ 50 صفحة هتاخد حوالي دقيقة ونص بأمان، مقابل ساعة كاملة لو بتنقلهم بإيدك. المكسب: تحويل مهمة يومية تقيلة لسكربت بيشتغل لوحده.

متى لا تستخدم هذه الطريقة

الطريقة دي مش الحل في الحالات دي:

  • الموقع بيبني المحتوى بـ JavaScript بعد التحميل (زي كتير من المتاجر الحديثة). وقتها requests هترجّع صفحة فاضية، وهتحتاج أداة زي Playwright بتشغّل متصفح حقيقي.
  • شروط استخدام الموقع بتمنع السحب صراحةً. احترمها.
  • الموقع بيوفّر API رسمي. استخدمه، أوفرلك تعب وأثبت على المدى الطويل.

الخطوة التالية

انسخ الكود فوق، شغّله بـ python scraper.py، وافتح products.csv اللي هيتكوّن جنبه. بعد ما يشتغل، جرّب تغيّر الـ selector عشان تسحب تقييم كل كتاب كمان. لو طلعلك ملف فاضي، غالبًا الكلاس اللي اخترته غلط؛ افتح الصفحة في المتصفح، كليك يمين على المنتج ثم Inspect، وشوف اسم الكلاس الصح.

المصادر

  • توثيق مكتبة requests الرسمي: requests.readthedocs.io
  • توثيق Beautiful Soup الرسمي: crummy.com/software/BeautifulSoup/bs4/doc
  • معيار Robots Exclusion Protocol (RFC 9309): rfc-editor.org/rfc/rfc9309
  • موقع التدريب المخصّص للـ scraping: books.toscrape.com
  • توثيق وحدة csv في Python: docs.python.org/3/library/csv

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة