Usando Java para la recolección y extracción de datos en la Web

Contenido del artículo
- Frameworks disponibles para trabajar con proxies geográficamente dirigidos
- Requisitos previos de la guía para quienes compran IPs residenciales
- ABC de selectores CSS de un proveedor de proxies geográficamente dirigidos
- Guía paso a paso de un sitio web proxy de confianza
- Consulta
- Conclusión
Colaborando con usuarios que demandan herramientas para la recolección y extracción de datos y ejecutando un ecosistema de proxies geográficamente dirigidos, Dexodata, un sitio web proxy de confianza y rentable, sabe que Java no es la única opción para recolectar información. Cuando hacemos disponible una prueba gratuita de proxy o ofrecemos comprar IPs residenciales a un gran precio, PHP, Node.js, C#, Python, etc. también se aplican de manera rutinaria. Sin embargo, Java sigue siendo una forma preferida para muchos. Hoy, exploraremos su potencial.
Frameworks disponibles para trabajar con proxies geográficamente dirigidos
Cuando la recolección de datos web y la extracción de datos con Java están en la agenda, a menudo se aplican estas dos bibliotecas: por un lado, está JSoup y, por otro lado, existe HtmlUnit.
En cuanto a JSoup, es una biblioteca potente, efectiva y relativamente fácil de usar, capaz de abordar con éxito documentos HTML mal formados. De hecho, esa es exactamente la razón por la que se llama "JSoup", ya que "tag soup" significa cosas mal formadas. Para todos los efectos, JSoup es probablemente la biblioteca Java más buscada y ampliamente utilizada en términos de recolección de información.
En cuanto a HtmlUnit, se puede describir como un navegador sin cabeza (es decir, un navegador sin GUI) para herramientas impulsadas por Java. Es capaz de imitar y replicar los aspectos típicos de las soluciones de navegación, incluyendo la captura de ciertos componentes de página, haciendo clic en varios puntos, etc. Tal como su nombre implica, este último se aplica típicamente para ejecutar rondas de pruebas unitarias. Literalmente, esta es una forma de emular una solución de navegación en un escenario de prueba.
Además, HtmlUnit es una opción adecuada en el contexto de la recolección de datos web y la extracción de datos. La principal ventaja es que las personas solo requieren una línea de código para desactivar tanto JS como CSS. Sin lugar a dudas, esa es una característica útil, ya que JS y CSS son mayormente irrelevantes en situaciones de scraping. A continuación, evaluamos ambas y diseñamos herramientas de scraping.

