Para construir un sitio web con contenido dinámico, decidí utilizar un爬虫 en Java para recopilar imágenes desde un sitio externo. A continuación, se detallan las técnicas y herramientas utilizadas.
1. Tipos de爬虫
Existen dos tipos principales de爬虫:
- Crawlers basados en API: Estos crawlers consumen datos directamenet de una API que proporciona información en formato JSON u otro tipo estructurado.
- Crawlers HTML estáticos: Estos crawlers analizan el código HTML de una página y extraen información específica del DOM.
En este caso, utilizaremos un爬crawler HTML estático medainte la biblioteca Jsoup, que permite manipular el DOM de manera similar a jQuery.
2. Dependencias Maven necesarias
A continuación, se muestra el extracto del archivo pom.xml con las dependencias requeridas:
<dependencies>
<!-- Biblioteca para realizar solicitudes HTTP -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<!-- Biblioteca para analizar HTML -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
</dependency>
</dependencies>
3. Implementación del爬crawler
3.1 Realización de una solicitud HTTP
Primero, creamos una función para enviar una solicitud HTTP GET a la URL objetivo y obtener el contenido HTML como una cadena.
public static String fetchHtml(String url) throws Exception {
HttpGet request = new HttpGet(url);
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(5000)
.build();
request.setConfig(config);
CloseableHttpClient client = HttpClients.createDefault();
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(response.getEntity(), "UTF-8");
} else {
throw new IOException("Error al obtener la página: " + response.getStatusLine().getStatusCode());
}
}
3.2 Extracción de datos con Jsoup
Una vez obtenido el contenido HTML, lo procesamos utilizando Jsoup para extraer los elementos deseados.
public static void parseHtml(String htmlContent) {
Document document = Jsoup.parse(htmlContent);
Elements images = document.select(".img_box a img");
for (Element image : images) {
String altText = image.attr("alt");
String imageUrl = image.attr("src");
System.out.println("Texto alternativo: " + altText);
System.out.println("URL de la imagen: " + imageUrl);
}
}
4. Ejemplo práctico
Supongamos que queremos extraer todas las imágenes de la siguiente URL:
String targetUrl = "https://www.ejemplo.com/galeria";
try {
String html = fetchHtml(targetUrl);
parseHtml(html);
} catch (Exception e) {
e.printStackTrace();
}
Este código obtiene el contenido HTML de la página, extrae las etiquetas ![]() dentro del contenedor .img_box y muestra tanto el texto alternativo como la URL de cada imagen.
Con esta técnica, puedes automatizar la recolección de imágenes y generar un sitio web dinámico con el contenido obtenido.