تحليل HTML في Kotlin: نظرة عامة على المكتبات وأمثلة عملية
Kotlin هي لغة حديثة متعددة المنصات تُستخدم بنشاط لتطوير تطبيقات الخادم وتطبيقات Android وأدوات الأتمتة. إحدى المهام الشائعة هي تحليل HTML - استخراج البيانات من صفحات الويب، والعمل مع شجرة DOM، أو إنشاء قوالب HTML. في هذه المقالة، سنستعرض المكتبات الرئيسية لتحليل HTML في Kotlin، وميزاتها، ونقدم أمثلة كود عملية.
لماذا نحتاج إلى تحليل HTML في Kotlin؟
تحليل HTML مطلوب في سيناريوهات مثل:
- جمع البيانات من المواقع (تجريف الويب).
- أتمتة اختبار واجهات الويب.
- إنشاء تقارير HTML أو قوالب البريد الإلكتروني.
- معالجة وتحليل المحتوى المستلم من API أو الملفات.
بفضل التوافق مع Java وبنيات DSL الخاصة بها، تقدم Kotlin كلاً من مكتبات Java المثبتة والحلول الأصلية.
1. Jsoup — محلل HTML/XML عالمي
Jsoup هي المكتبة الأكثر شيوعًا لتحليل HTML في نظام JVM البيئي. توفر واجهة برمجة تطبيقات مريحة لتحميل وتحليل ومعالجة مستندات HTML، وتدعم محددات CSS وطرقًا شبيهة بـ jQuery. بالنسبة لـ Kotlin، تعمل Jsoup بشكل ممتاز بفضل التوافق الكامل مع Java وإمكانية استخدام امتدادات Kotlin.
التثبيت (Gradle)
dependencies { implementation("org.jsoup:jsoup:1.17.2")}مثال: استخراج عناوين المقالات من مدونة
import org.jsoup.Jsoupimport org.jsoup.nodes.Document
fun main() { // تحميل مستند HTML من URL val doc: Document = Jsoup.connect("https://example.com/blog").get()
// استخراج جميع العناوين h2 ذات الفئة "post-title" val titles = doc.select("h2.post-title")
// طباعة نص كل عنوان titles.forEach { title -> println(title.text()) }
// مثال باستخدام محدد CSS: جميع الروابط داخل المقالات val links = doc.select("article a[href]") links.forEach { link -> println("${link.text()} -> ${link.attr("href")}") }}يسمح Jsoup أيضًا بتحليل HTML من سلسلة نصية أو ملف أو InputStream، بالإضافة إلى تنظيف HTML من العناصر التي قد تكون خطرة (حماية XSS).
2. kotlinx.html — DSL آمن من حيث النوع للعمل مع HTML
kotlinx.html هي مكتبة رسمية من JetBrains، مصممة لإنشاء كود HTML باستخدام DSL آمن من حيث النوع. على عكس Jsoup، فهي لا تحلل HTML الموجود بل تقوم بإنشائه. ومع ذلك، يمكن دمجها مع Jsoup لدورة كاملة: تحليل ← تعديل ← إنشاء.
التثبيت (Gradle)
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:0.11.0")}مثال: إنشاء صفحة HTML
import kotlinx.html.*import kotlinx.html.stream.createHTML
fun main() { val htmlContent = createHTML().html { head { title("صفحة مثال") meta(charset = "UTF-8") } body { h1 { +"مرحبًا، Kotlin!" } p { +"هذه فقرة تم إنشاؤها باستخدام " b { +"kotlinx.html" } } ul { li { +"العنصر 1" } li { +"العنصر 2" } li { +"العنصر 3" } } } } println(htmlContent)}هذا النهج مفيد بشكل خاص لإنشاء التقارير أو قوالب البريد الإلكتروني أو الصفحات الديناميكية على الخادم (Ktor).
3. Ktor Client + Jsoup — للتحليل مع طلبات HTTP
إذا كنت بحاجة إلى تنفيذ طلبات HTTP معقدة (مع الكوكيز والرؤوس والمصادقة) قبل التحليل، فمن المناسب استخدام Ktor Client مع Jsoup. Ktor هو عميل HTTP غير متزامن يتكامل بشكل ممتاز مع coroutines في Kotlin.