Como un sitio web proxy de confianza con un grupo global de proxies geográficamente dirigidos y otras ventajas significativas, enumeramos regularmente varias técnicas que empoderan a los equipos para leer y alterar una página cargada. Cuando discutimos la oportunidad de ordenar una prueba gratuita de proxy o comprar IPs residenciales, a menudo acentuamos la ventaja crucial de HtmlUnit: simplifica las interacciones con las páginas. En esta capacidad se asemeja a un navegador (no es una sorpresa, ya que funciona como un navegador sin cabeza). Este hecho implica capacidades como leer, completar formularios, hacer clics, y así sucesivamente. En nuestro escenario, Dexodata aplica el potencial de esta biblioteca para leer información de URLs. Síguenos para aprender más.
Requisitos previos de la guía para quienes compran IPs residenciales
Esta visión general espera que los lectores ya dominen Java hasta cierto punto. Maven se utiliza aquí para gestionar paquetes en nuestro escenario. Además de los conceptos básicos de Java, los lectores deben saber cómo funcionan las páginas en la Web. Por lo tanto, la familiaridad con HTML es obligatoria. También, la capacidad de seleccionar elementos, mediante XPath o selectores CSS, también puede considerarse vital. Recuerde: no todas las bibliotecas existentes son compatibles cuando se trata de XPath. Triste pero cierto.
ABC de selectores CSS de un proveedor de proxies geográficamente dirigidos
Haga una parada para refrescar su memoria sobre la esencia de los selectores CSS. Ellos abarcan:
- #firstname – selecciona cada elemento cuyo id coincide con "firstname".
- .blue – selecciona cada componente siempre que su clase incluya "blue".
- p – elige cada etiqueta <p>.
- div#firstname – responsable de seleccionar elementos div cuyo id coincide con "firstname".
- p.link.new – preste atención a la ausencia de un espacio vacío. Selecciona <p class="link new">.
- p.link .new – selecciona cada componente relacionado con la clase "new", que a su vez puede encontrarse dentro de <p class="link">.
Guía paso a paso de un sitio web proxy de confianza
Dexodata, basado en la vasta experiencia técnica acumulada como un sitio web proxy de confianza, está a punto de diseñar una solución de análisis en Java mediante el uso efectivo de la biblioteca Maven en una gran combinación con JSoup y HtmlUnit. De hecho, estas mismas bibliotecas nos permitirán analizar y manipular fácilmente el contenido HTML dentro de una aplicación Java.
Siga las instrucciones paso a paso proporcionadas a continuación para configurar su proyecto para usar con proxies geográficamente dirigidos. Por cierto, recordemos que con Dexodata las personas pueden no solo comprar IPs residenciales, sino que también los nuevos usuarios tienen derecho a una prueba gratuita de proxy. Comencemos.
1. La etapa inicial es obtener una biblioteca.
Maven puede ayudar. Simplemente use un entorno Java disponible. Allí, genere un proyecto Maven. En caso de que Maven sea irrelevante por alguna razón, visite este espacio web. Allí, uno puede elegir descargas alternativas.
Ok, complete la instalación de Maven y genere un nuevo proyecto. Aquí está la guía de instalación para explorar.
Una vez instalado, genere un nuevo proyecto Maven ejecutando este comando en la terminal:
mvn archetype:generate -DgroupId=com.mycompany.parser -DartifactId=java-parser -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Al hacer esto a través de este comando, se generará una nueva carpeta de proyecto llamada 'java-parser.' Eso nos da todos los archivos necesarios de Maven junto con una estructura básica. Se ha dado el primer y importante paso.
2. Ahora, se deben agregar dependencias al archivo pom.xml.
No es un gran problema en absoluto. En el archivo pom.xml (que significa "Modelo de Objeto del Proyecto") se debe agregar un nuevo segmento. Su misión y tarea es trabajar con dependencias. Posteriormente, llega el momento de proporcionar una dependencia para JSoup.
- Para hacerlo, navegue hacia la carpeta 'java-parser'.
- Allí, abra el archivo pom.xml.
- Incluya estas dependencias justo dentro de la etiqueta <dependencies>, como se destaca a continuación:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.56.0</version>
</dependency>
Guarde el archivo pom.xml. Dexodata, como proveedor de proxies geográficamente dirigidos y mentor de codificación, sigue con usted.
3. Genere una nueva clase Java.
En la carpeta src/main/java/com/mycompany/parser, genere un nuevo archivo Java llamado 'HtmlParser.java'. Este archivo acomodará la implementación de la clase principal y servirá como el punto de entrada para el futuro analizador.
4. Importe las bibliotecas necesarias en 'HtmlParser.java'. Abra el archivo en un editor de texto de su elección o IDE. Antes de comenzar a escribir cualquier código, se deben importar las bibliotecas necesarias relacionadas con HtmlUnit y JSoup. Le permiten obtener y analizar contenido HTML fácilmente. Agregue estas declaraciones de importación al principio del archivo HtmlParser.java:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
Ya hemos hecho un progreso significativo, siga avanzando con nuestro sitio web proxy de confianza.
5. Inicialice un objeto 'WebClient' y desactive JS junto con CSS.
Dentro de la clase HtmlParser, implementará métodos para crear un objeto WebClient, obtener una página HTML mediante HtmlUnit, analizar el contenido HTML a través de JSoup, extraer datos específicos (como título, descripción e imagen), y un método principal para ejecutar estas tareas en secuencia.
public class HtmlParser {
private static WebClient createWebClient() {
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);
return webClient;
}
}
6. Genere un método para obtener una página HTML mediante HtmlUnit:
public static HtmlPage fetchHtmlPage(String url) {
try (WebClient webClient = createWebClient()) {
return webClient.getPage(url);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
7. Genere un método para analizar el contenido HTML a través de JSoup:
public static Document parseHtmlContent(String htmlContent) {
return Jsoup.parse(htmlContent);
}
8. Siga trabajando en el HTML analizado:
public static void extractInformation(Document document) {
// Extraer información del documento HTML analizado utilizando métodos de JSoup
// por ejemplo, document.select("a[href]"), document.select("img[src$=.png]")
// Para más detalles, consulte la documentación de JSoup: https://jsoup.org/cookbook/
}
Está haciendo un buen trabajo, quedan unos pocos pasos por hacer.
9. Cree un método para obtener información del HTML analizado:
public static void main(String[] args) {
String url = "https://www.example.com";
HtmlPage htmlPage = fetchHtmlPage(url);
if (htmlPage != null) {
String htmlContent = htmlPage.asXml();
¡Increíble! Como uno reconoce, no hay ciencia espacial en ello. Al menos, cuando su empresa trabaja con un sitio web proxy de confianza que proporciona proxies geográficamente dirigidos en todo el mundo. Sabemos lo que hacemos.
Los pasos anteriores se dedicaron a obtener el contenido HTML de una página web mediante HtmlUnit y trabajar en él y analizarlo mediante JSoup. Ahora, es el momento de centrarse en extraer datos específicos, como el título, la descripción y la imagen de una página de tienda en línea. Para que esto suceda en la realidad, primero debemos identificar las etiquetas HTML y los atributos asociados con tales componentes. Los usuarios pueden aplicar las herramientas de desarrollador de su navegador web para inspeccionar y "escanear" el código fuente HTML y encontrar los componentes relevantes.
10. Una vez que haya identificado los componentes HTML relevantes, puede utilizar las potentes capacidades de selección de JSoup para obtener los datos.
Por ejemplo, supongamos que el título está dentro de una etiqueta <h1>, la descripción está dentro de una etiqueta <div> con la clase "product-description", y la imagen está dentro de una etiqueta <img> con la clase "product-image". Puede aplicar este fragmento de código en su método extractInformation() para obtener estos datos:
public static void extractInformation(Document document) {
// Extraer el título
String title = document.select("h1").text();
System.out.println("Título: " + title);
// Extraer la descripción
String description = document.select("div.product-description").text();
System.out.println("Descripción: " + description);
// Extraer la URL de la imagen
String imageUrl = document.select("img.product-image").attr("src");
System.out.println("URL de la imagen: " + imageUrl);
}
11. Si el sitio se basa en JavaScript para cargar contenido dinámicamente, un equipo podría necesitar habilitar el soporte de JS en HtmlUnit cambiando el método createWebClient():
private static WebClient createWebClient() {
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.waitForBackgroundJavaScript(5000); // Esperar a que JavaScript termine de cargar
return webClient;
}
Tenga en cuenta que habilitar JavaScript puede aumentar el tiempo de carga junto con las posibilidades de encontrar errores o problemas de compatibilidad con los scripts del sitio. Este problema merece su atención, Dexodata, como un sitio web proxy de confianza, conoce este hecho difícil.
12. Habiendo obtenido con éxito los títulos, descripciones e imágenes de la tienda en línea, puede optar por almacenar esta información para un análisis o procesamiento posterior. Una técnica común es guardar la información recopilada en un archivo. Puede elegir varios formatos de archivo dependiendo de sus necesidades, como CSV, JSON o XML. En este escenario, Dexodata guardará los datos en un archivo CSV. Así es como va.
Genere un método que escriba la información extraída en un archivo CSV:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public static void writeToCSV(String title, String description, String imageUrl, String outputFilePath) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath, true))) {
String csvLine = String.join(",", "\"" + title.replace("\"", "\"\"") + "\"",
"\"" + description.replace("\"", "\"\"") + "\"",
"\"" + imageUrl.replace("\"", "\"\"") + "\"");
writer.write(csvLine);
writer.newLine();
} catch (IOException e) {
e.printStackTrace();
}
}
Esta técnica mantiene el título, la descripción, la URL de la imagen, así como el outputFilePath como parámetros de entrada. Así, escribe la información como una línea CSV en el archivo especificado. También maneja las comillas dobles dentro del texto reemplazándolas con dos comillas dobles, como lo exige CSV.
13. Actualice la técnica 'extractInformation()' para llamar al método 'writeToCSV()' con la información obtenida:
public static void extractInformation(Document document, String outputFilePath) {
// Extraer el título, la descripción y la URL de la imagen como antes
// Escribir los datos extraídos en el archivo CSV
writeToCSV(title, description, imageUrl, outputFilePath);
}
14. Modifique la técnica principal para incluir la ruta del archivo de salida y pásela a la técnica 'extractInformation()':
public static void main(String[] args) {
String url = "https://www.example.com";
String outputFilePath = "output.csv";
HtmlPage htmlPage = fetchHtmlPage(url);
if (htmlPage != null) {
String htmlContent = htmlPage.asXml();
Document document = parseHtmlContent(htmlContent);
extractInformation(document, outputFilePath);
}
}
Ahora, cuando se ejecute el analizador, obtendrá el título, la descripción y la URL de la imagen de la página de la tienda en línea y escribirá los datos en el archivo CSV especificado. Está en posición de personalizar aún más el formato de salida del archivo, agregar encabezados o incluso escribir en otros formatos de archivo como JSON o XML dependiendo de sus requisitos específicos.
Pruebe su analizador ejecutando el método principal con la URL de una página de producto de una tienda en línea. Asegúrese de ajustar los selectores JSoup de acuerdo con la estructura real de la página del mundo real. Siempre puede actualizar este analizador para extraer información adicional, como precios de productos, especificaciones o reseñas de usuarios según los requisitos específicos. Además, las personas pueden implementar manejo de errores y escenarios de casos límite para hacer su analizador más robusto y versátil.
Con análisis de negocios de comercio electrónico como uno de los escenarios clave para los proxies geográficamente dirigidos de Dexodata, sabemos lo genial que sería hacer las cosas con un analizador así.

