تحليل HTML في Kotlin: jsoup، ktor، khtml وأدوات أخرى

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تحليل HTML في Kotlin: دليل شامل للأدوات والمكتبات



تحليل HTML (استخراج البيانات من صفحات الويب) هو إحدى المهام الأساسية عند إنشاء أدوات التحليل، أو محللي المحتوى، أو دمج البيانات الخارجية. في نظام Kotlin البيئي، توجد عدة مكتبات قوية تتيح العمل بكفاءة مع HTML. في هذه المقالة، سنستعرض بالتفصيل أفضل الأدوات، وميزاتها، ونقدم أمثلة عملية على الكود.



1. jsoup — المعيار الفعلي لتحليل HTML



jsoup هي المكتبة الأكثر شيوعًا في Java للعمل مع HTML، وتعمل بشكل ممتاز أيضًا في Kotlin. توفر واجهة برمجة تطبيقات مريحة لتحميل وتحليل واستخراج البيانات من مستندات HTML.



الإمكانيات الرئيسية:

  • تحميل HTML من رابط، ملف، أو نص
  • دعم محددات CSS للبحث عن العناصر
  • تنظيف HTML من العلامات غير المرغوب فيها
  • تعديل شجرة DOM


مثال على استخدام jsoup في Kotlin:



import org.jsoup.Jsoupimport org.jsoup.nodes.Document

fun main() { // تحميل مستند HTML val doc: Document = Jsoup.connect("https://example.com").get() // استخراج عنوان الصفحة val title: String = doc.title() println("العنوان: $title") // البحث عن جميع الروابط في الصفحة val links = doc.select("a[href]") links.forEach { link -> val href = link.attr("href") val text = link.text() println("رابط: $text -> $href") } // استخراج النص من كتلة معينة val content = doc.select("div.content").text() println("المحتوى: $content") // العمل مع النماذج val form = doc.select("form").first() form?.select("input")?.forEach { input -> println("حقل: ${input.attr("name")} = ${input.attr("value")}") }}


2. Ktor Client + khtml — مجموعة Kotlin الحديثة



Ktor Client هو عميل HTTP غير متزامن لـ Kotlin، يتناسب بشكل ممتاز مع مكتبة khtml (محلل HTML لـ Kotlin). معًا، يشكلان أداة قوية لتجميع بيانات الويب.



مزايا هذا النهج:

  • دعم أصلي للـ coroutines (دوال suspend)
  • تحميل الصفحات بشكل غير متزامن
  • إعداد مرن لطلبات HTTP
  • دعم cookies، الجلسات، والـ proxy


مثال مع Ktor Client و khtml:



import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import kotlinx.coroutines.runBlockingimport org.jsoup.Jsoup

suspend fun fetchAndParse(url: String) { val client = HttpClient() try { // تحميل HTML بشكل غير متزامن val response: HttpResponse = client.get(url) val html: String = response.bodyAsText() // التحليل باستخدام jsoup val doc = Jsoup.parse(html) val headlines = doc.select("h2, h3").map { it.text() } println("العناوين في الصفحة:") headlines.forEach { println("- $it") } } catch (e: Exception) { println("خطأ في التحميل: ${e.message}") } finally { client.close() }}

fun main() = runBlocking { fetchAndParse("https://kotlinlang.org")}


3. Selenium WebDriver — للصفحات الديناميكية



إذا كان الموقع يستخدم JavaScript بشكل كبير لعرض المحتوى، فستحتاج إلى Selenium WebDriver. يقوم بتشغيل متصفح حقيقي ويسمح بالتفاعل مع العناصر الديناميكية.



مثال مع Selenium في Kotlin:



import org.openqa.selenium.Byimport org.openqa.selenium.WebDriverimport org.openqa.selenium.chrome.ChromeDriverimport org.openqa.selenium.chrome.ChromeOptions

fun scrapeDynamicPage() { val options = ChromeOptions().apply { addArguments("--headless") // وضع بدون واجهة رسومية addArguments("

توصيات