تحليل HTML في Kotlin: نظرة شاملة على الأدوات والمكتبات
Kotlin هي لغة برمجة حديثة تعمل على JVM و Android والمتصفح. بفضل توافقها مع Java ومكتبتها القياسية القوية، تقدم Kotlin عدة طرق فعالة لتحليل HTML. في هذه المقالة، سنستعرض المكتبات الرئيسية لتحليل HTML في Kotlin، وميزاتها، ونقدم أمثلة عملية على الكود.
1. Jsoup — محلل HTML شامل لـ Kotlin
Jsoup هي المكتبة الأكثر شيوعًا لتحليل HTML على JVM. تعمل بشكل ممتاز مع Kotlin بفضل التوافق الكامل مع Java. تسمح Jsoup بتحميل HTML من URL أو ملف أو سلسلة نصية، ثم استخراج البيانات باستخدام محددات CSS والتنقل عبر DOM.
تثبيت Jsoup في مشروع Kotlin
أضف التبعية في ملف build.gradle.kts:
dependencies { implementation("org.jsoup:jsoup:1.17.2")}مثال على تحليل HTML باستخدام Jsoup
import org.jsoup.Jsoupimport org.jsoup.nodes.Document
fun main() { val url = "https://example.com" val doc: Document = Jsoup.connect(url).get() val title = doc.title() println("عنوان الصفحة: $title") // استخراج جميع الروابط val links = doc.select("a[href]") links.forEach { link -> println("الرابط: ${link.attr("abs:href")} — ${link.text()}") } // تحليل من سلسلة نصية val html = "<div class='content'>مرحبًا، Kotlin!</div>" val parsed = Jsoup.parse(html) val text = parsed.select(".content").text() println("النص من HTML: $text")}2. Ktor Client + kotlinx.html — نهج Kotlin الأصلي
للمشاريع التي تستخدم Ktor كعميل HTTP، سيكون الجمع بين ktor-client و kotlinx.html خيارًا ممتازًا. الأول مسؤول عن تحميل الصفحات، والثاني عن تحليل HTML إلى هيكل DOM مصنف.
التبعيات لـ Ktor و kotlinx.html
dependencies { implementation("io.ktor:ktor-client-core:2.3.7") implementation("io.ktor:ktor-client-cio:2.3.7") implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:0.11.0")}مثال على التحليل باستخدام Ktor و kotlinx.html
import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import kotlinx.html.*import kotlinx.html.parser.*
suspend fun parseHtmlWithKtor() { val client = HttpClient() val response: HttpResponse = client.get("https://example.com") val htmlContent = response.bodyAsText() val document = parseHtml(htmlContent) val title = document.head?.title ?: "بدون عنوان" println("العنوان: $title") // استخراج جميع الفقرات document.body?.allElements?.filterIsInstance<P>()?.forEach { p -> println("فقرة: ${p.text}") } client.close()}3. مقارنة مكتبات تحليل HTML في Kotlin
يعتمد اختيار الأداة على المهمة المحددة. إليك المعايير الأساسية:
- Jsoup — الخيار الأفضل للتحليل المعقد باستخدام محددات CSS. مناسب لاستخراج البيانات، واستخراج الجداول، والنماذج، وعناصر الوسائط.
- Ktor + kotlinx.html — مثالي للمشاريع التي تستخدم Ktor حيث يكون التحليل الخفيف مطلوبًا دون تبعيات إضافية. يعمل بشكل غير متزامن.
- HtmlCleaner — مكتبة Java أخرى متوافقة جيدًا مع Kotlin. مفيدة لتنظيف HTML "القذر".
- OkHttp + Jsoup — مزيج للتحكم الدقيق في طلبات HTTP مع تحليل قوي.
4. تقنيات متقدمة للتحليل في Kotlin
استخراج البيانات باستخدام محددات CSS (Jsoup)
val doc = Jsoup.connect("https://news.ycombinator.com").get()val stories = doc.select("tr.athing")stories.forEach { story ->