使用Kotlin 和 Jsoup库实现一个极简的HTML Parser库

当我们有了一个网页的源代码HTML,这个时候我们很想像在JavaScript中的DOM API一样操作解析这个页面的元素。

比如说,百度首页,我们在浏览器console中执行js

document.getElementsByTagName("title")[0].innerHTML

我们会得到

百度一下,你就知道

我们使用后端代码怎样搞呢?

有很多API库。

我们使用Kotlin + Jsoup简单实现一个玩玩。

效果是


fun main(args: Array<String>) {
    val url = URL("https://www.baidu.com/")
    val html = url.readText()

    //document.getElementsByTagName("title")[0].innerHTML
    val elements = HTMLParser.getElementsByTag(html, "title")
    elements.eachText().forEach { println(it) }

    val form = HTMLParser.getElementsById(html, "form")
    form.allElements.forEach {
        println(it.html())
    }

}

输出

百度一下,你就知道
<input type="hidden" name="bdorz_come" value="1"> 
<input type="hidden" name="ie" value="utf-8"> 
<input type="hidden" name="f" value="8"> 
<input type="hidden" name="rsv_bp" value="1"> 
<input type="hidden" name="rsv_idx" value="1"> 
<input type="hidden" name="tn" value="baidu">
<span class="bg s_ipt_wr"><input id="kw" name="wd" class="s_ipt" value maxlength="255" autocomplete="off" autofocus></span>
<span class="bg s_btn_wr"><input type="submit" id="su" value="百度一下" class="bg s_btn" autofocus></span>






<input id="kw" name="wd" class="s_ipt" value maxlength="255" autocomplete="off" autofocus>

<input type="submit" id="su" value="百度一下" class="bg s_btn" autofocus>

闲话休絮,直接进入正题。

添加库依赖

    // https://mvnrepository.com/artifact/org.jsoup/jsoup
    compile group: 'org.jsoup', name: 'jsoup', version: '1.10.3'

写Kotlin应用工具类

package com.easy.kotlin

import org.jsoup.Jsoup
import org.jsoup.nodes.Element
import org.jsoup.select.Elements
import java.net.URL

object HTMLParser {
    fun getElementsByAttributeValue(html: String, attribute: String, name: String): Elements {
        val document = Jsoup.parse(html)
        return document.html(html).getElementsByAttributeValue(attribute, name)
    }

    fun getElementsByClass(html: String, className: String, name: String): Elements {
        val document = Jsoup.parse(html)
        return document.html(html).getElementsByClass(className)
    }

    fun getElementsByTag(html: String, tagName: String): Elements {
        val document = Jsoup.parse(html)
        return document.html(html).getElementsByTag(tagName)
    }

    fun getElementsById(html: String, id: String): Element {
        val document = Jsoup.parse(html)
        return document.html(html).getElementById(id)
    }


}

好了,收工。

源代码工程参见:

https://github.com/EasyKotlin...


KotlinChina编程社区 微博

《Kotlin极简教程》正式上架:

点击这里 > 去京东商城购买阅读
点击这里 > 去天猫商城购买阅读
非常感谢 if (boy) { 帅气英俊潇洒} else { 魔鬼身材天使脸蛋美丽动人女神气质} 的您。大家请多支持!!!您的支持,是我源源不断的写作的动力! 如果您有任何问题,欢迎随时与我交流~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值