美文网首页郭志敏的程序员书屋Kotlin禅与计算机程序设计艺术
使用Kotlin 和 Jsoup库实现一个极简的HTML Par

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

作者: 光剑书架上的书 | 来源:发表于2017-09-30 00:04 被阅读244次

    当我们有了一个网页的源代码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 { 魔鬼身材天使脸蛋美丽动人女神气质} 的您。大家请多支持!!!您的支持,是我源源不断的写作的动力! 如果您有任何问题,欢迎随时与我交流~


    相关文章

      网友评论

        本文标题:使用Kotlin 和 Jsoup库实现一个极简的HTML Par

        本文链接:https://www.haomeiwen.com/subject/czgwextx.html