async-web-collector

جمع بيانات ويب عامة بطريقة محترمة وقابلة للتنبؤ

Python 3.12httpxselectolaxlxmlTyperpytest

كود المصدر على GitHub

رخصة: MIT

الفكرة

جمع مواقع عامة هو أمر ضروري، لكن تكرار الخطوات البدائية (عميل، retries، انتظار بين النطاقات احترامًا للقواعد) كان يأخذ وقتًا ثابتًا في كل مشروع. الأداة دي بتجمع الجمال كله في مكتبة نية بلا تبعيات ثقيلة.

المسؤولية اولا

  • robots.txt: يُجلب ويُحلل ويُخزّن مؤقتًا ويُطبع في الافتراضي.
  • تحديد المعدل لكل نطاق (طلبات/ثانية) عشان ما نضغطش على خادم بعينه.
  • retries مع backoff أُسّي و jitter، ومع Retry-After عند حاجته.
  • تزامن محدود عبر asyncio.Semaphore بدل انفجار الطلبات.

الاستخدام

uv run async-web-collector fetch https://example.com \
    --selectors "title=h1@text;links=a[href]@href" \
    --output out/example.json

وللاستخراج المتكرر على صفحات كثيرة، ملف YAML بيحدد الحقول scope و fields بعمليات CSS أو XPath مع اختيارات attr و all وstrip. التصدير JSON أو CSV.

الأداة للبيانات العامة فقط، وتُذكر في التوثيق: «استخدمها بمسؤولية، واحترم شروط الموقع والقانون، وفضّل الـ APIs الرسمية». الـ README كله مبني حوالين المبدأ دا.