Jsoup对html文档的解析

时间:2021-11-20 19:26:23

    最近实习在用jsoup写的一个html解析器解析网站,提取内容。发现这个框架很好用,这里简单总结下,基于IBM社区的文档,原文:https://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/index.html#N1005A

Jsoup的好处在于直接解析某个URL,文本的信息,可以类似于DOM操作,直接提取某个标签,然后可以加一些限制条件,比如 is(), parent(),匹配某个attribute的值等等,可以根据节点名称或者是 HTML 元素的 id 来获取对应的元素或者元素列表。

类层次图:Jsoup对html文档的解析

 jsoup可以直接对字符串,url,文本解析。

字符串:Document doc = Jsoup.parse(html);

URL: Document doc = Jsoup.connect("http://www.oschina.net/").get();  

文本:File input = new File("D:/test.html");  Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");第三个名为 baseURL 的参数的意思就是当 HTML 文档使用相对路径方式引用外部文件时,jsoup 会自动为这些 URL 加上一个前缀,也就是这个 baseURL。

功能超强的选择器:Elements links = doc.select("a[href]");  // 选择具有href的属性

         Elements pngs = doc.select("img[src$=.png]");// 所有引用 png 图片的元素

        doc.select("div.comments a").attr("rel", "nofollow"); // 为所有链接增加 rel=nofollow 属性

        doc.select("div.comments a").addClass("mylinkclass"); // 为所有链接增加 class="mylinkclass" 属性

        doc.select("img").removeAttr("onclick"); // 删除所有图片的 onclick 属性

        doc.select("input[type=text]").val(""); // 清空所有文本输入框中的文本

HTML 文档清理:jsoup 使用一个 Whitelist 类用来对 HTML 文档进行过滤脚本,提供几个常用方法:

           node()//只允许包含文本信息

          basic()://允许的标签包括:a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, strike, strong等属性

          simpleText()://只允许 b, em, i, strong, u 这些标签

jsoup的选择器:tagname()//使用命名空间的标签定位 

        ns|tag:使用命名空间的标签定位,例如 fb:name 来查找 <fb:name> 元素

        #id:使用元素 id 定位,例如 #logo   

        .class:使用元素的 class 属性定位,例如 .head

jsoup还支持组合语法。