我想从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。从我得到的标签(元素)中,我使用正则表达式来解析图片网址,命名等等。
答案 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()能为您提供所需内容吗?