Jsoup

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。Jsoup,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

转译

	// 原始HTML字符串,包含一些特殊字符和实体
	String html = "<html><body><h1>欢迎来到我的网站 &lt;3</h1><p>这是一个带有特殊字符的文本: < > & ' \"</p></body></html>";
	// 使用Jsoup解析HTML字符串
	Document doc = Jsoup.parse(html);
	// 设置输出设置,包括转义模式为EscapeMode.xhtml
	OutputSettings outputSettings = doc.outputSettings();
	outputSettings.escapeMode(EscapeMode.xhtml);
	// 转译HTML字符串
	String escapedHtml = doc.html();
	// 输出转译后的HTML字符串
	System.out.println("Escaped HTML:");
	System.out.println(escapedHtml);

    String html = "<html><body><p>这是一个带有特殊字符的文本: &lt;p&gt;</p></body></html>";
    // 使用StringEscapeUtils.unescapeHtml4方法反转译HTML实体
    String unescapedHtml = StringEscapeUtils.unescapeHtml4(html);
    //<html><body><p>这是一个带有特殊字符的文本: <p></p></body></html>
    unescapedHtml = StringEscapeUtils.escapeHtml4(html);
    String htmlEncoded = "<span>&lt;div&gt;测试&lt;/div&gt;</span>";  
    String decodedHtml = Entities.unescape(htmlEncoded);  
    // 输出反转译后的HTML字符串
    System.out.println("Unescaped HTML:");
    System.out.println(unescapedHtml);

自定义标签转换

   String html = "&lt;tps&gt;测试&lt;tps&gt;";
   String html = "&lt;tps&gt;测试&lt;/tps&gt;";

   // 使用"(.*?)"来匹配任意内容(非贪婪匹配)
   String regex = "&lt;tps&gt;(.*?)&lt;tps&gt;";
   String regex = "&lt;tps&gt;(.*?)&lt;/tps&gt;";

   // 创建Pattern对象
   Pattern pattern = Pattern.compile(regex);

   // 创建Matcher对象
   Matcher matcher = pattern.matcher(html);

   if (matcher.find()) {
       // 获取匹配的内容组(这里是第1组,因为我们在正则表达式中使用了())
       String content = matcher.group(1);

       // 使用matcher.replaceAll()方法替换匹配的内容
       String replacedHtml = matcher.replaceAll("<tps>" + content + "</tps>");

       System.out.println("Replaced HTML: " + replacedHtml);
   } else {
       System.out.println("No match found.");
   }
   System.out.println("&lt;tps&gt;测试&lt;/tps&gt;".replaceAll("&lt;tps&gt;(.*?)&lt;/tps&gt;", "<tps>$1</tps>"));
   Elements commonElements = doc1.select("*").retain("div"); // 保留相同的元素  
   Elements onlyInDoc1 = doc1.select("*").notIn(commonElements); // 只存在于doc1中的元素  
   Elements onlyInDoc2 = doc2.select("*").notIn(commonElements); // 只存在于doc2中的元素  

// 检查td是否有子节点且包含qts标签
if (!td.children().isEmpty() && td.getElementsByTag("qts").size() > 0) {
       // 移除td中的qts标签
       td.select("qts").remove();
   } else if (td.children().isEmpty()) {
       td.addClass("vb");
}
String html = "<html><body><p>Hello, World!</p ><p>Hello, Jsoup!</p ></body></html>";
Document doc = Jsoup.parse(html);
// 根据内容匹配HTML元素
Elements paragraphs = doc.select("p:contains(Jsoup)");
// 遍历匹配的元素,用div包裹并设置样式、class和id
for (Element paragraph : paragraphs) {
    // 创建新的<div>元素
    Element newDiv = doc.createElement("div");
    // 设置样式、class和id
    newDiv.attr("class", "myClass");
    newDiv.attr("id", "myId");
    //修改txt paragraph.text("Hello, Java!");  
    //System.out.println(p.nodeName()+"\t"+p.tagName()+"\t"+p.ownText()+"\t"+p.html());
    paragraph.wrap(newDiv.outerHtml());
    //paragraph.wrap("<div></div>");
    }
	System.out.println(doc.html());
	String modifiedHtml = doc.html();
	File outputHtmlFile = new File("put.html");
	Files.write(outputHtmlFile.toPath(), modifiedHtml.getBytes(StandardCharsets.UTF_8));

String html = "<p>123</p>";
    System.out.println("Start tag: " + getStartTag(html));
    System.out.println("End tag: " + getEndTag(html));
	Start tag: <p>
	End tag: </p>
	
public static String getStartTag(String html) {
   Pattern pattern = Pattern.compile("<([a-zA-Z0-9]+)[^>]*>");
   Matcher matcher = pattern.matcher(html);
   if (matcher.find()) {
       return matcher.group(0);
   }
   return null;
}

