Parsing HTML en Kotlin : Guide complet des outils et bibliothèques
Le parsing HTML (extraction de données à partir de pages web) est l'une des tâches clés lors de la création de parseurs, d'analyseurs de contenu ou d'intégration de données externes. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques puissantes qui permettent de travailler efficacement avec le HTML. Dans cet article, nous allons détailler les meilleurs outils, leurs caractéristiques et fournir des exemples de code pratiques.
1. jsoup — la norme de facto pour le parsing HTML
jsoup est la bibliothèque Java la plus populaire pour travailler avec le HTML, qui fonctionne parfaitement aussi en Kotlin. Elle offre une API pratique pour charger, analyser et extraire des données de documents HTML.
Fonctionnalités principales :
- Chargement de HTML depuis une URL, un fichier ou une chaîne
- Prise en charge des sélecteurs CSS pour rechercher des éléments
- Nettoyage du HTML des balises indésirables
- Modification de l'arbre DOM
Exemple d'utilisation de jsoup en Kotlin :
import org.jsoup.Jsoupimport org.jsoup.nodes.Document
fun main() { // Chargement du document HTML val doc: Document = Jsoup.connect("https://example.com").get() // Extraction du titre de la page val title: String = doc.title() println("Titre : $title") // Recherche de tous les liens sur la page val links = doc.select("a[href]") links.forEach { link -> val href = link.attr("href") val text = link.text() println("Lien : $text -> $href") } // Extraction du texte d'un bloc spécifique val content = doc.select("div.content").text() println("Contenu : $content") // Travail avec les formulaires val form = doc.select("form").first() form?.select("input")?.forEach { input -> println("Champ : ${input.attr("name")} = ${input.attr("value")}") }}2. Ktor Client + khtml — une stack Kotlin moderne
Ktor Client est un client HTTP asynchrone pour Kotlin, qui se marie parfaitement avec la bibliothèque khtml (parseur HTML Kotlin). Ensemble, ils forment un outil puissant pour le web scraping.
Avantages de cette approche :
- Prise en charge native des coroutines (fonctions suspend)
- Chargement asynchrone des pages
- Configuration flexible des requêtes HTTP
- Prise en charge des cookies, sessions et proxys
Exemple avec Ktor Client et 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 { // Chargement asynchrone du HTML val response: HttpResponse = client.get(url) val html: String = response.bodyAsText() // Parsing avec jsoup val doc = Jsoup.parse(html) val headlines = doc.select("h2, h3").map { it.text() } println("Titres sur la page :") headlines.forEach { println("- $it") } } catch (e: Exception) { println("Erreur lors du chargement : ${e.message}") } finally { client.close() }}
fun main() = runBlocking { fetchAndParse("https://kotlinlang.org")}3. Selenium WebDriver — pour les pages dynamiques
Si le site utilise activement JavaScript pour le rendu du contenu, vous aurez besoin de Selenium WebDriver. Il lance un vrai navigateur et permet d'interagir avec les éléments dynamiques.
Exemple avec Selenium en 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") // Mode sans GUI addArguments(" Aussi dans la bibliothèque
reflect-metadata TypeScript : guide complet avec exemples
Travailler avec CSV en Kotlin : bibliothèques, analyse et écriture de données
Migrations de bases de données en C++ : aperçu des outils et bibliothèques