الزحف واسع النطاق + غير المنظَّم للويب

20 مايو 2025

مرحبًا بك في القسم الأخير من سلسلتنا التعليمية العملية حول زحف الويب. بدلًا من درس تقليدي، سنتبع نهجًا مختلفًا. في هذا القسم، قمتُ ببناء Housefly Metascraper—وهو زاحف موجود في الدليل ./apps/metascraper يوضّح كيفية تطبيق كل ما تعلمناه في سيناريو واقعي.

يوضح Metascraper كيف أن رحلتنا خطوة بخطوة—بدءًا من استخراج البيانات من HTML ثابت بسيط، والتنقل داخل المحتوى المعروض عبر JavaScript، وصولًا إلى التفاعل مع APIs وتجاوز دفاعات الزحف—تتوج بأداة قادرة على التعامل مع الويب غير المنظَّم والمتنوع والفوضوي على نطاق واسع.

سنستكشف كيفية الزحف عبر مجموعة كبيرة ومتنوعة من المواقع—من دون معرفة مسبقة بنوع هياكل البيانات المتوقعة—وسنقدم مفاهيم التحليل بمساعدة الذكاء الاصطناعي والاكتشاف الديناميكي للمخططات والتقنيات اللازمة من أجل التوسع إلى آلاف (أو ملايين) الصفحات من دون أن ينهار النظام.

ماذا يعني فعلًا “غير منظَّم” و“واسع النطاق”؟

في الأقسام السابقة، كنا غالبًا نعرف:

  • ما المواقع التي نستهدفها.
  • ما البيانات التي نريدها (مثل الجداول، والقوائم، واستجابات JSON).
  • عدد الصفحات التي نحتاج إلى زيارتها.

لكن في الزحف غير المنظَّم واسع النطاق:

  • تختلف المواقع اختلافًا هائلًا: بعضها منظَّم، وبعضها الآخر مدونات بتنسيقات غير منتظمة.
  • تكون المسارات وعناوين URL غير متوقعة.
  • يكون المخطط غير متسق أو غير موجود أصلًا.
  • نريد الزحف إلى آلاف الصفحات، وربما عبر عدة نطاقات.

تخيّل:

  • زواحف بحث تجمع البيانات عبر مواقع أكاديمية.
  • مساعدين للذكاء الاصطناعي يفهرسون المدونات لبناء معرفة متخصصة حسب الموضوع.
  • محركات بحث يجب أن تعمّم عملها على امتداد الإنترنت العام بأكمله.

هذا هو الزعيم الأخير في زحف الويب.

الجزء 1: تصميم البنية للزحف واسع النطاق

لنتحدث عن كيفية توسيع نطاق الزاحف قبل أن نقلق بشأن التحليل.

أنماط التصميم

لبناء زاحف واسع النطاق، ينبغي أن تكون بنيتك:

  • مدفوعة بالطوابير: استخدم طابور رسائل (مثل Redis أو RabbitMQ أو Kafka) لتخزين عناوين URL المعلّقة.
  • قائمة على العمال: افصل الزواحف إلى عمليات worker تسحب من الطابور وتعالج المهام بشكل مستقل.
  • خاضعة لإزالة التكرار: حافظ على فهرس ببصمات مميزة (مثل SHA1 لعنوان URL أو لمحتوى HTML) لتجنب معالجة الصفحة نفسها مرتين.
  • قابلة للاستئناف: احفظ حالة الزحف بحيث يمكنها التعافي من الأعطال.

إليك مخطط تصميم بسيطًا:

الجزء 2: أحدث التقنيات لعام 2025

Residential Proxies

من أبرز التطورات في الاستخراج واسع النطاق استخدام residential proxies. فعلى عكس عناوين IP الخاصة بمراكز البيانات، التي تستطيع المواقع اكتشافها وحظرها بسهولة، تقوم residential proxies بتمرير طلباتك عبر عناوين IP حقيقية لمستخدمين فعليين، مما يجعل أداة الاستخراج الخاصة بك تبدو كمستخدم شرعي.

الوكلاء الذاتيون المدعومون بالذكاء الاصطناعي

أكثر التطورات ثورية في عام 2025 هو agentic scraping. فبدلًا من كتابة أدوات استخراج مخصّصة لكل تنسيق موقع:

  • يمكن لنماذج LLMs المزودة بقدرات بصرية فهم البيانات واستخراجها من تخطيطات لم ترها من قبل
  • يمكن لوكلاء الذكاء الاصطناعي التنقل ذاتيًا داخل المواقع المعقدة عبر محاكاة أنماط التصفح البشرية
  • يتكيف التحليل التكيفي تلقائيًا مع تغييرات التخطيط من دون الحاجة إلى تحديثات في الشيفرة

الجزء 3: التحليل بمساعدة الذكاء الاصطناعي

قم بالضبط الدقيق لنموذج أو صِغ له موجهات بحيث يُخرج JSON نظيفًا:

{
  "name": "Dr. Maria Lopez",
  "title": "Climate Scientist",
  "organization": "Stanford",
  "topic": "2023 UN Climate Summit, AI in climate modeling"
}

الجزء 4: تخزين البيانات وفهرستها والبحث فيها

ستجمع كميات كبيرة من البيانات غير المتجانسة. اختر وسيلة التخزين بناءً على أهدافك ومدى تنظيم البيانات.

