الفكرة
جمع مواقع عامة هو أمر ضروري، لكن تكرار الخطوات البدائية (عميل، 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 كله مبني حوالين المبدأ دا.