Java HtmlParse提取标签中的值操作
作者:Sandy林 发布时间:2021-10-07 04:43:10
标签: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;
}
}
来源:https://blog.csdn.net/u013334392/article/details/53490661


猜你喜欢
- 泛型概述我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进
- 这个功能没什么可介绍的,大家都懂,直接上代码了。。实现功能选择多个文件压缩成ZIP文件和解压ZIP文件开发环境开发工具: Visual St
- 最近做了一个MyEclipse项目,但是没开始多久就发现了这个问题:只要文件被修改过,不论多小的修改,保存的时候都会跳出一个框框,里面写着t
- 1. 基本概念的理解`绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL、物理路径例如:c:/xyz/test.txt代表了te
- 需求说明实际操作过程中,从D盘根目录下的ak.txt读取文件写入D盘根目录下的hello.txt文件内实现思路写两个方法,一个用于读取目标文
- 前后端分离的项目,前端有菜单(menu),后端有API(backendApi),一个menu对应的页面有N个API接口来支持,本文介绍如何基
- 本文实例为大家分享了Unity实现打砖块游戏的具体代码,供大家参考,具体内容如下效果演示1.创建墙1.1我们用预制体来统一管理墙方便以后对墙
- Android音乐播放器的运行效果这篇博客还是接着上一篇Android音乐播放器制作写的,没看过的可以去看看。其中这个效果(圆形ImageV
- 前文传送门:ByteBuf使用subPage级别内存分配ByteBuf回收之前的章节我们提到过, 堆外内存是不受jvm垃圾回收机制控制的,
- Spring定时任务无故停止又不报错一开始是使用Spring自带的定时器来配置定时任务的,简单快捷,配置如下:<bean id=&qu
- 本文实例讲述了C#判断密码强度的方法。分享给大家供大家参考。具体如下:1.关于密码强度密码强度有强弱之分,包含数字、字母和其他符号三者且长度
- 多说无益,贴代码:/** * 校验银行卡卡号 * * @param cardId &nbs
- 实例如下:ServletRequestAttributes aRequestAttributes=(ServletRequestAttrib
- 本文实例讲述了Java使用DateFormatter格式化日期时间的方法。分享给大家供大家参考,具体如下:Java版本:1.8开始impor
- 对于java开发人员来说,Idea的普及率已经很高了。但是还是很多好用的技巧没有用到,只是用到一些基本的功能,蛮浪费IDEA这个优秀的IDE
- 一、QQ邮箱打开POP3/SMTP服务上面的服务开启后,会得到一串授权密码在springboot配置中需要用到二、springboot配置I
- java 中 System.out.println()和System.out.write()的区别.这两个函数一个是System
- Crypto 库是C/C++的加密算法库,这个加密库很流行,基本上涵盖了市面上的各类加密解密算法,以下代码是我在学习是总结的,放到这里用于后
- 同学们在开发过程中,经常需要查看程序与数据库之间的SQL语句,以便于调试和分析。本文将介绍如何在控制台中显示MyBatis的SQL语句,帮助
- Java7中文件IO发生了很大的变化,专门引入了很多新的类:import java.nio.file.DirectoryStream;imp