使用Kotlin 和 Jsoup库实现一个极简的HTML Parser库-阿里云开发者社区

开发者社区> 程序员诗人> 正文

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

简介: 当我们有了一个网页的源代码HTML,这个时候我们很想像在JavaScript中的DOM API一样操作解析这个页面的元素。 比如说,百度首页,我们在浏览器console中执行js document.getElementsByTagName("title")[0].innerHTML 我们会得到 百度一下,你就知道 我们使用后端代码怎样搞呢? 有很多API库。
+关注继续查看

当我们有了一个网页的源代码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编程社区 微博

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

点击这里 > 去京东商城购买阅读

点击这里 > 去天猫商城购买阅读

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
7291 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
25921 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
9566 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
8996 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
8125 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4451 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
20973 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
2955 0
+关注
程序员诗人
一个会写诗的程序员
831
文章
14
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载