مكتبة الزحف polite-fetch من Bayanat Labs
polite-fetch مكتبة بايثون تفرض سياسة الزاحف BayanatLabs-OpenData، الذي يجلب الملفات والصفحات لمجموعات البيانات المفتوحة والدراسات التي تنشرها Bayanat Labs. فقبل أن تطلب أي صفحة تقرأ ملف robots.txt كما يصفه المعيار RFC 9309، وتسجّل لكل عنوان URL الإشارات التي يقدّمها الموقع (منع زواحف ذكاء اصطناعي مسمّاة، وحجز الحقوق عبر TDMRep، وContent-Signal، وContent-Usage من IETF، وnoai في X-Robots-Tag أو وسم meta، وسطور الترخيص وفق RSL) مع قرار واحد: جلب، أو فهرسة فقط، أو تخطٍّ، أو توقف. والإشارة الأكثر تقييدًا هي التي تحسم القرار، وتُكتب القاعدة التي أفضت إليه في سجل الإشارات. ويرسل كل عامل طلبًا واحدًا على الأكثر كل 3 ثوانٍ إلى المضيف الواحد، ويحترم Retry-After، ويتوقف عند رفض الوصول أو صفحة تسجيل الدخول أو تحدٍّ لكشف الروبوتات أو صفحة CAPTCHA دون أن يحاول تجاوزها. وكل عبارة عن سلوك الزاحف في صفحة الزاحف مربوطة بالاختبارات التي تتحقق منها: 634 اختبار مطابقة ناجحة كلها، على خادم اختبار محلي فيه 80 سيناريو. والسياسة منشورة أيضًا في ملف crawler.json.
| الترخيص | Apache-2.0 للشيفرة، وCC BY 4.0 للتوثيق، وCC0 1.0 لسياسة الزاحف، وMIT لأسماء زواحف الذكاء الاصطناعي المرفقة من ai.robots.txt |
|---|---|
| الإصدار | v0.1.0 · المكتبة v0.1.0 مع سياسة الزاحف 1.0.0، موسومة على GitHub، وغير موجودة على PyPI بعد. |
| تاريخ النشر | |
| آخر تحديث | |
| لمن هذا الإصدار | المهندسون الذين يبنون مجموعات بيانات من الويب ويريدون زاحفًا يتبع robots.txt وإشارات الانسحاب من استخدامات الذكاء الاصطناعي، ويسجّل كل قرار مع قاعدته، ويتوقف حين يرفض الموقع الوصول؛ وأصحاب المواقع الذين يريدون معرفة كيف يتعامل الزاحف BayanatLabs-OpenData مع إشاراتهم. |
| المستوى | متوسط |
أرقام رئيسية
تُحسب آليًا من الملفات المنشورة. يُقرأ كل رقم من ملف docs/conformance/summary.json أو policy/crawler.json في المستودع عند الوسم v0.1.0، ويُربط ببصمة SHA-256 للملف. ويُقدَّم ملف crawler.json نفسه على العنوان bayanatlabs.com/open/crawler.json.
التنزيل والمعرّفات
| المكان | المحتوى |
|---|---|
| GitHub | الشيفرة واختبارات المطابقة على GitHub |
| bayanatlabs.com | صفحة الزاحف |
| bayanatlabs.com | سياسة الزاحف (crawler.json) |
| GitHub | تقرير المطابقة |
| GitHub | كل عبارة في صفحة الزاحف والاختبارات التي تتحقق منها |
| GitHub | مخطط سجل الإشارات |
ابدأ الاستخدام
ثبّت المكتبة من GitHub عند وسم الإصدار v0.1.0، فالحزمة غير موجودة على PyPI بعد. ويعطي الأمر check القرار لعنوان URL من robots.txt وtdmrep.json دون طلب الصفحة.
pip install "git+https://github.com/Bayanat-Labs/polite-fetch@v0.1.0"
polite-fetch check https://example.org/page --purpose training_release
polite-fetch fetch https://example.org/page --headers-only --ledger signals.jsonl
from bayanatlabs_polite_fetch import Fetcher
with Fetcher(worker_id="worker-1", ledger="signals.jsonl") as f:
r = f.fetch("https://example.org/page", purpose="training_release")
print(r.decision, r.decision_reason)
ما الذي يتضمنه الإصدار
| الجزء | الترخيص | ضمن الإصدار |
|---|---|---|
| مكتبة بايثون وأداة سطر الأوامر (bayanatlabs_polite_fetch) لـ Python 3.10 أو أحدث، مع اعتمادية تشغيل واحدة (httpx) | Apache-2.0 | نعم |
| خادم الاختبار المحلي واختبارات المطابقة | Apache-2.0 | نعم |
| سياسة الزاحف 1.0.0 (policy/crawler-policy.yaml وملف crawler.json المولَّد منه) | CC0 1.0 | نعم |
| التوثيق: ملف README بالإنجليزية والعربية، ونص صفحة الزاحف، وتقرير المطابقة، وجدول التتبّع، ومخطط سجل الإشارات | CC BY 4.0 | نعم |
| أسماء زواحف الذكاء الاصطناعي من ملف robots.json في مشروع ai.robots.txt، مثبّتة على إيداع واحد | MIT | نعم |
صيغة النسبة: polite-fetch by Bayanat Labs. https://github.com/Bayanat-Labs/polite-fetch
الاستخدامات المقصودة
- جلب الصفحات والملفات لمجموعة بيانات وفق سياسة زحف ثابتة ومنشورة، مع تسجيل القرار وقاعدته لكل عنوان URL.
- معرفة القرار الذي سيتخذه الزاحف لعنوان URL (مجموعة robots.txt، ومنع زواحف الذكاء الاصطناعي، وTDMRep، وContent-Signal، وContent-Usage) قبل طلب الصفحة.
- إعادة استخدام خادم الاختبار واختبارات المطابقة للتحقق من طريقة تعامل زاحف آخر مع robots.txt وإشارات الانسحاب.
خارج النطاق
- الحكم على جواز إعادة استخدام المحتوى قانونًا: تقرأ المكتبة الإشارات التي تقرؤها الآلات، لا شروط الاستخدام ولا التراخيص.
- تجاوز ضوابط الوصول: تتوقف المكتبة عند تسجيل الدخول وتحديات كشف الروبوتات وصفحات CAPTCHA، ولا خيار فيها لتجاوزها.
الحقوق باختصار
التدريب والعرض وإعادة التوزيع وإنشاء الأصوات الاصطناعية أذونات منفصلة.
| الاستخدام | الحالة | ملاحظة |
|---|---|---|
| التدريب | لا ينطبق | مكتبة وملف سياسة، وليست بيانات تدريب. |
| العرض | مسموح | التوثيق ونص الصفحة بترخيص CC BY 4.0 مع النسبة إلى المصدر، وملف crawler.json بترخيص CC0 1.0. |
| إعادة التوزيع | مسموح | الشيفرة بترخيص Apache-2.0، والتوثيق بترخيص CC BY 4.0، وسياسة الزاحف بترخيص CC0 1.0، وأسماء زواحف الذكاء الاصطناعي المرفقة بترخيص MIT الخاص بمشروع ai.robots.txt. |
| الصوت الاصطناعي | لا ينطبق | لا يتضمن ملفات صوتية. |
القيود
- تسري حدود الطلبات وقواعد التوقف على كل عامل وحده، ولا تنسّق المكتبة بين عدة عمّال على المضيف نفسه، فشغّل عاملًا واحدًا لكل مضيف.
- ما زالت مفردات تفضيلات الذكاء الاصطناعي في IETF (Content-Usage) مسودة؛ وتُسجَّل القيم كما وُجدت، وأي قيمة n تجعل السجل فهرسة فقط.
- يعتمد كشف التحديات وصفحات CAPTCHA على ترويسات الاستجابة وعلامات في الصفحة؛ وحين لا تُقرأ إلا الترويسات لا تُفحص وسوم meta ولا متن الصفحة.
- يعتمد استثناء التنزيلات الموثّقة على عنوان الوثائق الذي يقدّمه المستدعي؛ وتسجّله المكتبة لكنها لا تقرأ تلك الصفحة.
- تعمل اختبارات المطابقة على خادم اختبار محلي ولا تعمل أبدًا على مواقع حقيقية، وقد تجيب الخوادم الحقيقية بطرق لا تغطيها حالات الاختبار.
- ثبّت المكتبة من GitHub حاليًا، فالحزمة غير موجودة على PyPI بعد.
المصادر والتراخيص
| المصدر | الترخيص | يُعاد توزيعه هنا |
|---|---|---|
| RFC 9309: Robots Exclusion Protocol | مطبَّق في المكتبة، ولا يُضمَّن نصه | لا |
| ai.robots.txt project, robots.json at commit d8e8b77 | MIT، وأسماء الزواحف مرفقة مع إشعار الترخيص | نعم |
| TDMRep, W3C Community Group final report | مطبَّق في المكتبة، ولا يُضمَّن نصه | لا |
| Content Signals Policy (Content-Signal in robots.txt) | مطبَّق في المكتبة، ولا يُضمَّن نصه | لا |
| IETF AI Preferences working group drafts (Content-Usage) | مطبَّق وفق المسودات، ولا يُضمَّن نصها | لا |
تطبّق polite-fetch مواصفات منشورة ولا تعيد نشر نصوصها. وتأتي أسماء زواحف الذكاء الاصطناعي من ملف robots.json في مشروع ai.robots.txt، مثبّتة على إيداع واحد، ومرفقة بترخيص MIT مع إشعاره. ولا تصف صفحة الزاحف على bayanatlabs.com من سلوك الزاحف إلا ما تفرضه المكتبة، ويربط جدول التتبّع في المستودع كل عبارة عن سلوك الزاحف بالاختبارات التي تتحقق منها، ويفشل البناء إذا بقيت عبارة منها دون اختبار. تفاصيل المصادر (بالإنجليزية)
طريقة الاستشهاد
صيغة الاستشهاد:
Bayanat Labs (2026). polite-fetch: the library behind the BayanatLabs-OpenData crawler, version 0.1.0, crawler policy 1.0.0. Bayanat Labs. https://github.com/Bayanat-Labs/polite-fetch
لا يوجد معرّف DOI. استشهد بالرابط الوارد في صيغة الاستشهاد أعلاه وبتاريخ اطلاعك عليه.
@misc{bayanatlabs2026politefetch,
author = {{Bayanat Labs}},
title = {polite-fetch: the library behind the BayanatLabs-OpenData crawler, version 0.1.0, crawler policy 1.0.0},
year = {2026},
month = oct,
howpublished = {\url{https://github.com/Bayanat-Labs/polite-fetch}}
}
كيف نتعامل مع الاستشهاد (بالإنجليزية)
سجل التغييرات
| التاريخ | الإصدار | التغيير |
|---|---|---|
| v0.1.0 | مكتبة بايثون وأداة سطر الأوامر وسياسة الزاحف واختبارات المطابقة على GitHub، وصفحة الزاحف وملف crawler.json على bayanatlabs.com. |
التصحيح وطلبات الإزالة
إذا وجدت في هذا الإصدار ما لا ينبغي وجوده أو ما يحتاج إلى تصحيح، فراسلنا على hello@bayanatlabs.com. نعالج طلبات الإزالة خلال 30 يومًا، وطلبات المنصات خلال 24 ساعة. كيف تعمل طلبات الإزالة
المنتج المرتبط: Bayanat Knowledge