حدثنا عن أذكى زاحف (crawler) قمت ببرمجته و ماذا كانت مهمته و بأي لغة برمجة؟
حدثنا عن أذكى زاحف (crawler) قمت ببرمجته
كتبت واحدًا يسحب القصائد من موقع أدب ويرفعها على موقع ويكي مصدر. (رفع أكثر من ٤٠ ألف قصيدة).
ثم استخدمته مرة أخرى لأسحب مقالات بعض المجلات المرفوعة على مكتبة الشاملة. (رفع أكثر من ١٥ ألف مقال).
كتبت هذا البريمج بلغة البايثون واستخدمت مكتبة beautifulsoup
هذا هو الزاحف الذي استخدمته لمكتبة الشاملة. الشفرة غير مرتبة، وهيكل البريمج غير مستدام؛ لأنني أردته لحاجة سريعة ولم أتعب نفسي لأجعله وظيفيًا functional.
قمت في الماضي بعمل سكريبت بالجافا و باستعمال مكتبة JSoup لزاحف بسيط لجمع عناوين مواقع نت من Yahoo Directory و Dmoz حيث كنت احتاج عدد كبير من العناوين لتحليلها و فرزها (مشروع بحثي)
رابط المشروع على
: GitHub
هذه صفاته
يجلب محتوى المواقع ويقوم بأرشفتها كملفات XML.
يعمل بالمهام المتوازية لتنفيذ أكبر عدد في نفس الوقت، مع إمكانية تحديد حدود لهذه العمليات تجنباً للضغط على الخادم.
مرن للعمل على أي موقع حيث أنه يعتمد على CSS Selector لتحديد المحتوى المُراد جلبه مع تحديد المحتوى المُراد حذفه وعمل الفلترة اللازمة قبل الحفظ.
داعم للعربية ويعمل مع الترميزات المُختلفة على أغلب المواقع.
يعتمد على واجهة رسومية لتحديد مصادر الزحف وتحديد المُحتوى المُراد جلبه والمُراد حذفه.
تم العمل به على أكثر من 200 موقع كان من ضمنهم hsoub I/O.
بُرمج بلغة php.
فقط للاختبار والتطبيق
الدخول الى البطاقة التعريفية لكل أعضاء حسوب الذين يتكون اسمهم من اربع حروف
حيث يقوم بتوليد اسم عشوائي ثم خزن الاقتباس في ملف
زاحف لجلب معلومات وإحصائيات خاصة بخمسات مثل:
أوقات دخول المستخدمين للموقع، يقوم الزاحف بمراقبة حساب المستخدم لتسجيل الاوقات التي تواجد فيها.
عدد مبيعات البائعين :) يقوم أيضا بمراقبة الصفحة الشخصية لمعرفة الزيادة في عدد المبيعات للعضو.
إشعاري بوجود تعليقات جديدة على أحد مواضيع المجتمع من خلال الزحف على التعليقات.
إشعاري بوجود طلبات جديدة خاصة بالبرمجة من خلال الزحف في مجتمع الطلبات الغير موجودة وجلب آخر 10 مواضيع تم إضافتها، ثم يقوم بتحليل العنوان أو نص الطلب لمعرفة إن كان خاص بالبرمجة.
اللغة المستخدمة PHP
لمراقبة حالة المستخدم، شغلت corn job تعمل كل دقيقة.
أما البقية فتعمل ال job كل 5دقائق.
الفكرة ببساطة هي جلب محتويات الصفحة ثم أستخراج البيانات التي أريدها.
مثال على مراقبة اوقات تواجد العضو، في صفحة العضو الشخصية، اذا كان العضو متواجد حاليا سيكون هناك دائرة خضراء مكتوب بجانبها "الأن" إذا فهدف الزاحف هو البحث عن الوسم الخاص بالدائرة الخضراء فإذا كان موجود اخزن الوقت والتاريخ.
نفس المبدأ في حال أريد أن اعرف إن كان هناك تعليقات جديدة على موضوع معين، يتم تضمين التعليقات داخل div له ال class التالي 'post_reply ' ما أقوم به هو عد هذه ال divs ومقارنتها بالعدد القديم إذا كان هناك اختلاف فهذا يعني وجود تعليقات جديدة.
لإستخراج الوسوم إستخدمت ال Regular expressions هناك مكتبات لعمل html parsing لكن ال Regular expressions أدت الغرض بالنسبة لي.
التعليقات