添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

对于一段HTML文本,需要去掉文本内所有HTML标签,只保留纯文本内容,可以怎么实现?看到很多写正则表达式,用StringUtils里的replace方法实现的。我自己也尝试了一下,发现正则匹配的结果并不是完全可靠的。由此,本篇博客将介绍一个Java库,可以实现对HTML文本的各种操作,简单好用。

jsoup是一款Java的HTML解析器,可以直接解析某个URL地址或HTML内容。它提供了一套非常简单好用的API,可通过DOM,CSS以及类似于jQuery的操作方法来读取和操作数据。

jsoup是一个根据自由MIT许可证分发的开源项目,源代码可在GitHub获得。

核心类及方法

1. org.jsoup.Jsoup类

Jsoup类是任何Jsoup程序的入口点,并将提供从各种来源加载和解析HTML文档的方法。核心方法如下:

  • Connection connect(String url):创建并返回URL的连接
  • Document parse(File in,String charsetName):将指定的字符集文件解析成文档
  • Document parse(String html):将给定的html代码解析成文档
  • String clean(String bodyHtml,Whitelist whitelist):从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。

2. org.jsoup.nodes.Document类

该类表示通过Jsoup库加载HTML文档。可以使用此类执行适用于整个HTML文档的操作。下面列举一些核心方法:

  • Element body():获取文档中body或frameset元素内容,如果文档中没有body元素,返回的文本中会加上该元素
  • String title():获取文档中title元素内容,如果没有则返回空
  • Element normalise():返回完整的文档,会自动补充文档的html、head、body元素
  • Document clone():创建一个新文档,将拷贝所有节点及子节点

3. org.jsoup.nodes.Element类

HTML元素是由标签名称,属性和子节点组成。 使用Element类,可以帮助我们提取数据,遍历节点和操作HTML。

  • Elements getAllElements():获取所有元素,包括自身及所有子元素
  • Element getElementById(String id):通过id查询元素,包括其下层元素
  • Elements getElementsByTag(String tagName):获取特定标签下所有元素,包括其下层元素
  • Elements getElementsByAttribute(String key):获取指定属性下所有元素
  • Elements getElementsByClass(String className):获取指定class下所有元素,包括其下层元素

使用方法与示例

1. Maven依赖

使用jsoup,只需要引入一个依赖即可

<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.15.3</version>
</dependency>

2. 使用示例

  • 加载HTML文档
//1.从URL地址加载html
//方法一:connection连接URL
Document doc = Jsoup.connect("https://www.baidu.com/").get();
//方法二:parse解析URL
Document document = Jsoup.parse(new URL("https://www.baidu.com/"), 30000);
//2.加载html文件
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );
//3. 直接解析html文本
String html = "<html><head><title>解析HTML</title></head>"
              + "<body><p>解析方法.</p></body></html>";
Document document = Jsoup.parse(html);
  • 处理HTML文本,去除特殊字符、html标签等
//1. clean方法
String content = Jsoup.clean("<div class=\"s-top-more-title c-font-normal c-color-t\">\n" +
                "       百科\n" +
                "      </div>", Whitelist.none());
log.info("clean结果:" + content);
//2. parse方法后通过text获取内容
String text = Jsoup.parse("<div class=\"s-top-more-title c-font-normal c-color-t\">\n" +
                "       百科\n" +
                "      </div>").text();
log.info("parse-text结果:" + text);
//以上结果都是“百科”
  • Document获取title、body、添加元素、复制
Document doc = Jsoup.connect("https://v2.cn.vuejs.org/v2/guide/").get();
//1. 获取title
System.out.println("title结果:" + doc.title());
//结果:介绍 — Vue.js
//2. 获取body
System.out.println("body结果:" + doc.body());
//结果:<body></body>内的所有内容
//3. 添加一个元素
Element element = doc.createElement("@@@");
//结果:<@@@></@@@>
//4. 复制doc
Document clone = doc.clone();
//结果:整个html文档拷贝
  • 操作DOM,根据id、class、tag等获取元素,与js调用方法相同
