如何解析并返回单独的字符串[]或字符串的链接列表?

时间:2011-09-19 19:08:31

标签: java android dom jsoup

我有相应的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,为每个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();
}

我在想这个,还没试过。当我有机会的时候,我会的。

但是我如何使用代码将每个分解为单独的字符串或整个列表?(如果正确的话)

随意留下建议或答案=)或者让我知道我上面的代码是否可以解决问题。

谢谢, 编码器 - 有关-Life22

3 个答案:

答案 0 :(得分:2)

这里是代码示例,使用RegEx从您的html中提取所有img url:

//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,则意味着你有一个网址而不是唯一的更改,而不是使用硬编码字符串,你需要先加载html。例如,您可以使用Java OOB类URL:

new URL ("http://some_address").openConnection ().getInputStream ();

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

显然,您可以将html解析为DOM树,并使用XPath或CSS选择器提取所有“img”节点。然后迭代它们填充一系列链接。 虽然你的代码并没有完全成功。 编写循环以使用“a”节点,而代码在它之前提取img节点。

还有另一种方法:您可以使用RegEx提取所需的数据,这应该具有更好的性能和更低的内存成本。