Как разобрать и вернуть список ссылок на отдельные строки [] или строки? - PullRequest
0 голосов
/ 19 сентября 2011

У меня html div класс отформатирован соответственно ....

<div class="latest-media-images">
    <div class="hdr-article">LATEST IMAGES</div>
        <a class="lnk-thumb" href="http://media.pc.ign.com/media/093/093395/imgs_1.html"><img id="thumbImg1" src="http://media.ignimgs.com/media/thumb/351/3513804/the-elder-scrolls-v-skyrim-20110824023151748_thumb_ign.jpg" class="latestMediaThumb" alt="" height="109" width="145"></a>
                <a class="lnk-thumb" href="http://media.pc.ign.com/media/093/093395/imgs_1.html"><img id="thumbImg2" src="http://media.ignimgs.com/media/thumb/351/3513803/the-elder-scrolls-v-skyrim-20110824023149685_thumb_ign.jpg" class="latestMediaThumb" alt="" height="109" width="145"></a>
                <a class="lnk-thumb" href="http://media.pc.ign.com/media/093/093395/imgs_1.html"><img id="thumbImg3" src="http://media.ignimgs.com/media/thumb/351/3513802/the-elder-scrolls-v-skyrim-20110824023147685_thumb_ign.jpg" class="latestMediaThumb" alt="" height="109" width="145"></a>
                </div>

Теперь .... Я пытался придумать разные способы сделать это.

Я хочу разобратькаждый URL для разделения строк для каждого ...

Теперь я думал о том, как разобрать их в список, а затем выбрать каждый из них, передав позицию?

(Если кто-то хочетответьте на это, пожалуйста, не стесняйтесь)

Или я мог бы сделать что-то, например, перейти в класс div ...

Element latest_images = doc.select("div.latest-media-images");
Elements links = latest_images.getElementsByTag("img");

for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}

Я думал об этом, еще не пробовал.Я сделаю это, когда получу шанс.

Но как мне разобрать каждую из них в отдельную строку или весь список с помощью кода? (Если он правильный)

Не стесняйтесь оставлять предложения или ответы=) или дайте мне знать, если код, который у меня есть выше, сработает.

Спасибо, кодер за жизнь22

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Вот пример кода для извлечения всех img URL из вашего html с использованием RegEx:

//I used your html with some obfuscations to test some fringe cases.
    final String HTML
            = "<div class=\"latest-media-images\">\n"
            + "<div class=\"hdr-article\">LATEST IMAGES</div>\n"
            + "<a class=\"lnk-thumb\" href=\"http://media.pc.ign.com/media/093/093395/imgs_1.html\"><img id=\"thumbImg1\" \n "
            + "src=\"http://media.ignimgs.com/media/thumb/351/3513804/the-elder-scrolls-v-skyrim-20110824023151748_thumb_ign.jpg\" class=\"latestMediaThumb\" alt=\"\" height=\"109\" width=\"145\"></a>\n"
            + "<a class=\"lnk-thumb\" href=\"http://media.pc.ign.com/media/093/093395/imgs_1.html\"><img id=\"thumbImg2\" src=  \n"
            + "\"http://media.ignimgs.com/media/thumb/351/3513803/the-elder-scrolls-v-skyrim-20110824023149685_thumb_ign.jpg\" class=\"latestMediaThumb\" alt=\"\" height=\"109\" width=\"145\"></a>\n"
            + "<a class=\"lnk-thumb\" href=\"http://media.pc.ign.com/media/093/093395/imgs_1.html\"><img id=\"thumbImg3\" src "
            + "=    \t \n  "
            + "\"http://media.ignimgs.com/media/thumb/351/3513802/the-elder-scrolls-v-skyrim-20110824023147685_thumb_ign.jpg\" class=\"latestMediaThumb\" alt=\"\" height=\"109\" width=\"145\"></a>\n"
            + "</div>";

    Pattern pattern = Pattern.compile ("<img[^>]*?src\\s*?=\\s*?\\\"([^\\\"]*?)\\\"");
    Matcher matcher = pattern.matcher (HTML);

    List<String> imgUrls = new ArrayList<String> ();
    while (matcher.find ())
    {
        imgUrls.add (matcher.group (1));
    }

    for (String imgUrl : imgUrls) System.out.println (imgUrl);

Вывод такой же, как и опубликованный Sahil Muthoo:

http://media.ignimgs.com/media/thumb/351/3513804/the-elder-scrolls-v-skyrim-20110824023151748_thumb_ign.jpg
http://media.ignimgs.com/media/thumb/351/3513803/the-elder-scrolls-v-skyrim-20110824023149685_thumb_ign.jpg
http://media.ignimgs.com/media/thumb/351/3513802/the-elder-scrolls-v-skyrim-20110824023147685_thumb_ign.jpg

Если с помощьюЕсли вы сначала ссылаетесь на html, вы имеете в виду, что у вас есть URL, а единственное изменение состоит в том, что вместо использования жестко запрограммированной строки вам сначала нужно загрузить html.Например, вы можете использовать URL-адрес класса Java OOB:

new URL ("http://some_address").openConnection ().getInputStream ();
1 голос
/ 19 сентября 2011
Elements thumbs = doc.select("div.latest-media-images img.latestMediaThumb");
List<String> thumbLinks = new ArrayList<String>(); 
for(Element thumb : thumbs) {
    thumbLinks.add(thumb.attr("src"));
}
for(String thumb : thumbLinks) {
    System.out.println(thumb);
}

выход

http://media.ignimgs.com/media/thumb/351/3513804/the-elder-scrolls-v-skyrim-20110824023151748_thumb_ign.jpg
http://media.ignimgs.com/media/thumb/351/3513803/the-elder-scrolls-v-skyrim-20110824023149685_thumb_ign.jpg
http://media.ignimgs.com/media/thumb/351/3513802/the-elder-scrolls-v-skyrim-20110824023147685_thumb_ign.jpg
0 голосов
/ 19 сентября 2011

Очевидно, что вы можете разобрать HTML в дерево DOM и извлечь все узлы "img", используя XPath или CSS селектор. И затем, перебирая их, заполняйте массив ссылок. Хотя ваш код не совсем подходит. Цикл написан для работы с узлами "a", пока код извлекает узлы img.

Есть и другой способ: вы можете извлекать необходимые данные, используя RegEx, который должен иметь более высокую производительность и меньшую стоимость памяти.

...