Java HtmlParse提取标签中的值操作

☆代码示例:

代码块语法遵循标准markdown代码,例如:

package cas;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.StringFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.util.NodeList;

/**
 * Html 中的body体中提取出Img标签中的src值
 *
 * @author XY
 *
 */
public class CASHtmlImgConvert {

  public static void main(String[] args) {
//演示
    String[] oldSrcPath=changeImgSrc("<img alt=\"\" src=\"http://www.czb8688.com/attached/image/20160116/20160116141455_775.jpg\" />");
    if(oldSrcPath!=null){
      for(String str:oldSrcPath){
        System.out.println(str);
      }
    }
  }

  public static boolean isEmpty(String str){
    if(str!=null&&(!str.equals("")))
      return false;
    else
      return true;
  }

  /**
   *
   * @param htmlPath 本地的html路径 或者body
   */
  private static String[] changeImgSrc(String htmlPath)
  {  StringBuilder oldSrcPath = new StringBuilder();
    try {
      Parser parser = new Parser(htmlPath);
    //标签名过滤器
      NodeFilter filter = new TagNameFilter ("img");
      NodeList nodes = parser.extractAllNodesThatMatch(filter);
      Node eachNode = null;
      ImageTag imageTag = null; 

      if (nodes != null)
      {
//       遍历所有的img节点
        for (int i = 0; i < nodes.size(); i++)
        {
          eachNode = (Node)nodes.elementAt(i);
          if (eachNode instanceof ImageTag)
          {
            imageTag = (ImageTag)eachNode;
//           获得html文本的原来的src属性
            String path=imageTag.getAttribute("src");
            if(path.startsWith(""))
              path="http://www.czb8688.com"+path;
            oldSrcPath .append(path+",");
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    String str=oldSrcPath.toString();
    //返回图片数组
    return str.substring(0,str.length()-1).split(",");
  }
}

补充知识:java 扫描HTML 拿取各种标签资源数据

直接上代码,不比比。

package com.zhirui.oa.modules.notice.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TemplateUtil {

  public static List<Map<String, Object>> getImgSrc(String htmlContent) {
    List<Map<String, Object>> srcList = new ArrayList<>(); //用来存储获取到的地址
    Map<String, Object> map = null;
    Pattern p = Pattern.compile("<(img|IMG)(.*?)(>|></img>|/>)");//匹配字符串中的img标签
    Matcher matcher = p.matcher(htmlContent);
    boolean hasPic = matcher.find();
    if (hasPic == true)//判断是否含有图片
    {
      while (hasPic) //如果含有图片,那么持续进行查找,直到匹配不到
      {
        String group = matcher.group(2);//获取第二个分组的内容,也就是 (.*?)匹配到的
        Pattern srcText = Pattern.compile("(src|SRC)=(\"|\')(.*?)(\"|\')");//匹配图片的地址
        Matcher matcher2 = srcText.matcher(group);
        if (matcher2.find()) {
          map = new HashMap<>();
          map.put("imgResourcePath", matcher2.group(3));
          srcList.add(map);//把获取到的图片地址添加到列表中
          map = null;
        }
        hasPic = matcher.find();//判断是否还有img标签
      }
    }
    return srcList;
  }

  public static List<Map<String, Object>> getVideoSrc(String htmlContent) {
    List<Map<String, Object>> srcList = new ArrayList<>(); //用来存储获取到的视频地址
    Map<String, Object> map = null;
    Pattern p = Pattern.compile("<(video|VIDEO)(.*?)(>|></video>|/>)");//匹配字符串中的video标签
    Matcher matcher = p.matcher(htmlContent);
    boolean hasPic = matcher.find();
    if (hasPic == true)//判断是否含有视频
    {
      while (hasPic) //如果含有视频,那么持续进行查找,直到匹配不到
      {
        String group = matcher.group(2);//获取第二个分组的内容,也就是 (.*?)匹配到的
        Pattern srcText = Pattern.compile("(src|SRC)=(\"|\')(.*?)(\"|\')");//匹配视频的地址
        Matcher matcher2 = srcText.matcher(group);
        if (matcher2.find()) {
          map = new HashMap<>();
          map.put("videoResourcePath", matcher2.group(3));
          srcList.add(map);//把获取到的视频地址添加到列表中
          map = null;
        }
        hasPic = matcher.find();//判断是否还有video标签
      }
    }
    return srcList;
  }

  public static List<Map<String, Object>> getAhref(String htmlContent) {
    List<Map<String, Object>> srcList = new ArrayList<>(); //用来存储获取到的超链接地址
    Map<String, Object> map = null;
    Pattern p = Pattern.compile("<(a|A)(.*?)(>|></a>|/>)");//匹配字符串中的a标签
    Matcher matcher = p.matcher(htmlContent);
    boolean hasPic = matcher.find();
    if (hasPic == true)//判断是否含有超链接
    {
      while (hasPic) //如果含有超链接,那么持续进行查找,直到匹配不到
      {
        String group = matcher.group(2);//获取第二个分组的内容,也就是 (.*?)匹配到的
        Pattern srcText = Pattern.compile("(href|HREF)=(\"|\')(.*?)(\"|\')");//匹配超链接的地址
        Matcher matcher2 = srcText.matcher(group);
        if (matcher2.find()) {
          map = new HashMap<>();
          map.put("aResourcePath", matcher2.group(3));
          srcList.add(map);//把获取到的超链接地址添加到列表中
          map = null;
        }
        hasPic = matcher.find();//判断是否还有a标签
      }
    }
    return srcList;
  }
}

以上这篇Java HtmlParse提取标签中的值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java8新特性 stream流的方式遍历集合和数组操作

    前言: 在没有接触java8的时候,我们遍历一个集合都是用循环的方式,从第一条数据遍历到最后一条数据,现在思考一个问题,为什么要使用循环,因为要进行遍历,但是遍历不是唯一的方式,遍历是指每一个元素逐一进行处理(目的),而并不是从第一个到最后一个顺次处理的循环,前者是目的,后者是方式. 所以为了让遍历的方式更加优雅,出现了流(stream)! 1.流的目的在于强掉做什么 假设一个案例:将集合A根据条件1过滤为子集B,然后根据条件2过滤为子集C 在没有引入流之前我们的做法可能为: public cl

  • java获取文件编码,jsoup获取html纯文本操作

    maven引入获取编码的jar <dependency> <groupId>com.ibm.icu</groupId> <artifactId>icu4j</artifactId> <version>67.1</version> </dependency> 获取文件编码 package com.lovnx.note.util; import com.ibm.icu.text.CharsetDetector; i

  • Java Integer.valueOf()和Integer.parseInt()的区别说明

    前言 大家都知道Integer类中有Integer.valueOf(String s)和Integer.parseInt(String s)两个静态方法,他们都能够将字符串转换为整型.说到这里你肯定会想同一个功能为什么要提供两个不同的方法,这不是浪费吗? 区别 Integer.parseInt(String s)将会返回int常量. Integer.valueOf(String s)将会返回Integer类型,如果存在缓存将会返回缓存中已有的对象. 使用不当将会产生的问题 由于Java的自动拆箱

  • java读取html文件,并获取body中所有的标签及内容的案例

    这里的获取的是html文件中body中的所有标签以及内容 package com.lmt.service.file; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.Reader; import org.springframework.stereotype.Component; i

  • Java内部类和匿名内部类的用法说明

    一.内部类: (1)内部类的同名方法 内部类可以调用外部类的方法,如果内部类有同名方法必须使用"OuterClass.this.MethodName()"格式调用(其中OuterClass与MethodName换成实际外部类名及其方法:this为关键字,表示对外部类的引用):若内部类无同名方法可以直接调用外部类的方法. 但外围类无法直接调用内部类的private方法,外部类同样无法直接调用其它类的private方法.注意:内部类直接使用外部类的方法与该方法的权限与是否static无关,

  • Java HtmlParse提取标签中的值操作

    ☆代码示例: 代码块语法遵循标准markdown代码,例如: package cas; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.StringFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tag

  • Java正则提取中括号中的内容操作示例

    本文实例讲述了Java正则提取中括号中的内容操作.分享给大家供大家参考,具体如下: 曾经在工作中遇到一个问题,就是需要提取字符串中每一个中括号里的内容,在网上搜了一下,发现用正则表达式可以提取中括号中的内容,具体实现如下: import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExtractMes

  • java正则替换img标签中src值的方法

    主要功能是: 替换html字符串中img标签src的值. 代码如下: package com.junlenet.common.util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * html处理工具类 * @author huweijun * @date 2016年7月13日 下午7:25:09 */ public class HtmlUtils { /** * 替换指定标签的属性和值 * @para

  • java 8 lambda表达式中的异常处理操作

    简介 java 8中引入了lambda表达式,lambda表达式可以让我们的代码更加简介,业务逻辑更加清晰,但是在lambda表达式中使用的Functional Interface并没有很好的处理异常,因为JDK提供的这些Functional Interface通常都是没有抛出异常的,这意味着需要我们自己手动来处理异常. 因为异常分为Unchecked Exception和checked Exception,我们分别来讨论. 处理Unchecked Exception Unchecked exc

  • .NET提取 Thread 中返回值详情

    目录 一..NET 2.0+ 二..NET 4.0 + 三..NET 4.5 + 以下文章来源于公众号DotNetCore实战  Igor Bendrup: 关于如何获取 Thread 中的返回值,不同的版本有不同的解决方案. 一..NET 2.0+ 你可以直接使用 Thread 对象,然后你可以使用闭包(声明变量并在 lambda 中捕获它),参考如下代码: object result = null; Thread thread = new System.Threading.Thread(()

  • 详解Java的Struts框架中栈值和OGNL的使用

    值栈: 值栈是一个集合中的几个对象保持下列对象提供的顺序: 值栈可以通过JSP,Velocity或者Freemarker的标签.有各种不同的标签在单独的章节中,我们将学习,用于获取和设置Struts 2.0 的值栈. ValueStack的对象里面可以得到动作如下: ActionContext.getContext().getValueStack() 一旦拥有了值对象,就可以用下面的方法来操纵该对象: OGNL: 对象图形导航语言(OGNL)是一个功能强大的表达式语言是用来参考值栈上的数据和操纵

  • Pandas提取单元格的值操作

    如提取第1行,第2列的值: df.iloc[[0],[1]] 则会返回一个df,即有字段名和行号. 如果用values属性取值: df.iloc[[0],[1]].values 返回的值会是列表,而且是嵌套列表: [[值]] 因此,正确的写法是: df.iloc[[0],[1]].values[0][0] 补充:pandas取出符合条件的某单元格的值 已经读取excel表中的值,得出DATAFRAME-----data1 想取出某些值写入另一个excel表 发现用data1['任务指标利润总额'

  • R语言-实现list的嵌套与提取嵌套中的值

    R的数据结构有很多种,常用的包括向量vector,矩阵matrix,数组array,列表list和dataframe数据框. 前三个都有其特定的性质和结构 今天要介绍的是list,它非常灵活好用~因为可以存放不同数据类型 之前做assignment的时候还没有发现list的美妙,但现在写毕业论文数据量开始变大,同时通过调用Rpackage常常产生各种数据类型,渐渐发觉list真的很好用! 因为使用了for循环,还会产生层层嵌套的超大list,这时候,如何定义这个嵌套的list,如何取出里面的值就

  • JS 获取span标签中的值的代码 支持ie与firefox

    ie支持outerText,firefox支持textContent 复制代码 代码如下: if (isIE) { var spanTest=document.getElementById('spanTest'); spanValue = spanTest.outerText; } else { spanValue = spanTest.textContent; }

  • Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题

    Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势.下面给大家介绍Vue.js表单标签中的单选按钮.复选按钮和下拉列表的取值问题. 摘要: 表单标签取值问题中,单选按钮.复选按钮和下拉列表都比较特殊.这里总结一下vue.js中关于单选按钮.复选按钮和下拉列表不同情况的取值特殊性问题. 表单标签取值问题中,单选按钮.复选按钮和下拉列表都比较特殊.这里总结一下vue.js中关于单选按钮.复选按钮和下拉列表不同情况的取值特殊性问题. 一.单选按钮 单选按钮:单选按钮用

随机推荐