مستخرج الروابط (href)

الصق كود HTML واستخرج كل رابط فيه — كل قيم href، بلا تكرار وموزعة سطراً سطراً، جاهزة للنسخ أو التنزيل.

1,049 مشاهدة

كيف تعمل الأداة

الصق كود HTML المصدر — سواء كان ناتج "عرض المصدر"، أو محتوى ملف .html محفوظ، أو أي مقطع منسوخ — وتقوم الأداة بتسليم هذا النص إلى محلِّل HTML الخاص بالمتصفح نفسه بدلًا من تعبير نمطي (regex) مكتوب يدويًا. هذا الفارق أهم مما يبدو عليه. فـ HTML في العالم الواقعي فوضوي بطرق يعجز أمامها regex ساذج: يمكن أن تُكتب إحدى السمات (attribute) بين علامتي اقتباس مزدوجتين، أو مفردتين، أو من دون علامات اقتباس على الإطلاق (فـ href=about.html يُعد من الناحية التقنية HTML صحيحًا)، ويمكن أن يُغلق الوسم (tag) نفسه ذاتيًا أو لا، ويمكن أن تتداخل الوسوم في مستويات عديدة، أو تمتد عبر أسطر متعددة، أو تقع داخل تعليقات أو كتل <script> تحتوي هي نفسها على أقواس زاوية. لقد أمضى محلِّل بجودة المتصفح عقدين من الزمن في استيعاب كل حالة استثنائية من هذا النوع، لأنه مضطر إلى عرض أي صفحة تُسلَّم إليه مهما كان الترميز فيها معطوبًا — وبناء المستخرج على المحرك نفسه، بدلًا من إعادة اختراع مطابقة الأنماط للوسوم، هو ما يجعله موثوقًا على ترميز لم تكتبه أنت بنفسك، كصفحة منافس مُستخلَصة أو تصدير حملة قديمة.

بعد أن يبني المحلِّل شجرة بنيوية من الترميز الملصق، تُقرأ قيمة href في كل عنصر <a> مباشرة كخاصية لذلك العنصر لا كنص خام مُستخرَج من سلسلة نصية — وهو ما يتجنب مسبقًا غرابات علامات الاقتباس وأقواس الزاوية الشاردة داخل التعليقات التي قد تُضلِّل مطابقة الأنماط لولا ذلك. تُنقَّى قائمة الروابط الناتجة من التكرار بعدها وتُكتب سطرًا سطرًا، جاهزة للنسخ إلى الحافظة أو التنزيل كملف نصي عادي.

مثال ملموس: لنفترض أن HTML صفحة ما يحتوي على <a href='/pricing'>، وَ<a href="https://example.com/blog">، ووسم عارٍ <a href=mailto:[email protected]> بلا أي علامات اقتباس على الإطلاق — ثلاثة أساليب مختلفة لعلامات الاقتباس في ثلاثة أسطر. تعبير نمطي مكتوب لمطابقة href="..." فقط سيفوّت بصمت الحالتين ذات علامة الاقتباس المفردة والحالة بلا علامات اقتباس؛ أما المحلِّل فيقرأ الحالات الثلاث جميعها بالطريقة نفسها، لأنها بالنسبة إلى المتصفح مجرد قيم سمات بغض النظر عن كيفية — أو ما إذا كان — وضعها بين علامات اقتباس.

ما ينبغي أن تعرفه

  • تُستخرج الروابط النسبية مثل /pricing أو ../blog/post تمامًا كما كُتبت، ولا تُحوَّل إلى عناوين https://... كاملة. فتحويل مسار نسبي إلى رابط مطلق يتطلب معرفة عنوان القاعدة (base URL) للصفحة — وعادة ما يكون العنوان الذي جُلب منه HTML أصلًا، أو وسم <base> صريح — ومقطع ملصق لا يحمل أيًا منهما من تلقاء نفسه.
  • لا تجلب الأداة أي رابط من تلقاء نفسها إطلاقًا؛ فهي تكتفي بقراءة HTML الذي تزوّدها به. وهذا حد مقصود: فمراجعة الروابط الصادرة من صفحة بهذه الطريقة لا تتطلب أي طلب من جهة الخادم من هذا الموقع على الإطلاق، بل فقط من المتصفح الذي استخدمته أصلًا لعرض المصدر أو حفظه.
  • تمر روابط mailto: وَtel: تمامًا كأي href آخر، لأن المحلِّل لا يميّز حسب المخطط (scheme) — فكل ما يقع داخل سمة href يُحسب رابطًا يستحق الإدراج في القائمة.

الأسئلة الشائعة

هل تجلب الأداة الصفحة بنفسها أم يجب أن أوفر كود HTML؟

أنت من يوفّر كود HTML — الصق ناتج "عرض المصدر"، أو محتوى ملف .html محفوظ، أو أي مقطع HTML. الأداة لا تجلب أي رابط من تلقائها أبداً (فذلك يتطلب طلباً إلى خادم لا يقوم به هذا الموقع).

هل تُدرَج الروابط النسبية، وهل تُحوَّل إلى عناوين كاملة؟

نعم، الروابط النسبية (مثل /about أو ../page.html) تُستخرج تمامًا كما وردت في المصدر، ولا تُحوَّل أبدًا إلى عناوين URL مطلقة. فتحويلها يتطلب معرفة عنوان القاعدة للصفحة — وعادة ما يكون العنوان الذي جُلب منه HTML — وهو ما لا يحمله مقطع ملصق من تلقاء نفسه.

هل تشمل روابط mailto: وtel:؟

نعم — يتم استخراج أي قيمة href بغض النظر عن نوع البروتوكول.

لماذا تحلّل الأداة الصفحة بمحرك DOM الخاص بالمتصفح بدلًا من regex — هل هذا مهم فعلًا؟

يظهر أثره الأكبر في HTML الفوضوي من العالم الواقعي. فتعبير نمطي مضبوط على أسلوب واحد لعلامات الاقتباس (لنقل href="..." المزدوجة) سيفوّت بصمت السمات ذات علامة الاقتباس المفردة أو بلا علامات اقتباس، والاختلافات في الإغلاق الذاتي للوسوم، وروابط href المدفونة في ترميز متداخل بعمق أو معطوب. أما محلِّل DOM فيتعامل مع كل ذلك بالطريقة نفسها التي يتعامل بها المتصفح عند عرض الصفحة، لأنه المحرك الأساسي نفسه.

هل تلتقط الأداة الروابط أيضًا في HTML المصغَّر (minified) أو المعطوب بشدة؟

في جميع الحالات تقريبًا، نعم. المتصفحات مصمَّمة لعرض صفحات بعيدة كل البعد عن التنسيق المثالي — وسوم إغلاق مفقودة، تداخل غير متسق، ترميز مصغَّر في سطر واحد — وينطبق التحليل المتسامح نفسه هنا، وهذا بالضبط ما يمنحها الأفضلية مقارنة بـ regex صارم يتوقع مدخلات نظيفة ومنسقة جيدًا.

التعليقات

لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!

أدوات مشابهة