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(" Também na biblioteca
GameplayKit para Swift: guia completo com exemplos práticos
Rate Limiting em Kotlin: bibliotecas e exemplos práticos
Trabalho com XML em Java: DOM, SAX, StAX e JAXB — guia completo
Envio de email em TypeScript: bibliotecas e exemplos de código
Scrutor para C# (.NET): guia completo com exemplos práticos