public static String getEndTag(String html) {
   Pattern pattern = Pattern.compile("</([a-zA-Z0-9]+)[^>]*>");
   Matcher matcher = pattern.matcher(html);
   if (matcher.find()) {
       return matcher.group(0);
   }
   return null;
}

工具类操作

String text = "<tag1>内容1</tag1><tag2>内容2</tag2>";
String tagPattern = "<(.*?)>(.*?)<\\/\\1>";
Pattern pattern = Pattern.compile(tagPattern);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
	System.out.println("全容:" + matcher.group(0));
    System.out.println("标签:" + matcher.group(1));
    System.out.println("内容:" + matcher.group(2));
}



public String removeHtmlTags(String html) {
 return html.replaceAll("<.*?>", "");
}

public static String getStartTag(String html) {
    Pattern pattern = Pattern.compile("<([a-zA-Z0-9]+)[^>]*>");
    Matcher matcher = pattern.matcher(html);
    if (matcher.find()) {
        return matcher.group(0);
    }
    return null;
}


 public static String getEndTag(String html) {
    Pattern pattern = Pattern.compile("</([a-zA-Z0-9]+)[^>]*>");
    Matcher matcher = pattern.matcher(html);
    if (matcher.find()) {
        return matcher.group(0);
    }
    return null;
 }
 String html = "<div>测试1</div><div>测试2</div>";
 // 解析HTML字符串
 Document doc = Jsoup.parse(html);
 // 选择所有的div元素
 Elements divs = doc.body().children();
 for (Element div : divs) {
     // 获取div内的文本节点
     TextNode textNode = div.textNodes().get(0);
     // 创建新的<b>元素并添加文本节点内容
     Element boldText = new Element("b");
     boldText.appendChild(new TextNode(textNode.text()));
     // 替换原有的文本节点为<b>元素
     textNode.replaceWith(boldText);
 }

  // 输出处理后的HTML字符串
  System.out.println(doc.html());


  String html = "<div>测试1</div><div>测试2</div>";  
  Document doc = Jsoup.parse(html);  
  Elements elements = doc.body().children(); // 选择body下所有元素  
   for (Element element : elements) {  
       String content = element.html(); // 获取元素内部HTML内容  
       String wrappedContent = "<b>" + content + "</b>"; // 将内容用<b>标签包裹  
       element.html(wrappedContent); // 设置修改后的内部HTML内容  
   }  
   String modifiedHtml = doc.html(); // 获取修改后的HTML字符串  
   String modifiedHtml = doc.body().html(); // 获取修改后的HTML字符串只包含body下的内容和标签舍掉htmlhead等  

   System.out.println(modifiedHtml); // 输出修改后的HTML内容  
   <html>
	 <head></head>
	 <body>
	  <div>
	   <b>测试1</b>
	  </div>
	  <div>
	   <b>测试2</b>
	  </div>
	 </body>
   </html>


 
  String html = "<div>测试1</div><div>测试2</div>";  
  Document doc = Jsoup.parse(html);  
  Elements elements = doc.body().children(); // 选择所有元素  
  for (Element element : elements) {  
      element.wrap("<div></div>"); // 将每个元素包裹在<b>标签中  
  }  
  String modifiedHtml = doc.html(); // 获取修改后的HTML字符串  
  System.out.println(modifiedHtml); // 输出修改后的HTML内容  
  <html>
   <head></head>
	 <body>
	  <div>
	   <div>
	    测试1
	   </div>
	  </div>
	  <div>
	   <div>
	    测试2
	   </div>
	  </div>
	 </body>
  </html>

 String html = "<html><head><title>Test</title></head><body><p>Some text <b>in bold</b> and <div>in a div</div>.</p></body></html>";  
 Document doc = Jsoup.parse(html);  
 Elements boldAndDiv = doc.select("b, div");//doc.select("b,div");  
 for (Element element : boldAndDiv) {  
      System.out.println(element.outerHtml());  
 }  


查找td->span
String html = "<html><head></head><body><table><tr><td>A</td></tr><tr><td><span>A1</span></td></tr></table></body>";  // 替换为实际HTML内容
// 解析HTML文档
Document doc = Jsoup.parse(html);
// 选择所有的<table>元素
Elements tables = doc.select("table");
for (Element table : tables) {
    // 对于每个表格,找到所有包含<span>的<td>元素
    Elements tdsWithSpans = table.select("td > span");  // 获取直接子级的span
    if (!tdsWithSpans.isEmpty()) {
        for (Element tdWithSpan : tdsWithSpans) {
            System.out.println("Found <td> containing <span>: " + tdWithSpan.html());
        }
    }
}
String html = "<html><head></head><body><table><tr><td>&lt;tps&gt;测试&lt;/tps&gt;</td></tr></table></body></html>";
      Document doc = Jsoup.parse(html);
      // 获取所有的td元素
      Elements tds = doc.select("td");
      for (Element td : tds) {
          // 查找td内的文本内容中包含的实体字符
          String content = td.html();
          //String content2 = StringEscapeUtils.unescapeHtml4(content1);
          if (content.contains("&lt;tps&gt;")) {//content2.contains("tps")
              // 将实体字符替换为实际的HTML标签,并添加类名
              String decodedContent = content.replace("&lt;tps&gt;", "<tps class=\"ab\">").replace("&lt;/tps&gt;", "</tps>");
              td.html(decodedContent);//td.html(content2);
          }
      }
