Получить все изображения из программы WebPage | Джава - PullRequest
6 голосов
/ 31 января 2010

В настоящее время мне нужна программа, которая дает URL, возвращает список всех изображений на веб-странице.

е:

logo.png gallery1.jpg test.gif

Есть ли какое-либо программное обеспечение с открытым исходным кодом, прежде чем я попытаюсь что-то написать?

Язык должен быть Java. Спасибо Philip

Ответы [ 7 ]

12 голосов
/ 31 января 2010

Просто используйте простой анализатор HTML , например jTidy , а затем получите все элементы по имени тега img, а затем соберите атрибут src каждого в List<String> или, может быть, List<URI>.

Вы можете получить InputStream из URL, используя URL#openStream(), а затем передать его любому анализатору 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);
}

Однако я должен признать, что HtmlUnit, предложенный Божо, действительно выглядит лучше.

10 голосов
/ 31 января 2010

HtmlUnit имеет HtmlPage.getElementsByTagName("img"), что, вероятно, подойдет вам.

(прочитайте краткое руководство Начало работы , чтобы узнать, какполучить правильный HtmlPage объект)

4 голосов
/ 31 января 2010

Это очень просто с HTML-парсером (и любым другим достойным 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"));
}
0 голосов
/ 08 февраля 2018

Вы можете просто использовать регулярные выражения в Java

<html>
<body>
<p>
<img src="38220.png" alt="test" title="test" /> 
<img src="32222.png" alt="test" title="test" />
</p>
</body>
</html>
    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 );
    }
0 голосов
/ 09 мая 2016

С помощью тегов 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"));
        }
    }
0 голосов
/ 31 января 2010

Вы можете анализировать HTML и собирать все атрибуты SRC элементов IMG в Коллекции. Затем загрузите каждый ресурс с каждого URL и запишите его в файл. Для парсинга доступно несколько HTML-парсеров, Cobra - один из них.

0 голосов
/ 31 января 2010

Вы можете использовать wget , у которого есть много доступных вариантов.

Или Google для Java Wget ...

...