Парсинг HTML в Kotlin: библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Парсинг 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.Jsoup
import 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 ->
    val title = story.select("td.title a").text()
    val link = story.select("td.title a").attr("href")
    println("$title -> $link")
}

Работа с асинхронным парсингом (Ktor + coroutines)

suspend fun fetchMultiplePages(urls: List<String>): List<                    

Рекомендаций