// 输出处理后的HTML字符串
//        System.out.println(doc.html());
//        System.out.println(doc.body().html());
//        <table>
//        <tbody>
//         <tr>
//          <td>
//           <tps class="ab">
//                测试
//           </tps></td>
//         </tr>
//        </tbody>
//       </table>

获取table中第n个元素如tr

String html = "<table><tr><td>A1</td></tr><tr><td>1</td></tr><tr><td>1</td></tr><tr><td>1</td></tr></table>";
Document doc = Jsoup.parse(html);
// 获取table元素
Element table = doc.select("table").first();
//tr元素
Elements trs = doc.select("tr:not(:first-child)");  
//Elements trs = table.select("tr:nth-child(n+2)");
// 从第二个tr开始遍历
for (int i = 0; i < trs.size(); i++) {
    Element tr = trs.get(i);
    
    System.out.println("Second and subsequent TR: " + tr.html());
}
//span替换b标签
for (Element span : spans) {
     // 创建一个新的b元素
     Element b = new Element(Tag.valueOf("b"), "");
     // 将span的所有子节点移动到b元素中
     // 处理span的所有子节点
     for (Node child : span.childNodes()) {
         if (child instanceof TextNode) {
             // 将文本节点内容添加到b元素中
             b.appendText(((TextNode) child).text());
         } else {
             // 其他类型的节点(如HTML标签),将其克隆后添加到b元素中
             b.appendChild(child.clone());
         }
         // 替换原来的span为新的b元素
         span.replaceWith(b);
      }
 }
或者
Elements spans = rORd.getElementsByTag("span");
for (Element span : spans) {
           Element b = new Element(Tag.valueOf("b"), "");
           b.html(span.html());
           span.replaceWith(b);
}
Document document;
try {
  //POST请求
  System.out.println("POST 请求方式获取数据");
  document = Jsoup.connect("http://bp.shijialeya.top")
          .data("username", "jiale")  //添加请求数据参数。
          .userAgent("Mozilla AppleWebKit Chrome Safari Edg")  //设置请求用户代理头。
          .cookie("auth", "token")  //设置请求中要发送的 cookie。
          .timeout(2000)  //设置超时时间
          .post();
  //更多的 API查看文章末尾 Connection 接口的方法
  System.out.println(document);
 } catch (IOException e) {
     e.printStackTrace();
 }
document = Jsoup.parse(file, "UTF-8");

移除标签保留内容

String html = "<div><span style='color:red;font-size:15px'>22<cts style='color:red;'>测 试</cts>555</span>123123</div>";
Document doc = Jsoup.parse(html);
// 选择所有cts元素并移除它们,同时将其内容移到其父元素下多个doc.select("span>cts,span>p");
//doc.select("span:has(>cts), span:has(>p)");

Elements ctsElements = doc.select("span>cts");
for (Element cts : ctsElements) {
	Element parentSpan = cts.parent(); // 获取cts的父级span元素
	if (parentSpan.hasAttr("style")) { // 判断span是否有style属性
		String styleAttr = parentSpan.attr("style");
		// 进行您想要的样式内容检查
		if (styleAttr.contains("color:red") && styleAttr.contains("font-size:15px")) {
			Node prevNode = cts.previousSibling();
			Node nextNode = cts.nextSibling();
			List<Node> childNodesList = new ArrayList<>(Arrays.asList(cts.childNodes().toArray(new Node[0])));
			for (Node childNode : childNodesList) {
				if (prevNode != null) {
					prevNode.after(childNode);
				} else if (nextNode == null
						|| nextNode instanceof TextNode && ((TextNode) nextNode).isBlank()) {
					cts.parent().prependChild(childNode);
				} else {
					nextNode.before(childNode);
				}
			}
			cts.remove(); // 移除空的cts标签
		}
	}
}
System.out.println(doc.html());
}

移除p

String html = "<div><span style='color:red;font-size:15px'>34<p>22</p><b>22</b>3q<p>33</p></div>";
Document doc = Jsoup.parse(html);
// 选择所有的<p>标签
Elements ets = doc.select("span>p");
for (Element p : ets) {
    p.remove(); // 直接移除原有的p标签
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/200906.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!