JAVA获取html网页中的图片src内容

有很多时候会有这样的需求,获取一个网页中图片的路径,在Java中,可以使用Pattern类、Matcher类,配合正则表达式来获取一个字符串中需要的特定内容。

首先来看一下网页中一个<img>标签所处的位置,例如:String content =“<html>…<div><img alt =’xxx’ src=’yyy’><img alt=’xxx’ src=’mmm’></div></html>”,其中img标签可能的格式为 <img>或<IMG>,标签结束方式可能为<img … > 或者 <img … />或者<img …></img>  ;为了代码有更好的鲁棒性,所以在匹配文本的时候,这些情况都需要考虑到。

我的具体思路就是,先获取到img 标签的内容,然后对获取到的内容进行二次匹配,从而获取到一个图片地址列表。这里边最核心的地方就在于两次匹配的正则表达式。以获取上边的content中的地址为例:

 String content ="<html>...<div><img alt ='xxx' src='yyy'><img alt='xxx' src='mmm'></div></html>"
	List<String> srcList = new ArrayList<String>(); //用来存储获取到的图片地址
	Pattern p = Pattern.compile("<(img|IMG)(.*?)(>|></img>|/>)");//匹配字符串中的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);

在这里面最为核心的部分就是正则表达式的书写,因为它是负责把我们的思想转化为一个具体规则去匹配字符串。在第一次匹配img标签的时候,正则表达式是“<(img|IMG)(.*?)(>|></img>|/>)” ,其中( )是用来分组的,也就是把匹配到的内容分成几个部分。在使用Matcher类来获取匹配到的分组数据时,匹配到的整个字符串默认为第0组,所以自己定义的组别要从第一组算起。

其中  <(img|IMG)  部分是第1组,可以匹配到img标签的开始 。

(.*?) 是第2组,可以匹配到img标签内的其他内容,它的含义就是匹配以任意字符开始的一个字符串。?表示非贪婪模式匹配,默认是贪婪模式,贪婪模式会匹配到最长的内容,也就是在img标签开始和结束的中间包含多个img标签。

(>|></img>|/>) 部分是第3组,用来匹配img标签的结束。

    原文作者:为你征伐
    原文地址: https://blog.csdn.net/u013350866/article/details/79035824
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