Java获取网页中所有图片、视频的链接

中午遇到一个问题,就是要从数据库保存的富文本信息中,取出所有图片和视频的url,中午领导不在无心写代码所以百度了下,看到一篇“为你征伐”写的博客对我启发很大,原帖:https://blog.csdn.net/u013350866/article/details/79035824

我将原帖稍微修改了下使其可以解决我遇到的问题,这里直接贴代码:

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

/**
 * 
 * @author gaofeng
 *
 */
public class HtmlUtil {

	public static void main(String[] args) {
		String content = "<html>" +
							"<head>" +
								"<body>" +
									"<video class=\"edui-upload-video  vjs-default-skin video-js\" controls=\"\" preload=\"none\" width=\"420\" height=\"280\" src=\"/ueditor/upload/video/20190718/1563432295846066424.mp4\" data-setup=\"{}\"><source src=\"/ueditor/upload/video/20190718/1563432295846066424.mp4\"/></video>" +
									"<img class=\"edui-upload-video  vjs-default-skin video-js\" controls=\"\" preload=\"none\" width=\"420\" height=\"280\" src=\"/ueditor/upload/video/20190718/15634322958460664240.jpg\" data-setup=\"{}\"><source src=\"/ueditor/upload/video/20190718/1563432295846066424.jpg\"/></img>" +
									"<img class=\"edui-upload-video  vjs-default-skin video-js\" controls=\"\" preload=\"none\" width=\"420\" height=\"280\" src=\"/ueditor/upload/video/20190718/a.jpg\" data-setup=\"{}\"><source src=\"/ueditor/upload/video/20190718/a.jpg\"/></img>" +
								"</body>" +
							"</head>" +
						 "</html>";
		List<String> srcList = new ArrayList<String>(); //用来存储获取到的图片地址
		String type[] = {"img","video"};//这里因为只需要从网页获取视频url和图片url,所以只用匹配img和video标签,注意为了较小改动原博主的代码,这里一定要写小写
		for (String string : type) {
			//以下主要参照csdn博主‘为你征伐’的方法,这里只是把正则规则变得灵活的去匹配type变量中的标签,已达到拿到图片和视频url的目的
			Pattern p = Pattern.compile("<("+string+"|"+string.toUpperCase()+")(.*?)(>|></"+string+">|/>)");//匹配字符串中的img标签
			Matcher matcher = p.matcher(content);
			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() ) 
					{
						srcList.add( matcher2.group(3) );//把获取到的图片地址添加到列表中
					}
					hasPic = matcher.find();//判断是否还有img标签
				}
			}
		}
		System.out.println("匹配到的内容:"+srcList);
	}
}

需要顺带一提的是:这段代码虽然可以获取一个网页中所有图片和视频的url,但是该方法取出后的url顺序却不是按照网页文件中的先后顺序来的,因为代码里是先用正则表达式匹配<img>标签,再去匹配<video>标签的,所以这注定了该方法返回的结果是<img>标签中所有的url在前,<video>标签中所有的url在后,而在<img>和<video>标签中各自所有的url排列是按照网页文件中的先后顺利排列的。

发布了87 篇原创文章 · 获赞 22 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/gaofenglxx/article/details/96432996
今日推荐