首页 > 编程语言 >java-jsoup-解析html文本

java-jsoup-解析html文本

时间:2022-10-28 15:03:39浏览次数:51  
标签:java auth jsoup html sbf import append


java-jsoup-解析html文本


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


一、maven 依赖

<!-- dom 解析 -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>




二、实例


目标:


1.删除html中有指定属性的dom节点


2.将此逻辑加入 filter 中,可以对静态html、动态jsp等标准 html 输出流,进行权限控制(需要权限控制的节点需要加埋点,即:auth-code 属性)



package com.demo.preview;


import static org.junit.Assert.*;


import java.util.ArrayList;


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;


import com.lowagie.text.List;


import me.grass.coder.Debug;


/**
*
* @author xxj
*/
public class jsoupTest {


@Test
public void testHtml() {
StringBuffer sbf = new StringBuffer();
sbf.append("<!doctype html>");
sbf.append("<html lang=\"en\">");
sbf.append(" <head>");
sbf.append(" <meta charset=\"UTF-8\">");
sbf.append(" <meta name=\"Generator\" content=\"EditPlus®\">");
sbf.append(" <meta name=\"Author\" content=\"\">");
sbf.append(" <meta name=\"Keywords\" content=\"\">");
sbf.append(" <meta name=\"Description\" content=\"\">");
sbf.append(" <title>Document</title>");
sbf.append(" </head>");
sbf.append(" <body>");
sbf.append(" <div id=\"myDiv\"></div>");
sbf.append(" <div auth=\"myDiv\"></div>");
sbf.append(" <div auth-code=\"111\"><div id=\"\">0000</div></div>");
sbf.append(" <div auth-code=\"222\">bb</div>");
sbf.append(" <div auth-code=\"333\"><div id=\"\">5555</div></div>");
sbf.append(" <div auth-code=\"444\">dd</div>");
sbf.append(" </body>");
sbf.append("</html>");

//授权码
ArrayList<String> auths= new ArrayList<String>();
auths.add("111");
auths.add("222");

String html = sbf.toString();
Document doc = Jsoup.parse(html);
Elements eles=doc.select("[auth-code]");//查找有指定属性的元素

Debug.printFormat("匹配:{0}",eles.size());
if(eles==null || eles.size()==0){
Debug.print("无内容");
return;
}

Element e;
Integer n=0;
String authCode;
for(int i=0;i<eles.size();i++){
e = eles.get(i);
Debug.printFormat("{0}.{1}"
,(++n)
,e.outerHtml());
authCode = e.attr("auth-code");
//鉴权
if(!hasAuth(authCode,auths))
e.remove();
}
Debug.print("html内容;",doc.outerHtml());
}
/**
* 鉴权
* @param auth
* @param auths
* @return
*/
boolean hasAuth(String auth,ArrayList<String> auths){
if(auth==null || auth.isEmpty())
return false;

return auths.contains(auth);
}
}



标签:java,auth,jsoup,html,sbf,import,append
From: https://blog.51cto.com/u_4518216/5804882

相关文章

  • java + springmvc 酷炫验证码分享
    java+springmvc酷炫验证码分享一、maven依赖<!--https://mvnrepository.com/artifact/com.github.bingoohuang/patchca--><!--验证码--><dependency><groupId>com......
  • Java8新特性4:Optional
    1Optional介绍Optional类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional是个容器:它可以保存类型T的值,或者......
  • java-guava 布隆筛选器用法及比较
    java-guava布隆筛选器用法及比较布隆筛选器使用场景:   一般用于一个字符串是否存的预测,如爬虫是否抓取过这个URL等。优点:   对于特大的集合来说,检索快、占用内......
  • java springboot 2.x 环境搭建
    环境:javaversion1.8ApacheMaven3.2.2 ide:ideaspringboot:2.1.3.RELEASE创建步骤:1file=>new=>mudule...2选择SpringInitializr:modulesdk选择1.7,其他默认......
  • java-字符串拼接几种方法的性能比较
    java-字符串拼接几种方法的性能比较一、测试方法:String.format();MessageFormat.format();StringBuilder();二、测试结果:性能:StringBuilder>MessageFormat>String三......
  • 力扣907(java)-子数组的最小值之和(中等)
    题目:给定一个整数数组arr,找到min(b) 的总和,其中b的范围为arr的每个(连续)子数组。由于答案可能很大,因此返回答案模10^9+7。 示例1:输入:arr=[3,1,2,4]输......
  • java-floyd最短距离算法
    java-floyd最短距离算法publicstaticvoidmain(String[]args){MatrixDGmatrixDG=newMatrixDG();System.out.println("初始化邻接矩阵");matrixDG.print......
  • Java-五种线程池,四种拒绝策略,三类阻塞队列
    Java-五种线程池,四种拒绝策略,三类阻塞队列(常用)三类阻塞队列:   //1有界队列   workQueue=newArrayBlockingQueue<>(5);//基于数组的先进先出(FIFO)队列,支持公......
  • python-爬虫-使用 tomd 库,将 html 转换为 markdown 文档
    python-爬虫-使用tomd库,将html转换为markdown文档编码问题搞死人!注意:写python前要先设置两个位置的编码,一个文件顶部设置文件编码,一个是impor......
  • java-并发集合-阻塞队列 LinkedBlockingQueue 演示
    java-并发集合-阻塞队列LinkedBlockingQueue演示packageme.grass.demo.concuronte;importjava.util.Date;importjava.util.concurrent.CountDow......