3

我想从 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 代码中提取图像 url,如下所示:

<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=\")[^\"]*" 但它不起作用。所以请给我正则表达式,以便我可以 http://ecx.images-amazon.com/images/I/61xqOQ3Sj8L._SL135_.jpg从上面的 html 代码中提取图像 url 即。

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

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

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

并将这个 elementString 传递给 matcher() 肉类。从我得到的标签(元素)中,我使用正则表达式来解析图像 url、名称等内容。

4

3 回答 3

5

这篇文章是对问题的回答,而不是指导方针。

问题不是“RegExp vs DOM”,而是“从 html 代码中提取图像 url 的正则表达式”。

这里是:

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" );
}

和输出:

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>'
于 2012-10-31T15:42:26.563 回答
2

根据文档, JSoup(一个 DOM 解析器)可以在获取标签元素后轻松获取属性。就像是

doc.getElementsByTag("img").attr("src")

应该工作。

作为记录,我是一个 Perl 人,一个经常过快地使用正则表达式的社区。我一直试图让人们了解使用 DOM 解析器而不是脆弱的正则表达式的乐趣。

于 2012-10-31T15:31:11.943 回答
0

我希望您能够<img>通过 JSoup API 获取元素的各种属性。Node.attributes ()给你你想要的吗?

于 2012-10-31T15:30:03.983 回答