Scrapy
- Scrapy: دليل شامل للمبتدئين
Scrapy هو إطار عمل مفتوح المصدر مبني بلغة Python لكشط الويب. بمعنى آخر، هو أداة قوية تمكنك من استخراج البيانات من مواقع الويب بطريقة منظمة وفعالة. هذا الدليل مصمم للمبتدئين الذين يرغبون في تعلم كيفية استخدام Scrapy لبناء برامج كشط ويب (Web Crawlers) متطورة. سنتناول في هذا المقال المفاهيم الأساسية، التركيب، كيفية عمل Scrapy، بالإضافة إلى أمثلة عملية لمساعدتك على البدء. على الرغم من أن هذا المقال لا يرتبط مباشرة بالخيارات الثنائية، إلا أن فهم كيفية استخراج البيانات من الويب يمكن أن يكون مفيدًا في تحليل البيانات المتعلقة بالأسواق المالية، وبالتالي تحسين استراتيجيات التداول.
لماذا نستخدم Scrapy؟
قبل الغوص في التفاصيل التقنية، دعنا نفكر في سبب اختيار Scrapy على طرق كشط الويب الأخرى، مثل استخدام مكتبات بسيطة مثل Beautiful Soup و Requests. إليك بعض المزايا الرئيسية:
- **الكفاءة:** Scrapy مبني على أساس غير متزامن، مما يسمح له بالتعامل مع عدد كبير من الطلبات بشكل متزامن، مما يجعله أسرع بكثير من الحلول المتزامنة.
- **التنظيم:** يوفر Scrapy بنية منظمة لتطوير برامج كشط الويب، مما يجعل الكود أكثر قابلية للقراءة والصيانة.
- **التوسع:** يمكن توسيع Scrapy بسهولة باستخدام الإضافات (extensions) والوسطاء (middlewares) لإضافة وظائف إضافية.
- **دعم قوي:** يتمتع Scrapy بمجتمع نشط ووثائق شاملة، مما يسهل العثور على المساعدة وحل المشكلات.
- **التعامل مع البيانات:** يوفر Scrapy طرقًا قوية لتخزين البيانات التي تم كشطها في تنسيقات مختلفة، مثل JSON و CSV و XML.
المفاهيم الأساسية في Scrapy
لفهم كيفية عمل Scrapy، يجب أن تكون على دراية بالمفاهيم الأساسية التالية:
- **Spider (العنكبوت):** هو فئة Python التي تحدد كيفية كشط موقع ويب معين. يحدد العنكبوت عناوين URL التي يجب زيارتها، وكيفية استخراج البيانات من صفحات الويب، وكيفية اتباع الروابط للعثور على صفحات جديدة. يمكن تشبيهه بـ "الروبوت" الذي يتجول في الويب ويجمع البيانات.
- **Item (العنصر):** هو حاوية بسيطة تستخدم لتخزين البيانات التي تم كشطها من صفحة ويب. يتم تعريف العناصر كفئات Python، مع تحديد الحقول التي تحتوي على البيانات. مثال: عنصر يمكن أن يمثل مقالًا إخباريًا، مع حقول مثل العنوان، والمؤلف، والنص، وتاريخ النشر.
- **Pipeline (الخط):** هي سلسلة من العمليات التي يتم تطبيقها على العناصر التي تم كشطها. يمكن استخدام الخط لتنظيف البيانات، والتحقق من صحتها، وتخزينها في قاعدة بيانات، أو إرسالها عبر البريد الإلكتروني.
- **Middleware (الوسيط):** هي مكونات تتيح لك معالجة الطلبات والاستجابات أثناء عملية الكشط. يمكن استخدام الوسيط لإضافة رؤوس مخصصة، أو التعامل مع إعادة التوجيه، أو تخزين الاستجابات في ذاكرة التخزين المؤقت.
- **Scheduler (المجدول):** هو المسؤول عن جدولة الطلبات التي يجب إرسالها إلى موقع الويب. يضمن المجدول عدم إغراق موقع الويب بالطلبات، مما قد يؤدي إلى حظره.
- **Downloader (المحمل):** هو المسؤول عن إرسال الطلبات وتنزيل الاستجابات من موقع الويب.
- **Settings (الإعدادات):** هي ملف يحتوي على جميع الإعدادات التي يتحكم في سلوك Scrapy.
تركيب Scrapy
لتثبيت Scrapy، يمكنك استخدام pip، مدير الحزم الخاص بـ Python:
```bash pip install scrapy ```
تأكد من أن لديك Python مثبتًا على جهازك قبل محاولة التثبيت. يمكنك التحقق من إصدار Python الخاص بك باستخدام الأمر:
```bash python --version ```
إنشاء مشروع Scrapy
لبدء مشروع Scrapy جديد، استخدم الأمر `scrapy startproject`:
```bash scrapy startproject myproject ```
سيؤدي هذا إلى إنشاء دليل جديد باسم `myproject` يحتوي على البنية التالية:
``` myproject/
scrapy.cfg # ملف الإعدادات الخاص بـ Scrapy myproject/ # دليل المشروع __init__.py items.py # ملف تعريف العناصر middlewares.py # ملف تعريف الوسطاء pipelines.py # ملف تعريف الخطوط settings.py # ملف الإعدادات spiders/ # دليل العنكبوت __init__.py
```
كتابة العنكبوت الأول
الآن، دعنا نكتب عنكبوتًا بسيطًا لكشط موقع ويب. افتح ملف `myproject/spiders/my_spider.py` وأضف الكود التالي:
```python import scrapy
class MySpider(scrapy.Spider):
name = "myspider" allowed_domains = ["example.com"] start_urls = ["http://www.example.com"]
def parse(self, response): # استخراج البيانات من صفحة الويب title = response.css('title::text').get() yield { 'title': title, }
```
في هذا الكود:
- `name` هو اسم العنكبوت.
- `allowed_domains` هي قائمة بالنطاقات المسموح للعنكبوت بكشطها.
- `start_urls` هي قائمة بعناوين URL التي سيبدأ العنكبوت في كشطها.
- `parse` هي دالة يتم استدعاؤها لكل صفحة ويب يتم تنزيلها. تستقبل الدالة كائن `response` الذي يحتوي على محتوى صفحة الويب. تستخدم الدالة `response.css` لتحديد عناصر HTML باستخدام محددات CSS. `::text` يستخرج النص الموجود داخل العنصر المحدد. `get()` يعيد النص الأول الذي يتم العثور عليه.
- `yield` يستخدم لإرجاع عنصر يحتوي على البيانات التي تم كشطها.
تشغيل العنكبوت
لتشغيل العنكبوت، استخدم الأمر `scrapy crawl`:
```bash scrapy crawl myspider ```
سيؤدي هذا إلى بدء العنكبوت وكشط موقع `example.com`. سيتم عرض البيانات التي تم كشطها في وحدة التحكم.
تخزين البيانات
بدلاً من عرض البيانات في وحدة التحكم، يمكنك تخزينها في ملف أو قاعدة بيانات. لتخزين البيانات في ملف JSON، قم بتعديل ملف `settings.py` وأضف السطر التالي:
```python FEED_EXPORT = {
'myproject/data.json': 'json',
} ```
ثم قم بتشغيل العنكبوت مرة أخرى. سيتم الآن تخزين البيانات في ملف `data.json` في دليل المشروع.
استخدام الخطوط (Pipelines)
يمكن استخدام الخطوط لتنظيف البيانات، والتحقق من صحتها، وتخزينها في قاعدة بيانات. لإضافة خط، قم بتعديل ملف `pipelines.py` وأضف فئة جديدة:
```python class MyPipeline:
def process_item(self, item, spider): # تنظيف البيانات item['title'] = item['title'].strip() return item
```
ثم قم بتعديل ملف `settings.py` وأضف السطر التالي:
```python ITEM_PIPELINES = {
'myproject.pipelines.MyPipeline': 300,
} ```
سيؤدي هذا إلى تطبيق الخط `MyPipeline` على كل عنصر يتم كشطه.
التعامل مع الأخطاء
أثناء كشط الويب، قد تواجه أخطاء، مثل أخطاء الشبكة أو أخطاء تحليل HTML. يمكنك التعامل مع هذه الأخطاء باستخدام الوسطاء. لإضافة وسيط، قم بتعديل ملف `middlewares.py` وأضف فئة جديدة:
```python class MyMiddleware:
def process_exception(self, request, exception, spider): # تسجيل الخطأ print(f"Error: {exception}") # تجاهل الخطأ return None
```
ثم قم بتعديل ملف `settings.py` وأضف السطر التالي:
```python DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.MyMiddleware': 300,
} ```
سيؤدي هذا إلى تطبيق الوسيط `MyMiddleware` على كل استثناء يتم طرحه أثناء عملية الكشط.
اعتبارات قانونية وأخلاقية
من المهم أن تكون على دراية بالاعتبارات القانونية والأخلاقية عند كشط الويب. تأكد من أنك تلتزم بشروط خدمة موقع الويب الذي تقوم بكشطه. تجنب إغراق موقع الويب بالطلبات، واحترم ملف `robots.txt`. لا تكشط البيانات الشخصية دون موافقة.
Scrapy والخيارات الثنائية: تحليل البيانات
على الرغم من أن Scrapy ليس أداة مباشرة للتداول في الخيارات الثنائية، إلا أنه يمكن استخدامه لجمع البيانات التي يمكن أن تساعد في اتخاذ قرارات تداول مستنيرة. على سبيل المثال، يمكنك استخدام Scrapy لكشط:
- **أخبار السوق:** جمع الأخبار المتعلقة بالأصول التي تتداول فيها.
- **البيانات الاقتصادية:** جمع البيانات الاقتصادية التي قد تؤثر على أسعار الأصول.
- **تحليل المشاعر:** كشط وسائل التواصل الاجتماعي ومنتديات الإنترنت لتقييم معنويات السوق.
- **بيانات أسعار الأسهم/العملات:** الحصول على بيانات تاريخية وحالية لأسعار الأصول.
ثم يمكنك استخدام هذه البيانات لتحليل الاتجاهات، وتحديد الأنماط، وتطوير استراتيجيات تداول.
- استراتيجيات التداول ذات الصلة:**
- **استراتيجية الاختراق (Breakout Strategy):** تعتمد على كسر السعر لمستوى مقاومة أو دعم.
- **استراتيجية المتوسط المتحرك (Moving Average Strategy):** تستخدم المتوسطات المتحركة لتحديد اتجاه السوق.
- **استراتيجية مؤشر القوة النسبية (RSI Strategy):** تستخدم مؤشر القوة النسبية لتحديد مناطق ذروة الشراء والبيع.
- **استراتيجية بولينجر باند (Bollinger Bands Strategy):** تستخدم نطاقات بولينجر لتحديد التقلبات.
- **استراتيجية MACD (MACD Strategy):** تستخدم مؤشر MACD لتحديد اتجاه السوق وقوته.
- **استراتيجية Fibonacci Retracement (استراتيجية ارتداد فيبوناتشي):** تستخدم مستويات فيبوناتشي لتحديد نقاط الدخول والخروج المحتملة.
- **استراتيجية Price Action (استراتيجية حركة السعر):** تعتمد على تحليل أنماط الشموع اليابانية وحركة السعر.
- **استراتيجية News Trading (استراتيجية التداول الإخباري):** تعتمد على التداول بناءً على الأخبار الاقتصادية والسياسية.
- **استراتيجية Scalping (استراتيجية المضاربة السريعة):** تعتمد على إجراء صفقات صغيرة وسريعة لتحقيق أرباح صغيرة.
- **استراتيجية Hedging (استراتيجية التحوط):** تهدف إلى تقليل المخاطر.
- مؤشرات فنية:**
- **Moving Averages (المتوسطات المتحركة)**
- **RSI (مؤشر القوة النسبية)**
- **MACD (مؤشر تقارب وتباعد المتوسطات المتحركة)**
- **Bollinger Bands (نطاقات بولينجر)**
- **Fibonacci Retracements (ارتدادات فيبوناتشي)**
- تحليل حجم التداول:**
- **Volume (الحجم):** عدد الأسهم أو العقود المتداولة خلال فترة زمنية معينة.
- **On Balance Volume (OBV):** مؤشر يستخدم الحجم لتأكيد الاتجاهات.
- الاتجاهات:**
- **Uptrend (اتجاه صاعد)**
- **Downtrend (اتجاه هابط)**
- **Sideways Trend (اتجاه جانبي)**
- تحليل فني:**
- **Support and Resistance (الدعم والمقاومة)**
- **Chart Patterns (أنماط الرسوم البيانية)**
- **Candlestick Patterns (أنماط الشموع اليابانية)**
تذكر أن كشط الويب يجب أن يتم بطريقة مسؤولة وأخلاقية، وأن استخدام البيانات التي تم كشطها يجب أن يتماشى مع القوانين واللوائح المعمول بها.
الخلاصة
Scrapy هو إطار عمل قوي ومرن لكشط الويب. باستخدام Scrapy، يمكنك بناء برامج كشط ويب متطورة يمكنها استخراج البيانات من مواقع الويب بطريقة منظمة وفعالة. آمل أن يكون هذا الدليل قد قدم لك مقدمة جيدة لـ Scrapy وأن يساعدك على البدء في بناء برامج كشط الويب الخاصة بك. تذكر دائماً احترام شروط الخدمة الخاصة بمواقع الويب التي تقوم بكشطها.
ابدأ التداول الآن
سجّل في IQ Option (الحد الأدنى للإيداع 10 دولار) افتح حساباً في Pocket Option (الحد الأدنى للإيداع 5 دولار)
انضم إلى مجتمعنا
اشترك في قناة Telegram الخاصة بنا @strategybin لتصلك: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات اتجاهات السوق ✓ مواد تعليمية للمبتدئين