3

以下のhtmlコードなど、htmlコードから画像のURLを抽出したかったのです。

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

これは機能しており、 re(regular expression) を持っています

"(?<=<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= の間にコードがある場所

正規表現 as を試して"(?<=<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 に答える