Document doc = Jsoup.connect("https://v2.cn.vuejs.org/v2/guide/").get();
//1. 根据id获取元素
System.out.println("根据id获取元素结果:" + doc.getElementById("search-query-nav"));
//结果:<input type="text" id="search-query-nav" class="search-query st-default-search-input" aria-label="搜索">
//2. 根据class获取元素
System.out.println("根据class获取元素结果:" + doc.getElementsByClass("nav-link"));
//结果:<a class="nav-link current">学习</a>
//<a href="/v2/guide/" class="nav-link current">教程</a>...
//3. 根据tag获取元素
System.out.println("根据tag获取元素结果:" + doc.getElementsByTag("img"));
//结果:
//<img id="s-稀土掘金技术社区" alt="稀土掘金技术社区">
//<img src="/images/components.png" alt="Component Tree">...
  • 使用选择器语法查找元素
 Document doc = Jsoup.connect("https://v2.cn.vuejs.org/v2/guide/").get();
 //1. 带有href属性的a元素
 Elements links = doc.select("a[href]");
 System.out.println("带href属性的a元素结果:" + links);
 //结果:<a class="logo" href="/"></a>
 //<a target="_blank" rel="noopener" href="https://v3.cn.vuejs.org/">在这里</a>...
 //2. 扩展名为.png的图片
 Elements png = doc.select("img[src$=.png]");
 System.out.println("扩展名为.png图片的结果:" + png);
 //结果:<img src="/images/components.png" alt="Component Tree">

这个工具,让服务端也能很容易地处理HTML文本了。除了自己用到的一些方法,通过本篇博客的总结,也发现了其更多方法,以后查API文档应该就足够用了。

文本强大,通过链接和交互方式组织和呈现信息的文本形式。可以包含图片,音频的信息。由标签构成的语言。HTML的标签都是提前定义好的,使用不同的标签可以表示不同的内容。 Jsoup一款基于 Java 语言的开源项目,主要用于请求 URL 获取网页内容、解析 HTML 和 XML 文档。使用 Jsoup 可以非常轻松地构建一些轻量级网络爬虫。 网络爬虫,就是在浏览器上,代替人类爬取数据,Java网络爬虫就是通过Java编写爬虫代码,代替人类从网络上爬取信息数据。程序员通过设定既定的规则,让程序代替我们从网络上获取海量我们需要的数据,比如图片,企业信息等。爬虫的关键是对于网页信息的解析jsoup是一个用于处理现实世界HTMLJava库。它提供了一个非常方便的API,用于获取URL以及提取和操作数据,使用最好的HTML5DOM方法和CSS选择器。 jsoup一款JavaHTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,  可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 1.2、Jsoup的主要功能 1)从一个URL,文件或字符串中解析HTML 2)使用DOM或CSS选择器来查找、取出数据 3)可操作HTML元素、属性、... jsoup一款基于 JavaHTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用,从网站获取dom结构,从而解析下载数据。tagname: 通过标签查找元素,例如通过"a"来查找< a >标签。#id: 通过ID查找元素,比如通过#logo查找< p id=“logo”> 随着爬虫技术在互联网上越来越流行,如何处理我们爬到的HTML。。。我们当然可以针对性的代码处理每个HTML,但是每个网站的每个HTML格式,样式都可能会有比较大的差异。市场上急需要一个好用高效的类库,可以将html中的数据,正常解析,抽取出来     jsoup一款JavaHTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,  可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 1.2、Jsoup的主要功能     1)从一个URL,文件或字符串中解析HTML     2)使用DOM或CSS选择器来查找、取出数据 jsoup一款基于 JavaHTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。......... 最近用到了Java解析Html的一个库Jsoup, 这儿是官网, 在此分享给大家,有这方面需要的朋友可以试一试。有三个类需要我们了解,分别是Document,Elements,Element大至用法有两步第一步:加载html,,这儿提供两种方式,一种是从本地加载,一种是从网上直接加载。从本地加载:String html = "YOU HTML STRING";Document doc = Jsou...