28 KiB
دليل Scrapy العربي
هذا المستودع هو المصدر البرمجي لإطار Scrapy، وهو إطار عمل مرتفع المستوى مكتوب بلغة Python لبناء الزواحف التي تزور صفحات الويب وتستخرج منها بيانات منظَّمة. صُمم Scrapy أساسًا للاستخلاص من الويب، لكنه يصلح أيضًا لاستهلاك بعض واجهات البرمجة وبناء زواحف عامة لجمع البيانات والمراقبة والأرشفة والاختبارات الآلية [1].
لا يُعد Scrapy قاعدة بيانات أو خدمة استضافة بحد ذاته؛ فهو ينفذ دورة الزحف والاستخراج، بينما تحدد أنت طريقة التخزين أو التصدير أو التكامل مع خدمة خارجية. يعمل بأسلوب غير حاجب يعتمد على Twisted، ولذلك يستطيع تنفيذ عدة طلبات وفق إعدادات التزامن والتهذيب [2].
ما الذي ستحققه؟
بعد اتباع هذا الدليل ستتمكن من إنشاء بيئة افتراضية، تثبيت نسخة المستودع محليًا، إنشاء مشروع Scrapy، كتابة عنكبوت صغير، تشغيله، وحفظ الناتج في ملف JSON Lines. لا يحتاج هذا المسار الأول إلى مفتاح API أو كلمة مرور أو حساب خدمة؛ الاعتماديات الخارجية لا تصبح مطلوبة إلا عند اختيار تكامل اختياري مثل S3 أو Google Cloud Storage أو FTP أو وكيل محمي.
المتطلبات
| المتطلب | الحالة | التفاصيل |
|---|---|---|
| Python | مطلوب | الإصدار 3.10 أو أحدث. يدعم المشروع CPython وPyPy وفق دليل التثبيت الرسمي [3]. |
| Git | مطلوب للمساهمين | مطلوب لاستنساخ المستودع والعمل على فروعه. |
| بيئة افتراضية | موصى بها بشدة | تمنع تعارض Scrapy واعتمادياته مع حزم Python النظامية [3]. |
| اتصال بالإنترنت | مطلوب | يحتاج pip إلى الوصول إلى فهرس الحزم، ويحتاج العنكبوت إلى الوصول إلى الموقع المستهدف. |
| أدوات بناء النظام | حسب المنصة | قد تحتاج Linux إلى حزم تطوير، وقد تحتاج Windows إلى Microsoft C++ Build Tools، وقد تحتاج macOS إلى Xcode Command Line Tools [3]. |
| أسرار أو مفاتيح API | غير مطلوبة للمسار الأول | أضف بيانات الاعتماد فقط عند تفعيل تكامل يحتاجها، ولا تضعها في Git. |
خريطة المستودع
هذا المستودع هو مصدر Scrapy نفسه، وليس مشروع زحف جاهزًا لموقع واحد. لذلك ستجد فيه نواة الإطار، التوثيق، الاختبارات، وقوالب المشاريع التي ينشئها أمر startproject.
| المسار | الدور |
|---|---|
| scrapy/ | الحزمة البرمجية الأساسية، وتشمل المحرك، المجدول، المنزّل، العناكب، الطلبات والاستجابات، المحددات، خطوط المعالجة، الوسطاء، الإضافات، وإدارة الإعدادات. |
| scrapy/cmdline.py | نقطة التنفيذ الفعلية لأداة سطر الأوامر scrapy. |
| scrapy/__main__.py | يتيح تشغيل الأداة بصيغة python -m scrapy. |
| scrapy/VERSION | مصدر رقم الإصدار الذي يقرأه نظام البناء. |
| scrapy/templates/ | قوالب المشاريع والعناكب التي تستخدمها أوامر الإنشاء. |
| tests/ | اختبارات الوحدة والتكامل والسلوك، ومنها اختبارات أوامر CLI ومحرك الزحف. |
| docs/ | التوثيق المحلي بصيغة reStructuredText، ويحتوي دليل التثبيت والبرنامج التعليمي ومرجع الأوامر. |
| pyproject.toml | تعريف الحزمة، إصدار Python المطلوب، الاعتماديات، الإضافات الاختيارية، نقطة الدخول، وإعدادات الأدوات. |
| tox.ini | بيئات الاختبار والتحقق الآلي للمساهمين. |
| .github/workflows/ | سير عمل GitHub Actions للاختبارات والنشر والتحقق على المنصات المختلفة. |
| SECURITY.md | الإصدارات المدعومة وطريقة الإبلاغ عن الثغرات. |
التثبيت من نسخة المستودع
Linux وmacOS
نفّذ الأوامر التالية في الطرفية. يبدأ المسار بالانتقال إلى مجلد العمل حتى لا تُنشأ البيئة الافتراضية في مكان غير مقصود.
System Message: WARNING/2 (<stdin>, line 131)
Cannot analyze code. Pygments package not found.
.. code-block:: bash git clone https://github.com/ysrg2003/scrapy.git cd scrapy python3 -m venv .venv . .venv/bin/activate python -m pip install --upgrade pip python -m pip install -e .
يُثبت الخيار -e . نسخة تحريرية من المستودع؛ أي إن تعديلاتك على ملفات المصدر تنعكس في البيئة دون إعادة تثبيت الحزمة في كل مرة. أما إن أردت استخدام Scrapy كمستخدم عادي خارج هذا المستودع فاستخدم الأمر التالي داخل بيئة افتراضية، وهو المسار الذي يوصي به الدليل الرسمي [3].
System Message: WARNING/2 (<stdin>, line 145)
Cannot analyze code. Pygments package not found.
.. code-block:: bash python -m pip install Scrapy
تحقق من التثبيت بالأمر:
System Message: WARNING/2 (<stdin>, line 151)
Cannot analyze code. Pygments package not found.
.. code-block:: bash scrapy version -v
يجب أن يظهر سطر يبدأ بـ Scrapy ويعرض الإصدار ومعلومات الاعتماديات. إذا ظهر command not found فتحقق من تفعيل البيئة عبر which python و which scrapy، ثم نفّذ . .venv/bin/activate من جذر المستودع.
Ubuntu أو Debian عند فشل بناء الاعتماديات
تحتوي النسخ الحديثة من Python غالبًا على عجلات ثنائية جاهزة، لكن بعض الأنظمة قد تحتاج إلى أدوات التطوير الخاصة بـ lxml وcryptography [3]. عند ظهور أخطاء ترجمة أو غياب ملفات مثل libxml/xmlversion.h أو openssl/ssl.h، نفّذ ما يلي خارج البيئة الافتراضية:
System Message: WARNING/2 (<stdin>, line 167)
Cannot analyze code. Pygments package not found.
.. code-block:: bash sudo apt-get update sudo apt-get install -y python3 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
ثم من جذر المستودع فعّل البيئة وأعد التثبيت:
System Message: WARNING/2 (<stdin>, line 174)
Cannot analyze code. Pygments package not found.
.. code-block:: bash . .venv/bin/activate python -m pip install -e .
إذا استمر الفشل، احتفظ برسالة الخطأ كاملة؛ لا تستبدل هذه الحزم بحزمة Ubuntu القديمة python-scrapy لأن التوثيق الرسمي يحذر من أنها قد تكون أقدم من الإصدار الحالي [3].
Windows PowerShell
يوصي دليل Scrapy باستخدام Anaconda أو Miniconda على Windows لتقليل مشكلات بناء الاعتماديات [3].
System Message: WARNING/2 (<stdin>, line 189)
Cannot analyze code. Pygments package not found.
.. code-block:: powershell conda create -n scrapy-env python=3.12 conda activate scrapy-env conda install -c conda-forge scrapy
إذا كنت تعمل على نسخة المصدر نفسها وتريد تثبيتها تحريريًا، استخدم PowerShell من جذر المستودع:
System Message: WARNING/2 (<stdin>, line 198)
Cannot analyze code. Pygments package not found.
.. code-block:: powershell py -3.12 -m venv .venv .\\.venv\\Scripts\\Activate.ps1 python -m pip install --upgrade pip python -m pip install -e .
قد يتطلب مسار pip على Windows تثبيت Microsoft C++ Build Tools مع مكونات MSVC وWindows SDK [3]. إذا رفض PowerShell تشغيل Activate.ps1 بسبب سياسة التنفيذ، استخدم جلسة PowerShell مناسبة أو فعّل البيئة من cmd.exe عبر .venv\\Scripts\\activate.bat.
PyPy وConda
يمكن تثبيت الحزمة من قناة conda-forge بالأمر التالي:
System Message: WARNING/2 (<stdin>, line 215)
Cannot analyze code. Pygments package not found.
.. code-block:: bash conda install -c conda-forge scrapy
أما PyPy فقد يبني بعض الاعتماديات من المصدر بدل استخدام عجلات CPython، ولذلك قد يحتاج إلى أدوات بناء إضافية. بعد التثبيت يمكن استخدام scrapy bench كفحص سريع لسلامة التشغيل [3].
أول تشغيل: إنشاء مشروع وعنكبوت
نفّذ هذا القسم داخل مجلد عمل منفصل عن جذر مستودع Scrapy، حتى لا تخلط بين مصدر الإطار ومشروع الزحف الذي ستنشئه.
الخطوة الأولى: إنشاء مشروع
System Message: WARNING/2 (<stdin>, line 232)
Cannot analyze code. Pygments package not found.
.. code-block:: bash mkdir -p ~/scrapy-work cd ~/scrapy-work scrapy startproject quotes_project cd quotes_project
ينشئ الأمر مجلد quotes_project وملف scrapy.cfg وحزمة Python تحتوي على items.py و``middlewares.py`` و``pipelines.py`` و``settings.py`` ومجلد spiders/ [4]. تحقق من البنية:
System Message: WARNING/2 (<stdin>, line 243)
Cannot analyze code. Pygments package not found.
.. code-block:: bash find . -maxdepth 3 -type f | sort
ينبغي أن ترى على الأقل:
scrapy.cfg quotes_project/__init__.py quotes_project/items.py quotes_project/middlewares.py quotes_project/pipelines.py quotes_project/settings.py quotes_project/spiders/__init__.py
إذا قال Scrapy إن المجلد موجود أو إن المشروع غير صالح، انتقل إلى ~/scrapy-work وتأكد من اسم مجلد جديد.
الخطوة الثانية: كتابة العنكبوت
أنشئ الملف quotes_project/spiders/quotes.py بالمحتوى التالي:
System Message: WARNING/2 (<stdin>, line 267)
Cannot analyze code. Pygments package not found.
.. code-block:: python
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ["https://quotes.toscrape.com/tag/humor/"]
def parse(self, response):
for quote in response.css("div.quote"):
yield {
"author": quote.css("small.author::text").get(),
"text": quote.css("span.text::text").get(),
}
next_page = response.css('li.next a::attr("href")').get()
if next_page is not None:
yield response.follow(next_page, callback=self.parse)
يعرّف name الاسم الذي سيستعمله أمر crawl، وتحدد start_urls الطلبات الأولى، ويستخرج parse البيانات بمحددات CSS، ثم يتبع رابط الصفحة التالية باستخدام response.follow. عند عدم العثور على عنصر، يعيد .get() القيمة None بدل كسر العنكبوت بفهرس غير موجود [1] [4].
الخطوة الثالثة: فحص العنكبوت
System Message: WARNING/2 (<stdin>, line 295)
Cannot analyze code. Pygments package not found.
.. code-block:: bash scrapy list scrapy check quotes
ينبغي أن يعرض scrapy list الاسم quotes. إذا لم يظهر العنكبوت، تحقق من أن الملف داخل quotes_project/spiders/ وأنه يحتوي على فئة ترث من scrapy.Spider وتملك قيمة name فريدة.
الخطوة الرابعة: تشغيل الزحف وحفظ الناتج
لإنشاء ملف جديد أو استبدال ملف موجود، استخدم -O:
System Message: WARNING/2 (<stdin>, line 309)
Cannot analyze code. Pygments package not found.
.. code-block:: bash scrapy crawl quotes -O quotes.jsonl
ولإضافة العناصر إلى ملف موجود، استخدم -o:
System Message: WARNING/2 (<stdin>, line 315)
Cannot analyze code. Pygments package not found.
.. code-block:: bash scrapy crawl quotes -o quotes.jsonl
يعني -O الاستبدال، بينما يعني -o الإضافة. وعند التشغيل المتكرر يفضل استخدام JSON Lines بامتداد .jsonl؛ فإضافة سجلات إلى ملف JSON تقليدي قد تجعله غير صالح نحويًا [4]. يجب أن ينتهي التشغيل برسالة إغلاق للعنكبوت وأن ينشأ ملف quotes.jsonl، بحيث يكون كل سطر كائن JSON مستقلًا.
استخدام Scrapy Shell
قبل تعديل العنكبوت، جرّب المحددات في الصدفة التفاعلية:
System Message: WARNING/2 (<stdin>, line 329)
Cannot analyze code. Pygments package not found.
.. code-block:: bash scrapy shell "https://quotes.toscrape.com/page/1/"
داخل الصدفة:
System Message: WARNING/2 (<stdin>, line 335)
Cannot analyze code. Pygments package not found.
.. code-block:: python
response.css("title::text").get()
response.css("div.quote span.text::text").getall()
response.xpath("//small[@class='author']/text()").getall()
يستخدم Scrapy محددات CSS وXPath، ويُرجع .getall() قائمة النتائج، بينما يعيد .get() أول نتيجة أو None عند عدم وجودها [4]. إذا أعاد المحدد قائمة فارغة، فالمشكلة غالبًا في تغير HTML أو في أن المحتوى يُحمّل بواسطة JavaScript بعد وصول HTML الأول. افحص الاستجابة الخام، وجرب XPath، ثم راجع دليل التعامل مع المحتوى الديناميكي.
خريطة دورة التنفيذ
تتحكم الآلة التنفيذية في تدفق الزحف. تحصل على الطلبات الابتدائية من العنكبوت، وتضعها في المجدول، ثم تمررها إلى المنزّل عبر Downloader Middleware. يعيد المنزّل استجابة تمر مرة أخرى عبر الوسيط إلى الآلة، التي تسلمها إلى العنكبوت عبر Spider Middleware. ينتج العنكبوت عناصر وطلبات جديدة؛ تذهب العناصر إلى Item Pipeline وتعود الطلبات إلى المجدول حتى تنتهي قائمة العمل [2].
| المكوّن | المسؤولية |
|---|---|
| Engine | تنسيق تدفق البيانات وتشغيل المكونات وإطلاق الأحداث. |
| Scheduler | ترتيب الطلبات التي ستنفذ وتغذية الآلة بالطلب التالي. |
| Downloader | جلب الصفحات وإنشاء كائنات Response. |
| Spider | تفسير الاستجابات وإنتاج العناصر والطلبات الجديدة. |
| Downloader Middleware | تعديل الطلب قبل الإرسال أو الاستجابة بعد التنزيل، أو إسقاط الطلب، أو إرجاع استجابة بديلة. |
| Spider Middleware | معالجة مدخلات ومخرجات العنكبوت ومعالجة بعض الاستثناءات. |
| Item Pipeline | تنظيف العناصر والتحقق منها وتخزينها أو تمريرها إلى مكونات لاحقة. |
| Feed Export | تصدير العناصر إلى JSON أو JSON Lines أو CSV أو XML أو مخازن مدعومة. |
أوامر CLI المهمة
تبحث أداة scrapy عن scrapy.cfg في مسارات النظام والمستخدم وجذر المشروع، وتمنح إعدادات المشروع أولوية أعلى من الإعدادات العامة. وتدعم متغيرات بيئية لتحديد وحدة الإعدادات أو المشروع أو غلاف Python [5].
| الأمر | يحتاج مشروعًا؟ | الاستخدام |
|---|---|---|
| scrapy startproject NAME | لا | إنشاء هيكل مشروع جديد. |
| scrapy genspider NAME DOMAIN | لا | توليد عنكبوت من قالب. |
| scrapy crawl SPIDER | نعم | تشغيل عنكبوت مسجل في المشروع. |
| scrapy runspider FILE.py | لا | تشغيل ملف عنكبوت مستقل دون مشروع. |
| scrapy list | نعم | عرض أسماء العناكب المكتشفة. |
| scrapy check SPIDER | نعم | تنفيذ اختبارات العقود. |
| scrapy shell URL | لا | تجربة الطلبات والمحددات تفاعليًا. |
| scrapy fetch URL | لا | جلب رابط بالطريقة التي يستخدمها Scrapy. |
| scrapy settings --get NAME | حسب الإعداد | قراءة قيمة إعداد. |
| scrapy bench | لا | قياس أداء سريع محلي. |
| scrapy version -v | لا | عرض إصدار Scrapy والاعتماديات والمنصة. |
يمكن تشغيل الأداة أيضًا بصيغة:
System Message: WARNING/2 (<stdin>, line 430)
Cannot analyze code. Pygments package not found.
.. code-block:: bash python -m scrapy version -v
إعدادات المشروع والبيئة
يحتوي scrapy.cfg الذي ينشئه startproject عادةً على اسم وحدة الإعدادات:
System Message: WARNING/2 (<stdin>, line 440)
Cannot analyze code. Pygments package not found.
.. code-block:: ini [settings] default = quotes_project.settings
ولا ينبغي وضع كلمات المرور أو مفاتيح API داخل هذا الملف. هذه المتغيرات العامة مرتبطة باكتشاف المشروع:
| المتغير | النوع | الأثر والمثال |
|---|---|---|
| SCRAPY_SETTINGS_MODULE | اسم وحدة Python | يحدد وحدة الإعدادات، مثل quotes_project.settings. |
| SCRAPY_PROJECT | اسم مستعار | يختار مشروعًا غير default عندما يحتوي scrapy.cfg على أكثر من وحدة إعدادات. |
| SCRAPY_PYTHON_SHELL | اسم غلاف | يحدد الغلاف التفاعلي المفضل عند توفره، مثل python. |
هذه ليست أسرارًا بحد ذاتها، لكنها قد تشير إلى ملفات إعدادات تحتوي بيانات حساسة؛ احتفظ بالأسرار في مدير أسرار أو ملف محلي مستبعد من Git، ولا تطبع قيمها في السجلات.
الاعتماديات والإضافات الاختيارية
يعرّف pyproject.toml الاعتماديات الأساسية مثل Twisted وlxml وparsel و w3lib وcryptography وpyOpenSSL، كما يعرّف إضافات تثبت مكونات اختيارية عند الحاجة [6]. لا تثبت كل الإضافات دون سبب؛ اختر فقط ما يطابق ميزة ستستخدمها.
| الإضافة | الميزة |
|---|---|
| bpython | غلاف Bpython. |
| gcs | Google Cloud Storage لتصدير الملفات وخطوط الوسائط. |
| httpx | معالج HTTPX مع HTTP/2 ودعم SOCKS. |
| images | خط معالجة الصور. |
| ipython | غلاف IPython. |
| ptpython | غلاف ptpython. |
| robotparser | محلل robots.txt بديل. |
| s3 | تخزين Amazon S3 للتصدير والوسائط والتنزيلات. |
| twisted-http2 | دعم HTTP/2 عبر Twisted. |
| uvloop | حلقة أحداث uvloop في الأنظمة المدعومة. |
| zstd | فك ضغط استجابات Zstandard. |
مثال تثبيت ميزتين فقط:
System Message: WARNING/2 (<stdin>, line 508)
Cannot analyze code. Pygments package not found.
.. code-block:: bash python -m pip install -e '.[s3,images]'
تثبيت s3 لا يمنحك حساب AWS ولا ينشئ صلاحياته؛ ستظل بحاجة إلى إعداد اعتماديات AWS وفق بيئتك، ويجب عدم وضع المفاتيح في المستودع. وبالمثل، اختيار gcs أو httpx لا يعني أن التكامل سيعمل دون إعداد الخدمة أو الشبكة المطلوبة.
التطوير والاختبار
للتطوير من المصدر استخدم التثبيت التحريري داخل .venv كما في قسم التثبيت. يعرّف المستودع اعتماديات الاختبار وبيئاتها في tox.ini، ويُستخدم tox لتشغيل مصفوفة التحقق التي تشمل Python وmypy وpylint والتوثيق واختبارات الوحدات [7].
للفحص السريع بعد تثبيت اعتماديات الاختبار الأساسية:
System Message: WARNING/2 (<stdin>, line 527)
Cannot analyze code. Pygments package not found.
.. code-block:: bash python -m pip install pytest pytest-cov pytest-twisted python -m pytest -q tests/test_command_version.py tests/test_command_startproject.py
ولتشغيل بيئة Python 3.12 المعرفة في إعدادات tox.ini:
System Message: WARNING/2 (<stdin>, line 534)
Cannot analyze code. Pygments package not found.
.. code-block:: bash python -m pip install tox tox -e py312
يتطلب المسار الكامل أن تكون نسخة Python المطلوبة والأدوات التي يثبتها tox متاحة. إذا أردت اختبار التغيير في أمر واحد، ابدأ بالاختبار المقابل له بدل تشغيل كامل المصفوفة.
الأمان والامتثال التشغيلي
يستطيع Scrapy إرسال رؤوس HTTP وبيانات اعتماد وطلبات عبر بروكسيات أو خدمات تخزين؛ لذلك يجب اعتبار أي قيمة مثل كلمة مرور HTTP أو بيانات FTP أو مفاتيح S3 أو رموز الجلسة سرية. ضعها في متغيرات البيئة أو مدير أسرار أو إعدادات محلية مستبعدة من Git، وتحقق من أن السجل لا يطبع رؤوس Authorization أو عناوين تحتوي اسم مستخدم وكلمة مرور. لا تضع مفاتيح حقيقية في الأمثلة أو الاختبارات أو Issues.
احترم شروط استخدام الموقع وسياسة robots.txt ومعدلات الطلب المناسبة، ولا تجمع بيانات شخصية أو محمية إلا إذا كان لديك أساس مشروع وصلاحية واضحة. استخدم DOWNLOAD_DELAY أو حدود التزامن وAutoThrottle عند ملاءمة ذلك، واختبر أولًا على موقع تملكه أو على موقع التدريب المستخدم في الأمثلة. هذا الدليل يشرح تشغيل الإطار ولا يمنح إذنًا للوصول إلى أي موقع.
وفق SECURITY.md، الإصدار المدعوم في هذا المستودع هو فرع 2.17.x، ويجب إرسال بلاغات الثغرات عبر نموذج GitHub Security Advisory بدل نشر تفاصيل الثغرة علنًا [8].
استكشاف الأخطاء
| العرض | السبب المرجح | الإجراء |
|---|---|---|
| scrapy: command not found | البيئة الافتراضية غير مفعلة أو لم يثبت المشروع. | نفّذ . .venv/bin/activate ثم python -m pip install -e .، وتحقق من which scrapy. |
| فشل بناء lxml أو cryptography | غياب حزم التطوير أو المترجم. | طبّق حزم Ubuntu المذكورة في قسم التثبيت، أو استخدم Conda، أو ثبّت أدوات البناء المناسبة [3]. |
| No active project عند crawl | التنفيذ خارج مجلد يحتوي scrapy.cfg. | انتقل إلى جذر مشروع الزحف، أو استخدم scrapy runspider path/to/spider.py للملف المستقل. |
| لا يظهر العنكبوت في scrapy list | مسار الملف أو اسم الفئة أو الوراثة غير صحيح. | ضع الملف تحت PROJECT/spiders/، واجعل الفئة ترث من scrapy.Spider وتملك name فريدًا. |
| الناتج فارغ | المحدد لا يطابق HTML، أو المحتوى ديناميكي، أو الاستجابة غير ناجحة. | افحص scrapy shell و``response.status`` و``response.text`` ثم عدّل CSS/XPath. |
| إضافة -o إلى JSON أفسدت الملف | الإضافة إلى JSON تقليدي قد تنتج أكثر من قيمة JSON متجاورة. | استخدم -O للاستبدال، أو استخدم JSON Lines بامتداد .jsonl مع -o [4]. |
| خطأ OP_NO_TLSv1_1 | عدم توافق إصدار Twisted مع pyOpenSSL. | أعد تثبيت Twisted مع إضافة TLS: python -m pip install 'Twisted[tls]' [3]. |
| يفشل الطلب رغم نجاح المتصفح | الموقع يتطلب JavaScript أو جلسة أو رؤوسًا أو يحظر المعدل. | افحص الاستجابة الخام، خفّض معدل الطلب، وأضف المعالجة اللازمة دون تجاوز ضوابط الموقع أو شروطه. |
تنظيف البيئة وإعادة الضبط
لإيقاف البيئة الافتراضية نفّذ:
System Message: WARNING/2 (<stdin>, line 605)
Cannot analyze code. Pygments package not found.
.. code-block:: bash deactivate
لحذف البيئة والملفات الناتجة محليًا من مشروع الزحف، تحقق من المسار أولًا ثم نفّذ:
System Message: WARNING/2 (<stdin>, line 612)
Cannot analyze code. Pygments package not found.
.. code-block:: bash rm -rf .venv rm -f quotes.json quotes.jsonl
لا تنفذ أمر الحذف إذا لم تكن داخل المجلد الصحيح. أما في مستودع Scrapy نفسه، فاحذف فقط ملفات البناء أو البيئات التي أنشأتها أنت، ولا تحذف scrapy/ أو tests/ أو docs/.
المراجع
| [1] | (1, 2) Scrapy at a glance. |
| [2] | (1, 2) Scrapy architecture overview. |
| [3] | (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) Scrapy installation guide. |
| [4] | (1, 2, 3, 4, 5) Scrapy tutorial. |
| [5] | Scrapy command line tool. |
| [6] | Repository pyproject.toml. |
| [7] | Repository tox.ini. |
| [8] | Repository security policy. |
Scrapy هو إطار لاستخلاص البيانات من الويب، وهو متعدد المنصات ويتطلب Python 3.10 أو أحدث. تتم صيانته بواسطة Zyte والعديد من المساهمين. للتثبيت المباشر خارج نسخة المصدر:
System Message: WARNING/2 (<stdin>, line 638)
Cannot analyze code. Pygments package not found.
.. code-block:: bash pip install scrapy
للمساهمة في المشروع، راجع دليل المساهمة.