Consulta
El objetivo principal de los programas de scraping web en Java es todo sobre consultar un documento HTML. Normalmente, es un proceso que consume tiempo, pero es inevitable.
Con JSoup, existen múltiples formas de obtener los componentes de interés. Estas técnicas incluyen getElementByID o getElementsByTag. El flujo de consulta asociado con el DOM se simplifica a través de ellos.
Nuestro escenario permite getElementByID junto con getElementsByClass. Sin embargo, tenga en cuenta una distinción importante. Mientras que getElementById (preste atención, es singular) está destinado a devolver un solo objeto Element, en el caso de getElementsByClass (preste atención, es plural, en contraste) se devolverá una lista de arreglos que contiene objetos Element.
Convenientemente, JSoup presenta una clase Elements. Lo que hace es ampliar ArrayList<Element>. Como resultado, el código se vuelve más limpio y se habilitan funcionalidades adicionales.
Las líneas de código presentadas a continuación aplican la técnica first() para obtener el primer componente de la ArrayList. Una vez que se completa, se aplica la técnica text() para obtener el contenido de texto.
Element firstHeading = document.getElementsByClass("firstHeading").first();
System.out.println(firstHeading.text());
Nuestros lectores pueden suponer que esas características son lo suficientemente eficientes. Al mismo tiempo, todavía están limitadas a JSoup. En la mayoría de las situaciones, se debe preferir la función select. La única excepción que la hace totalmente inútil es cuando las personas realmente tienen la intención de recorrer un documento hacia arriba. Si ese es su caso, aplique opciones como children(), child() y parent(). Simplemente visite aquí para explorar una gama completa de técnicas factibles.
La línea de código muestra el uso de la técnica selectFirst() responsable de devolver la primera coincidencia:
Element firstHeading= document.selectFirst(".firstHeading");
En nuestro escenario aquí, se aplica la técnica selectFirst(). Si se deben elegir varios componentes, los usuarios también son libres de revelar el potencial de la técnica select(). De esta manera, el selector CSS se mantiene como un parámetro. Tan simple como ABC. Además, una instancia de Elements está sujeta a ser devuelta como una extensión del tipo ArrayList<Element>.
Conclusión
Para sobrevivir y expandirse, prácticamente cada equipo recurre a la recolección de datos web y la extracción de datos (preferiblemente, en contacto con un sitio web proxy avanzado y de confianza) para evaluar la información necesaria y superar a sus rivales. Estar en buenos términos con los conceptos básicos de la recolección de datos web y estar completamente preparado para construir scrapers basados en Java es valioso, ya que ayuda a la toma de decisiones más rápidas y oportunas basadas en datos. Lo que ayuda tanto como eso, es un sitio web proxy de confianza que ejecuta un ecosistema de proxies geográficamente dirigidos. Por ejemplo, en Dexodata los equipos pueden comprar IPs residenciales para analizadores o, si son nuevos en la plataforma, solicitar una prueba gratuita de proxy.