基础工具之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

相关推荐
飞天狗1117 分钟前
零基础JavaWeb入门——第2课:让网页“活”起来 —— JSP是什么?
java·开发语言·前端·后端·web
梦@_@境36 分钟前
面向 Spring Boot 的可观测业务流程编排引擎
java·spring boot·后端
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【77】执行取消
java·人工智能·spring
醇氧1 小时前
【Linux】Java 服务生产级部署指南:实现常驻后台、开机自启与系统服务化管理
java·开发语言
JAVA面经实录9171 小时前
Netty 全套系统化学习文档(零基础到高阶面试完整版)
java·后端
weixin_523185321 小时前
Java面试高频题:Integer缓存机制与 equals、== 区别
java·缓存·面试
Hui Baby2 小时前
MCP SSE协议发送注意
java
仙俊红2 小时前
SpringBoot启动原理
java·spring boot·后端
星间都市山脉2 小时前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx
namexingyun2 小时前
拆解Fable 5三重安全护栏:模型路由、蒸馏防护与生物安全分类器的技术原理 - 微元算力(weytoken)
java·人工智能·python·安全·架构·ai编程