正则表达式从html代码中提取图像URL

时间:2012-10-31 15:16:58

标签: java regex html-parsing imageurl

我想从html代码中提取图像的Url,例如下面的HTML代码:

<div class="imageContainer">
   <img src="http://ecx.images-amazon.com/images/I/41%2B7N48F7JL._SL135_.jpg"
      alt="" width="135" height="94"
      style="margin-top: 21px; margin-bottom:20px;" /></div>

我从网上获得了一个代码

String regexImage = "(?<=<img (*)src=\")[^\"]*";
Pattern pImage = Pattern.compile(regexImage);
Matcher mImage = pImage.matcher(elementString);
while (mImage.find()) {
   String imagePath = mImage.group();}

正在运行并且具有重新(正则表达式)

"(?<=<img src=\")[^\"]*"

但是现在我想从html代码中提取图片网址,如下所示:

<img onerror="img_onerror(this);" data-logit="true" data-pid="MOBDDDBRHVWQZHYY"
   data-imagesize="thumb"
   data-error-url="http://img1a.flixcart.com/mob/thumb/mobile.jpg"
   src="http://img8a.flixcart.com/image/mobile/h/y/y/samsung-galaxy-s-duos-s7562-125x125-imadddczzr4qhqnc.jpeg"
   alt="Samsung Galaxy S Duos S7562: Mobile"
   title="Samsung Galaxy S Duos S7562: Mobile"></img></a>
<div class="bp-offer-image image-offer"></div>

img和src =

之间有代码

我正在尝试将正则表达式设为"(?<=<img (*)src=\")[^\"]*" 但它不起作用。所以请给我正则表达式,以便我可以从上面的html代码中提取图像网址,即http://ecx.images-amazon.com/images/I/61xqOQ3Sj8L._SL135_.jpg

首先,我使用Jsoup解析html以提取包含img的标签:

doc = Jsoup.connect(urlFromBrowse).get();
            Elements elements = doc.getElementsByTag("img");

            for (Element element : elements) {
                String elementString = element.toString();

并将此elementString传递给matcher()meathod。从我得到的标签(元素)中,我使用正则表达式来解析图片网址,命名等等。

3 个答案:

答案 0 :(得分:4)

这篇文章是问题的答案,而不是指南。

问题不是&#34; RegExp vs DOM&#34;,问题是&#34;正则表达式从html代码中提取图像网址&#34;。

这是:

String htmlFragment =
   "<img onerror=\"img_onerror(this);\" data-logit=\"true\" data-pid=\"MOBDDDBRHVWQZHYY\"\n" + 
   "   data-imagesize=\"thumb\"\n" + 
   "   data-error-url=\"http://img1a.flixcart.com/mob/thumb/mobile.jpg\"\n" + 
   "   src=\"http://img8a.flixcart.com/image/mobile/h/y/y/samsung-galaxy-s-duos-s7562-125x125-imadddczzr4qhqnc.jpeg\"\n" + 
   "   alt=\"Samsung Galaxy S Duos S7562: Mobile\"\n" + 
   "   title=\"Samsung Galaxy S Duos S7562: Mobile\"></img></a>";
Pattern pattern =
   Pattern.compile( "(?m)(?s)<img\\s+(.*)src\\s*=\\s*\"([^\"]+)\"(.*)" );
Matcher matcher = pattern.matcher( htmlFragment );
if( matcher.matches()) {
   System.err.println(
      "OK:\n" +
      "1: '" + matcher.group(1) + "'\n" +
      "2: '" + matcher.group(2) + "'\n" +
      "3: '" + matcher.group(3) + "'\n" );
}

和ouput:

OK:
1: 'onerror="img_onerror(this);" data-logit="true" data-pid="MOBDDDBRHVWQZHYY"
   data-imagesize="thumb"
   data-error-url="http://img1a.flixcart.com/mob/thumb/mobile.jpg"
   '
2: 'http://img8a.flixcart.com/image/mobile/h/y/y/samsung-galaxy-s-duos-s7562-125x125-imadddczzr4qhqnc.jpeg'
3: '
   alt="Samsung Galaxy S Duos S7562: Mobile"
   title="Samsung Galaxy S Duos S7562: Mobile"></img></a>'

答案 1 :(得分:2)

根据docs JSoup(DOM解析器)可以在获得标记元素后轻松获取属性。像

这样的东西
doc.getElementsByTag("img").attr("src")

应该工作。

为了记录,我是一个Perl家伙,一个经常达到正则表达式的社区。我一直在努力启发人们使用DOM解析器而不是脆弱的正则表达式的快乐。

答案 2 :(得分:0)

我希望您能够通过JSoup API获取<img>元素的各种属性。 Node.attributes()能为您提供所需内容吗?