استراتيجيات التخزين

  • PostgreSQL أو SQLite: الأفضل للبيانات الجدولية المنظَّمة عندما تكون على علم بالمخطط (مثل المقالات، والأسعار، والطوابع الزمنية). يمكنك استخدام الفهارس، والمفاتيح الأجنبية، والبحث النصي الكامل (FTS).
  • MongoDB أو Elasticsearch: ممتازان لتنسيقات البيانات شبه المنظَّمة أو المرنة مثل كتل JSON حيث قد يختلف المخطط من سجل إلى آخر.
  • S3 / IPFS / File System: مثالية للقطات HTML الخام، والصور، وملفات PDF، والملفات الثنائية الكبيرة. خزّن البيانات الوصفية في قاعدة بيانات واربطها بموقع الملف.

استخدم UUIDs أو تجزئات URL كمفاتيح أساسية حتى تتمكن من إزالة التكرار وتتبع العناصر التي زُحف إليها سابقًا.

جعلها قابلة للبحث

بمجرد تخزين البيانات، سترغب في استكشاف المحتوى والاستعلام عنه.

تشمل الخيارات:

  • PostgreSQL FTS (Full-Text Search): استخدم tsvector وtsquery لبناء قدرات قوية للبحث بالكلمات المفتاحية مع ترتيب النتائج.
  • Typesense أو Meilisearch: محركات بحث نصي كامل خفيفة ومرنة على مستوى المخطط، ومثالية للفهرسة السريعة والبحث التقريبي.
  • Elasticsearch: الأفضل لحالات البحث الأكثر تعقيدًا أو للسجلات، مع إمكانات قوية للتصفية والتحليلات.

ينبغي أن تفهرس حقولًا مثل:

  • العنوان
  • المؤلف
  • تاريخ النشر
  • الكلمات المفتاحية أو الوسوم (إن تم استخراجها)
  • المحتوى الرئيسي
  • النطاق / المصدر

البحث الدلالي باستخدام Embeddings

للوصول إلى فهم أعمق واسترجاع أفضل (يتجاوز الكلمات المفتاحية)، استخدم text embeddings:

  1. استخدم نموذجًا مثل text-embedding-3-small من OpenAI أو بدائل مفتوحة المصدر مثل bge-small-en.
  2. حوّل المحتوى الذي زحفت إليه إلى متجهات embedding.
  3. خزّنها في قاعدة بيانات متجهية مثل:
    • Qdrant
    • Weaviate
    • Pinecone
    • FAISS (للاستخدام المحلي / داخل الذاكرة)

يتيح ذلك استعلامات دلالية مثل:

“أرني مقالات يتحدث فيها شخص ما عن التنمية الحضرية الصديقة للدراجات في المناخات الباردة.”

ومن خلال مقارنة embedding الخاص بالاستعلام مع embeddings المخزنة، يتحول الزاحف إلى محرك معرفة.

البيانات الوصفية والإثراء

أخيرًا، قم بإثراء بياناتك ببيانات وصفية إضافية:

  • اكتشاف اللغة (مثلًا باستخدام langdetect أو fastText).
  • تصنيف فئات المحتوى باستخدام نماذج zero-shot أو مصنفات مضبوطة بدقة.
  • التعرّف على الكيانات المسماة (NER) لاستخراج الأشخاص والمنظمات والأماكن.
  • الإسناد الجغرافي استنادًا إلى المحتوى أو المصدر.

خزّن هذه البيانات إلى جانب البيانات الرئيسية حتى تتمكن لاحقًا من التصفية والفرز بناءً عليها.

الجزء 5: زواحف الاكتشاف المعتمدة على البحث

أكثر المقاربات تقدمًا في الزحف واسع النطاق لا تبدأ أصلًا بعناوين URL—بل تبدأ بـ استعلامات البحث.

استلهامًا من أدوات مثل SearchXNG وPerplexity، يوضّح Metascraper استراتيجية تبدأ بالبحث أولًا، حيث يقوم الزاحف بما يلي:

  1. يبدأ بـ موضوع أو سؤال بدلًا من قائمة seed URL
  2. يستخدم APIs لمحركات البحث لاكتشاف الصفحات ذات الصلة في الوقت الحقيقي
  3. يبني طابور الزحف ديناميكيًا استنادًا إلى نتائج البحث
  4. يتتبع الاستشهادات والمراجع بذكاء لتوسيع المعرفة

يوفر هذا النهج عدة مزايا:

  • استكشاف موجّه: بدلًا من الزحف الشامل، تزور فقط الصفحات المرجّح أن تحتوي على معلومات ذات صلة
  • نتائج محدَّثة: يبدأ كل زحف من جديد مع نتائج البحث الحالية
  • غير معتمد على نطاق محدد: غير مقيّد بمواقع أو أنماط URL معرّفة مسبقًا
  • مدفوع بالنية: يتوافق مع الطريقة التي يبحث بها البشر فعليًا في الموضوعات

يوضح وضع Metascraper المعتمد على البحث كيفية دمج APIs البحث، وخوارزميات ترتيب الأولويات، والاستخراج الواعي بالسياق لبناء رسوم بيانية معرفية من محتوى يُكتشف ديناميكيًا من دون معرفة مسبقة بعناوين URL التي ستزورها.

نتمنى لك استخراجًا موفقًا