使用Kotlin 和 Jsoup库实现一个极简的HTML Parser库
2017-09-30 00:00
260 查看
使用Kotlin 和 Jsoup库实现一个极简的HTML Parser库
当我们有了一个网页的源代码HTML,这个时候我们很想像在JavaScript中的DOM API一样操作解析这个页面的元素。
比如说,百度首页,我们在浏览器console中执行js
我们会得到
我们使用后端代码怎样搞呢?
有很多API库。
我们使用Kotlin + Jsoup简单实现一个玩玩。
效果是
输出
闲话休絮,直接进入正题。
添加库依赖
写Kotlin应用工具类
好了,收工。
源代码工程参见:
https://github.com/EasyKotlin/kotlin_tutorials
当我们有了一个网页的源代码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].innerHTMLval 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 { 魔鬼身材天使脸蛋美丽动人女神气质} 的您。大家请多支持!!!您的支持,是我源源不断的写作的动力! 如果您有任何问题,欢迎随时与我交流~
相关文章推荐
- 【使用JSOUP实现网络爬虫】从一个文件加载一个文档
- 【使用JSOUP实现网络爬虫】使用DOM方法来遍历一个文档
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- 【使用JSOUP实现网络爬虫】解析一个HTML字符串
- 【使用JSOUP实现网络爬虫】解析一个body片断
- 【使用JSOUP实现网络爬虫】从一个URL加载一个Document
- 【使用JSOUP实现网络爬虫】使用DOM方法来遍历一个文档
- 【使用JSOUP实现网络爬虫】解析一个HTML字符串
- 【使用JSOUP实现网络爬虫】修改数据-设置一个元素的HTML内容
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的...
- 【使用JSOUP实现网络爬虫】解析一个body片断
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- 【使用JSOUP实现网络爬虫】解析一个body片断
- 【使用JSOUP实现网络爬虫】从一个URL加载一个Document
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- 【使用JSOUP实现网络爬虫】修改数据-设置一个元素的HTML内容
- Android中使用Kotlin实现一个简单的登录界面