HTML-Parsing in Kotlin: jsoup, ktor, khtml und andere Werkzeuge

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTML-Parsing in Kotlin: Vollständiger Leitfaden zu Werkzeugen und Bibliotheken



HTML-Parsing (Datenextraktion aus Webseiten) ist eine der Kernaufgaben bei der Erstellung von Parsern, Content-Analysatoren oder der Integration externer Daten. Im Kotlin-Ökosystem gibt es mehrere leistungsstarke Bibliotheken, die eine effiziente Arbeit mit HTML ermöglichen. In diesem Artikel analysieren wir die besten Werkzeuge im Detail, ihre Besonderheiten und geben praktische Codebeispiele.



1. jsoup — De-facto-Standard für HTML-Parsing



jsoup ist die beliebteste Java-Bibliothek für die Arbeit mit HTML, die auch in Kotlin hervorragend funktioniert. Sie bietet eine benutzerfreundliche API zum Laden, Parsen und Extrahieren von Daten aus HTML-Dokumenten.



Hauptfunktionen:

  • Laden von HTML aus URL, Datei oder Zeichenkette
  • Unterstützung von CSS-Selektoren zur Elementfindung
  • Bereinigung von HTML von unerwünschten Tags
  • Modifikation des DOM-Baums


Beispiel für die Verwendung von jsoup in Kotlin:



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

fun main() { // HTML-Dokument laden val doc: Document = Jsoup.connect("https://example.com").get() // Seitentitel extrahieren val title: String = doc.title() println("Titel: $title") // Alle Links auf der Seite finden val links = doc.select("a[href]") links.forEach { link -> val href = link.attr("href") val text = link.text() println("Link: $text -> $href") } // Text aus einem bestimmten Block extrahieren val content = doc.select("div.content").text() println("Inhalt: $content") // Arbeit mit Formularen val form = doc.select("form").first() form?.select("input")?.forEach { input -> println("Feld: ${input.attr("name")} = ${input.attr("value")}") }}


2. Ktor Client + khtml — moderner Kotlin-Stack



Ktor Client ist ein asynchroner HTTP-Client für Kotlin, der sich hervorragend mit der Bibliothek khtml (Kotlin HTML Parser) kombinieren lässt. Zusammen bilden sie ein leistungsstarkes Werkzeug für Web Scraping.



Vorteile des Ansatzes:

  • Native Unterstützung von Koroutinen (suspend-Funktionen)
  • Asynchrones Laden von Seiten
  • Flexible Konfiguration von HTTP-Anfragen
  • Unterstützung von Cookies, Sitzungen und Proxys


Beispiel mit Ktor Client und 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 { // Asynchrones Laden von HTML val response: HttpResponse = client.get(url) val html: String = response.bodyAsText() // Parsen mit jsoup val doc = Jsoup.parse(html) val headlines = doc.select("h2, h3").map { it.text() } println("Überschriften auf der Seite:") headlines.forEach { println("- $it") } } catch (e: Exception) { println("Fehler beim Laden: ${e.message}") } finally { client.close() }}

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


3. Selenium WebDriver — für dynamische Seiten



Wenn eine Website JavaScript aktiv zur Darstellung von Inhalten nutzt, benötigen Sie Selenium WebDriver. Es startet einen echten Browser und ermöglicht die Interaktion mit dynamischen Elementen.



Beispiel mit Selenium in 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") // Modus ohne GUI addArguments("

Empfehlungen