Parsing de HTML em Kotlin: jsoup, ktor, khtml e outras ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Parsing de HTML em Kotlin: Guia completo sobre ferramentas e bibliotecas



Parsing de HTML (extração de dados de páginas web) é uma das tarefas essenciais ao criar parsers, analisadores de conteúdo ou integrar dados externos. No ecossistema Kotlin, existem várias bibliotecas poderosas que permitem trabalhar eficientemente com HTML. Neste artigo, vamos detalhar as melhores ferramentas, suas características e fornecer exemplos práticos de código.



1. jsoup — o padrão de facto para parsing de HTML



jsoup é a biblioteca Java mais popular para trabalhar com HTML, que funciona perfeitamente também em Kotlin. Ela oferece uma API conveniente para carregar, analisar e extrair dados de documentos HTML.



Principais funcionalidades:

  • Carregar HTML a partir de URL, arquivo ou string
  • Suporte a seletores CSS para localizar elementos
  • Limpeza de HTML removendo tags indesejadas
  • Modificação da árvore DOM


Exemplo de uso do jsoup em Kotlin:



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

fun main() { // Carregar o documento HTML val doc: Document = Jsoup.connect("https://example.com").get() // Extrair o título da página val title: String = doc.title() println("Título: $title") // Encontrar todos os links na página val links = doc.select("a[href]") links.forEach { link -> val href = link.attr("href") val text = link.text() println("Link: $text -> $href") } // Extrair texto de um bloco específico val content = doc.select("div.content").text() println("Conteúdo: $content") // Trabalhar com formulários val form = doc.select("form").first() form?.select("input")?.forEach { input -> println("Campo: ${input.attr("name")} = ${input.attr("value")}") }}


2. Ktor Client + khtml — stack moderno em Kotlin



Ktor Client é um cliente HTTP assíncrono para Kotlin, que combina perfeitamente com a biblioteca khtml (parser HTML em Kotlin). Juntos, formam uma ferramenta poderosa para web scraping.



Vantagens da abordagem:

  • Suporte nativo a corrotinas (funções suspend)
  • Carregamento assíncrono de páginas
  • Configuração flexível de requisições HTTP
  • Suporte a cookies, sessões e proxies


Exemplo com Ktor Client e 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 { // Carregamento assíncrono do HTML val response: HttpResponse = client.get(url) val html: String = response.bodyAsText() // Parsing com jsoup val doc = Jsoup.parse(html) val headlines = doc.select("h2, h3").map { it.text() } println("Títulos na página:") headlines.forEach { println("- $it") } } catch (e: Exception) { println("Erro ao carregar: ${e.message}") } finally { client.close() }}

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


3. Selenium WebDriver — para páginas dinâmicas



Se o site usa JavaScript ativamente para renderizar conteúdo, você precisará do Selenium WebDriver. Ele executa um navegador real e permite interagir com elementos dinâmicos.



Exemplo com Selenium em 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") // Modo sem GUI addArguments("

Recommendations