2010-01-31 10 views
6

Actualmente necesito un programa que, dado un URL, devuelve una lista de todas las imágenes en la página web.Obtenga todas las imágenes del Programa WebPage | Java

es decir:

logo.png gallery1.jpg test.gif

¿Hay algún software de código abierto disponible antes de tratar y el código de algo?

El idioma debe ser java. Gracias Philip

+0

¿Necesita un programa o una biblioteca? –

+0

¿Qué quiere decir lo siento? Solo necesito un archivo .jar o algo que pueda vincular a un programa Java existente que estoy escribiendo. Imagino que el programa sería bastante simple, solo necesito la operación de extracción de imágenes – Phil

+0

No creo que encuentre ninguna biblioteca que se adapte exactamente a su escenario. Deberá usar un analizador y escribir algún código de descarga usted mismo. – craftsman

Respuesta

12

sólo tiene que utilizar un simple HTML parser, como jTidy, y luego get all elements by tag nameimg y luego recoger el atributo src de cada uno en un List<String> o tal vez List<URI>.

Puede obtener un InputStream de URL usando URL#openStream() y luego alimentarlo a cualquier analizador HTML que desee utilizar. He aquí un ejemplo patada de salida:

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

Sin embargo, debo admitir que HtmlUnit según lo sugerido por Bozho de hecho se ve mejor.

+0

y htmlunit está haciendo aproximadamente lo que dice su respuesta, por lo que +1 para aclarar qué debería suceder exactamente. – Bozho

+1

HtmlUnit está, sin embargo, menos hinchado que jTidy. Ofrece formas * integradas * para abrir una página web y obtener elementos/atributos de interés usando XPath. – BalusC

0

Puede analizar el HTML, y recoger todos los atributos SRC de los elementos IMG en una colección. A continuación, descargue cada recurso de cada url y escríbalo en un archivo. Para el análisis hay varios analizadores HTML disponibles, Cobra es uno de ellos.

4

Esto está muerto sencillo con HTML Parser (y cualquier otro analizador de HTML decente):

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

Con las etiquetas Open Graph y unidad de HTML, puede extraer los datos con mucha facilidad (PageMeta es un POJO sencilla celebración de los resultados):

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

puede simplemente usar expresiones regulares en 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); 
    } 
Cuestiones relacionadas