从WebPage程序获取所有图像| Java的

时间:2010-01-31 18:14:48

标签: java image extract

目前我需要一个给出URL的程序,返回网页上所有图像的列表。

即:

logo.png gallery1.jpg test.gif

在尝试编写代码之前是否有可用的开源软件?

语言应该是java。谢谢 菲利普

7 个答案:

答案 0 :(得分:12)

只需使用simple HTML parser,例如jTidy,然后使用get all elements by tag name img,然后在src中收集每个List<String>属性或者List<URI>

您可以使用URL#openStream()获取InputStream URL,然后将其提供给您要使用的任何HTML解析器。这是一个启动示例:

InputStream input = new URL("http://www.stackoverflow.com").openStream();
Document document = new Tidy().parseDOM(input, null);
NodeList imgs = document.getElementsByTagName("img");
List<String> srcs = new ArrayList<String>();

for (int i = 0; i < imgs.getLength(); i++) {
    srcs.add(imgs.item(i).getAttributes().getNamedItem("src").getNodeValue());
}

for (String src: srcs) {
    System.out.println(src);
}

但我必须承认,Bozho建议的HtmlUnit确实看起来更好。

答案 1 :(得分:10)

HtmlUnitHtmlPage.getElementsByTagName("img"),这可能适合你。

(阅读简短的Get started指南,了解如何获取正确的HtmlPage对象)

答案 2 :(得分:4)

使用HTML Parser(和任何其他不错的HTML解析器),这很简单:

Parser parser = new Parser("http://www.yahoo.com/");
NodeList list = parser.parse(new TagNameFilter("IMG"));

for ( SimpleNodeIterator iterator = list.elements(); iterator.hasMoreNodes(); ) {
    Tag tag = (Tag) iterator.nextNode();
    System.out.println(tag.getAttribute("src"));
}

答案 3 :(得分:0)

您可以使用有许多选项的wget

或google for java wget ...

答案 4 :(得分:0)

您可以解析HTML,并收集集合中IMG元素的所有SRC属性。然后从每个URL下载每个资源并将其写入文件。对于解析,有几个可用的HTML解析器,Cobra就是其中之一。

答案 5 :(得分:0)

使用Open Graph标签和HTML单元,您可以非常轻松地提取数据(PageMeta是一个简单的POJO保存结果):

    Parser parser = new Parser(url);

    PageMeta pageMeta = new PageMeta();
    pageMeta.setUrl(url);

    NodeList meta = parser.parse(new TagNameFilter("meta"));
    for (SimpleNodeIterator iterator = meta.elements(); iterator.hasMoreNodes(); ) {
        Tag tag = (Tag) iterator.nextNode();

        if ("og:image".equals(tag.getAttribute("property"))) {
            pageMeta.setImageUrl(tag.getAttribute("content"));
        }

        if ("og:title".equals(tag.getAttribute("property"))) {
            pageMeta.setTitle(tag.getAttribute("content"));
        }

        if ("og:description".equals(tag.getAttribute("property"))) {
            pageMeta.setDescription(tag.getAttribute("content"));
        }
    }

答案 6 :(得分:0)

您可以在Java中使用正则表达式

&#13;
&#13;
<html>
<body>
<p>
<img src="38220.png" alt="test" title="test" /> 
<img src="32222.png" alt="test" title="test" />
</p>
</body>
</html>
&#13;
&#13;
&#13;

    String s ="html";  //above html content
    Pattern p = Pattern.compile("<img [^>]*src=[\\\"']([^\\\"^']*)");
    Matcher  m = p.matcher (s);
    while (m.find()) {
        String src = m.group();
        int startIndex = src.indexOf("src=") + 5;
        String srcTag = src.substring(startIndex, src.length());
        System.out.println( srcTag );
    }