Kotlin中的HTML解析:库与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin中的HTML解析:库概述与实践示例

Kotlin是一种现代多平台语言,广泛用于服务器端应用、Android应用和自动化工具的开发。常见任务之一是HTML解析——从网页中提取数据、操作DOM树或生成HTML模板。本文将介绍Kotlin中用于HTML解析的主要库、它们的特点,并提供可运行的代码示例。



为什么需要在Kotlin中解析HTML?

在以下场景中需要进行HTML解析:

  • 从网站收集数据(网页抓取)。
  • 自动化测试Web界面。
  • 生成HTML报告或邮件模板。
  • 处理和分析来自API或文件的内容。

得益于与Java的兼容性以及自身的DSL结构,Kotlin既提供了经过验证的Java库,也提供了原生解决方案。



1. Jsoup — 通用的HTML/XML解析器

Jsoup 是JVM生态中最流行的HTML解析库。它提供了便捷的API用于加载、解析和操作HTML文档,支持CSS选择器和类似jQuery的方法。由于与Java完全兼容,并且可以使用Kotlin扩展,Jsoup非常适合Kotlin。



安装 (Gradle)

dependencies {    implementation("org.jsoup:jsoup:1.17.2")}


示例:从博客中提取文章标题

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

fun main() { // 通过URL加载HTML文档 val doc: Document = Jsoup.connect("https://example.com/blog").get()

// 提取所有带有class "post-title"的h2标题 val titles = doc.select("h2.post-title")

// 输出每个标题的文本 titles.forEach { title -> println(title.text()) }

// 使用CSS选择器的示例:文章中的所有链接 val links = doc.select("article a[href]") links.forEach { link -> println("${link.text()} -> ${link.attr("href")}") }}

Jsoup还允许从字符串、文件或InputStream解析HTML,并清理HTML中潜在的危险元素(XSS防护)。



2. kotlinx.html — 用于HTML操作的类型安全DSL

kotlinx.html 是JetBrains的官方库,旨在通过类型安全的DSL生成HTML代码。与Jsoup不同,它不解析现有的HTML,而是创建HTML。不过,它可以与Jsoup结合使用,实现完整的流程:解析 → 修改 → 生成。



安装 (Gradle)

dependencies {    implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:0.11.0")}


示例:生成HTML页面

import kotlinx.html.*import kotlinx.html.stream.createHTML

fun main() { val htmlContent = createHTML().html { head { title("示例页面") meta(charset = "UTF-8") } body { h1 { +"你好,Kotlin!" } p { +"这是一个使用 " b { +"kotlinx.html" } +" 生成的段落" } ul { li { +"项目 1" } li { +"项目 2" } li { +"项目 3" } } } } println(htmlContent)}

这种方法对于在服务器端(Ktor)创建报告、邮件模板或动态页面特别有用。



3. Ktor Client + Jsoup — 用于带HTTP请求的解析

如果需要在解析前执行复杂的HTTP请求(带Cookie、标头、身份验证),可以方便地将Ktor Client与Jsoup结合使用。Ktor是一个异步HTTP客户端,与Kotlin协程完美集成。



示例:解析页面

推荐