1、简述
在现代 java 开发中,处理 html 数据是一项常见需求,无论是抓取网页数据、解析 html 文档,还是操作 dom 树,jsoup 都是一个强大的工具。它是一个基于 java 的 html 解析库,支持从 url、文件或字符串中解析 html,提供类似于 jquery 的 api,便于选择和操作 dom 元素。
本文将介绍 jsoup 的基本功能,并通过多个详细的代码示例展示如何使用它解析和操作 html。
2、为什么选择 jsoup?
- 简单易用:api 设计友好,功能丰富。
- 强大的选择器:支持 css 选择器和 dom 遍历。
- 灵活的 html 操作:可以轻松修改 html。
- 兼容性强:支持解析 html5 和宽松的 html。
- 高效:可以从 url 快速抓取内容。
在使用 jsoup之前,需要添加其依赖。以下是 jsoup 的 maven 依赖:
<dependency> <groupid>org.jsoup</groupid> <artifactid>jsoup</artifactid> <version>1.15.4</version> </dependency>
3、基本使用方法
spring boot 集成 jsoup,以下示例将演示如何使用 jsoup 解析 html 文件和操作 dom。
3.1 从 url 抓取网页内容
import org.jsoup.jsoup; import org.jsoup.nodes.document; public class jsoupfromurl { public static void main(string[] args) { try { // 从 url 抓取网页内容 document document = jsoup.connect("https://lsk-ww.cn").get(); // 输出网页标题 system.out.println("title: " + document.title()); // 输出网页的第一段文字 system.out.println("first paragraph: " + document.select("p").first().text()); } catch (exception e) { e.printstacktrace(); } } }
3.2 从字符串解析 html
import org.jsoup.jsoup; import org.jsoup.nodes.document; public class jsoupfromstring { public static void main(string[] args) { string html = "<html><head><title>jsoup example</title></head>" + "<body><p>hello, jsoup!</p></body></html>"; // 解析 html 字符串 document document = jsoup.parse(html); // 输出标题和段落内容 system.out.println("title: " + document.title()); system.out.println("body text: " + document.body().text()); } }
3.3 使用 css 选择器提取内容
import org.jsoup.jsoup; import org.jsoup.nodes.document; import org.jsoup.select.elements; public class jsoupcssselector { public static void main(string[] args) { string html = "<html><body>" + "<div class='content'><h1>header</h1><p>paragraph 1</p></div>" + "<div class='footer'><p>footer paragraph</p></div>" + "</body></html>"; // 解析 html document document = jsoup.parse(html); // 使用 css 选择器提取内容 elements content = document.select(".content h1"); system.out.println("header: " + content.text()); elements footer = document.select(".footer p"); system.out.println("footer: " + footer.text()); } }
3.4 修改 html 内容
import org.jsoup.jsoup; import org.jsoup.nodes.document; public class jsoupmodifyhtml { public static void main(string[] args) { string html = "<html><body><p>original paragraph</p></body></html>"; // 解析 html document document = jsoup.parse(html); // 修改段落内容 document.select("p").first().text("updated paragraph"); // 输出修改后的 html system.out.println(document.html()); } }
3.5 提取网页中的链接和图片
import org.jsoup.jsoup; import org.jsoup.nodes.document; import org.jsoup.nodes.element; import org.jsoup.select.elements; public class jsoupextractlinks { public static void main(string[] args) { string html = "<html><body>" + "<a href='https://example.com'>example</a>" + "<img src='image.jpg' alt='example image'>" + "</body></html>"; // 解析 html document document = jsoup.parse(html); // 提取链接 elements links = document.select("a[href]"); for (element link : links) { system.out.println("link: " + link.attr("href") + " text: " + link.text()); } // 提取图片 elements images = document.select("img[src]"); for (element image : images) { system.out.println("image: " + image.attr("src") + " alt: " + image.attr("alt")); } } }
3.6 处理表单数据
import org.jsoup.connection; import org.jsoup.jsoup; import org.jsoup.nodes.document; public class jsoupformexample { public static void main(string[] args) { try { // 提交表单 connection.response response = jsoup.connect("https://example.com/login") .data("username", "user123") .data("password", "pass123") .method(connection.method.post) .execute(); // 获取响应的 html document document = response.parse(); system.out.println("response: " + document.body().text()); } catch (exception e) { e.printstacktrace(); } } }
4、使用场景
- web 抓取:提取网页内容,如标题、段落、链接等。
- html 清洗:清理和格式化用户生成的 html。
- 表单提交:模拟用户登录或提交数据。
- dom 操作:解析和修改 html 文件。
- 数据提取:从 html 表格中提取结构化数据。
5、总结
jsoup 是处理 html 的强大工具,具备快速抓取、解析和操作 html 的能力,适合多种应用场景。
常见的优点:
- 使用简单,学习成本低。
- 功能强大,支持多种 html 操作。
- 兼容性强,能处理各种 html 格式。
常见的缺点:
- 仅支持单线程操作,抓取效率有限。
- 对于动态加载的网页(如 ajax),需要结合其他工具使用。
以上就是java利用jsoup解析和操作html的技术指南的详细内容,更多关于java jsoup解析和操作html的资料请关注代码网其它相关文章!
发表评论