专栏首页一个会写诗的程序员的博客使用Kotlin 和 Jsoup库实现一个极简的HTML Parser库《Kotlin极简教程》正式上架:

使用Kotlin 和 Jsoup库实现一个极简的HTML Parser库《Kotlin极简教程》正式上架:

当我们有了一个网页的源代码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/kotlin_tutorials


KotlinChina编程社区 微博

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


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 并发编程中的死锁 ( Kotlin 语言讲解)

    在操作系统中的并发处理场景中, 进程对资源的持有与请求过程中,会产生死锁. Say, Process A has resource R1 , Process ...

    一个会写诗的程序员
  • mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQLmysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL

    在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更...

    一个会写诗的程序员
  • 跨境电商不得不留意的4个新趋势

    根据天眼查专业版数据,截至2020年9月28日,以工商登记为准,我国今年新增约8.7万家跨境电商相关企业。

    一个会写诗的程序员
  • ES5中的继承

    面向对象的三大特性是:封装、继承、多态。其中继承是最难理解的,也是最重要的部分。 JS中本身没有专门继承的语法,它是使用各种代码的模拟来实现的。即使ES6有了正...

    kai666666
  • 僵小鱼的故事

    许多年之后,面对同一个作图需求,僵小鱼将会回想起,在微信群里提出相同问题的那个遥远的上午

    生信技能树jimmy
  • js api 之 fetch、querySelector、form、atob及btoa

    转载请注明出处: https://www.cnblogs.com/funnyzpc/p/11095862.html

    上帝
  • 重置密码

    当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能。在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可...

    追梦人物
  • HTML+CSS纯干货就业前基础到精通系统学习2016/9/3

    1:HTML纯干货学习后的达到的效果 (1):会使用HTML的基本结构,创建网页 (2):会使用文本字体相关标签,实现文字修饰和布局 (3):会使用图像、超链接...

    别先生
  • tkinter -- Frame

    ...

    py3study
  • SpringBoot 看似复杂的Environment,其实很简单

    喜欢写代码,讨厌配环境 我相信这十个字的小标题代表了大多数码农的心声。 十年前读大学时,学校开设了C语言还有C++。但是学习这两种语言,对于新手来说非常没...

    Java3y

扫码关注云+社区

领取腾讯云代金券