ما هو Scrapy ولماذا تحتاجه
Scrapy هو إطار عمل غير متزامن وقوي لتجريف الويب بلغة بايثون، يوفر أداءً عاليًا وقابلية للتوسع في جمع البيانات من مواقع الويب. تتيح لك هذه الأداة أتمتة عملية استخراج المعلومات المنظمة من صفحات الويب، مما يجعلها لا غنى عنها لتحليل البيانات، ومراقبة الأسعار، وتجميع الأخبار، والعديد من المهام الأخرى.
الميزات الرئيسية ومزايا Scrapy
الهندسة غير المتزامنة
تم بناء Scrapy على مكتبة Twisted، مما يوفر معالجة غير متزامنة للطلبات وأداءً عاليًا عند العمل مع عدد كبير من صفحات الويب. يتيح ذلك معالجة العديد من الطلبات في وقت واحد دون حظر تنفيذ البرنامج.
مرونة استخراج البيانات
يدعم الإطار طرقًا مختلفة لاستخراج البيانات:
- محددات CSS لاختيار العناصر بسهولة
- محددات XPath للاستعلامات الأكثر تعقيدًا
- التعبيرات العادية لاستخراج البيانات بدقة
- دعم تنسيقات JSON و XML
قابلية التوسع والأداء
صُمم Scrapy للعمل مع مشاريع من أي حجم - من البرامج النصية الصغيرة إلى الحلول الصناعية الكبيرة. تضمن آليات التخزين المؤقت المدمجة والمعالجة المتوازية وإدارة الذاكرة أداءً مستقرًا حتى عند معالجة ملايين الصفحات.
قابلية التوسع عبر middleware
يتيح نظام middleware توسيع وظائف الإطار بسهولة، عن طريق إضافة منطق مخصص لمعالجة الطلبات والاستجابات، وإدارة الرؤوس، والعمل مع خوادم الوكيل، وغير ذلك الكثير.
تثبيت وتهيئة Scrapy
تثبيت الإطار
pip install scrapy
للعمل مع تنسيقات بيانات إضافية، يُوصى بتثبيت حزم إضافية:
pip install scrapy[all]
إنشاء مشروع جديد
scrapy startproject myproject
cd myproject
إنشاء عنكبوت
scrapy genspider example example.com
هيكل مشروع Scrapy
بعد إنشاء المشروع، يتكون هيكل الدليل التالي:
myproject/
├── myproject/
│ ├── __init__.py
│ ├── items.py # تعريف هيكل البيانات
│ ├── middlewares.py # Middleware لمعالجة الطلبات/الاستجابات
│ ├── pipelines.py # معالجة وحفظ البيانات
│ ├── settings.py # إعدادات المشروع
│ └── spiders/ # دليل العناكب
│ ├── __init__.py
│ └── example.py
└── scrapy.cfg # ملف إعدادات المشروع
وظائف الملفات الرئيسية
- spiders/ - يحتوي على منطق التجريف واستخراج البيانات
- items.py - يحدد هيكل البيانات المستخرجة
- pipelines.py - يعالج ويحفظ البيانات المستخرجة
- middlewares.py - يضبط معالجة الطلبات والاستجابات
- settings.py - يحتوي على جميع إعدادات المشروع
إنشاء وتهيئة العنكبوت
عنكبوت أساسي
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["example.com"]
start_urls = ["https://example.com"]
def parse(self, response):
# استخراج البيانات
title = response.css('title::text').get()
# إرجاع البيانات
yield {
'title': title,
'url': response.url,
'status': response.status
}
عنكبوت متقدم مع التنقل
import scrapy
class AdvancedSpider(scrapy.Spider):
name = "advanced"
start_urls = ["ht