基础工具之jsoup工具

说明

通过工具可以很方便的对html的全文进行解析,包括内容,元素,属性搜索和获取,可以通过级联元素和级联属性进行定位获取。

引入

maven引入

XML 复制代码
<dependency>
    <groupId>com.tfgee.mv</groupId>
    <artifactId>tbtools-common-box</artifactId>
    <version>0.0.2</version>
</dependency>

使用示例

java 复制代码
/**
 * 
 */
package com.tb.commonbox.JsoupHelper;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;

import com.tb.commonbox.JsoupHelper.entity.TagInfo;
import com.tb.commonbox.log.TbToolsCommonLogFactory;
import com.tb.commonbox.log.impl.TbToolsCommonLogImpl;

/**
 * 
 * 2026年2月4日
 * Think
 */
public class Demo {
	
	final static TbToolsCommonLogImpl log = TbToolsCommonLogFactory.init().getT();

	public static void main(String[] args) {
		
		String content = "<body id=\"body\"> "
				+ "<ul class=\"ul1 cl\">"
				+ 	"<li>测试1</li>"
				+ 	"<li><a href=\"连接\">点击</a></li>"
				+ 	"<li><a href=\"连接12\">点击2</a></li>"
				+ "</ul> "
				+ "<ul class=\"ul2 cl\">"
				+ 	"<li>测试2<li>"
				+ 	"<li><a href=\"连接\">点击</a></li>"
				+ 	"<li><a href=\"连接22\">点击2</a></li>"
				+ "</ul> "
				+ "</body>";
		
		//根据id取内容
		String body = JsoupHelper.getContentById(content, "body");
		log.log(body);
		
		/**
		 * 示例1
		 */
		log.log(">>>>>>>>>>>>>>>示例1 ");
		TagInfo tagInfo = new TagInfo();
		tagInfo.setTagName("li");
		tagInfo.parent().setTagName("ul").addAttr("class", "ul1 cl");
		
		List<TagInfo> tagInfos = JsoupHelper.getContentByTag(content, tagInfo);
		if (CollectionUtils.isEmpty(tagInfos)) {
			log.error("未找到内容");
		}else {
			tagInfos.stream().forEach(x->{

				log.log("匹配标签:"+x.getTagName());
				log.log("匹配的包裹文本:"+x.getContent());
				
			});
		}
		
		/**
		 * 示例2
		 */
		log.log(">>>>>>>>>>>>>>>示例2 ");
		TagInfo tagInfo2 = new TagInfo();
		tagInfo2.setTagName("a").setContent("点击2");;
		tagInfo2.parent().setTagName("li");
		tagInfo2.parent().parent().setTagName("ul").addAttr("class", "ul2 cl");
		
		List<TagInfo> tagInfos2 = JsoupHelper.getContentByTag(content, tagInfo2);
		if (CollectionUtils.isEmpty(tagInfos2)) {
			log.error("未找到内容");
		}else {
			tagInfos2.stream().forEach(x->{

				log.log("匹配标签:"+x.getTagName());
				log.log("匹配的包裹文本:"+x.getContent());
				log.log("匹配标签的属性:"+x.getAttrs().get("href"));
			});
		}
	}
}

结果示例

log:<ul class="ul1 cl">

<li>测试1</li>

<li><a href="连接">点击</a></li>

<li><a href="连接12">点击2</a></li>

</ul>

<ul class="ul2 cl">

<li>测试2</li>

<li></li>

<li><a href="连接">点击</a></li>

<li><a href="连接22">点击2</a></li>

</ul>

log:>>>>>>>>>>>>>>>示例1

log:匹配标签:li

log:匹配的包裹文本:测试1

log:匹配标签:li

log:匹配的包裹文本:<a href="连接">点击</a>

log:匹配标签:li

log:匹配的包裹文本:<a href="连接12">点击2</a>

log:>>>>>>>>>>>>>>>示例2

log:匹配标签:a

log:匹配的包裹文本:点击2

log:匹配标签的属性:连接22

相关推荐
皮皮林5517 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊12 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing13 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家1 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺1 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602731 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端
桦说编程1 天前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化