Cómo usar Java en el raspado de datos web para desbloquear puntos de datos críticos de una misión

¿No tiene certeza de cuáles herramientas de soporte debe descargar para crear un entorno de Java ideal para recopilación de datos? ¿No es claro cómo se extraen o analizan puntos de datos desde HTML para luego convertirse en formato CSV? Esta publicación ayudará a dejar claros estos aspectos.
Nadav Roiter - Bright Data content manager and writer
Nadav Roiter | Data Collection Expert
14-Aug-2022

En este artículo, discutiremos:

¿Qué es Java?

Java es un lenguaje de programación de fuente abierta, se desarrolló con el lema “escribe una sola vez, ejecuta donde sea” (“write once, run anywhere”). Esto quiere decir que mientras un programa soporte Java, no será necesario reescribir los scripts. Este lenguaje es en especial útil para especialistas en programación que acostumbran usar C y C++, ya que la sintaxis de Java es muy similar.

A continuación, presentamos algunas de las ventajas más notables del uso de Java:

  • Es un programa en extremo popular, es decir que hay una comunidad extensa en línea que puede ayudar a dar soporte a sus esfuerzos y a resolver problemas. Además, existe una buena cantidad de documentación y eso lo convierte en más sencillo de usar.
  • Sus capacidades son dinámicas, en especial en referencia a “modificación de código de tiempo de ejecución (runtime)”.
  • Es de fuente abierta, es decir que es compatible con una variedad de plataformas, permitiendo el uso de diferentes APIs (Interfaz de programación de aplicaciones).

Para las personas interesadas en instalar Java de manera manual en su computadora con Windows, siéntanse libres de acudir a la página oficial para descarga manual.

Raspado de datos web usando Java

Algunas personas prefieren usar Selenium para raspar datos o recopilar datos usando Beautiful Soup, otra opción popular es utilizar Java para raspado de datos web. Presentamos esta guía paso a paso para lograr dicho propósito con simplicidad.

Antes de comenzar, es necesario asegurarse de que tiene la configuración adecuada en su computadora, de modo que el entorno sea óptimo para el raspado de datos web:

  • Java11 – hay versiones más avanzadas, sin embargo, esta sigue siendo la más popular entre desarrolladores.
  • Maven – herramienta para construcción de proyectos, sirve para la gestión de dependencias y similares.
  • IntelliJ IDEA – IntelliJ IDEA es un entorno de desarrollo integral, su propósito es el desarrollo de software para computador, escrito en Java.
  • HtmlUnit – simulador de actividad en navegador (p. ej., simulación de envío de formularios).

Puede revisar las instalaciones usando los comandos a continuación:

  •    ‘java -version’
  •    ‘mvn -v’

Paso uno: inspección de la página objetivo

Dirigirse al sitio web objetivo donde le interesa recopilar datos, hacer clic con el botón derecho en cualquier lado, seleccionar “inspeccionar elemento” para tener acceso a la “Consola para desarrolladores”, esto le dará acceso al HTML del sitio.

Paso dos: comenzar el raspado de datos raspando datos web the HTML

Abrir IntelliJ IDEA y crear un proyecto Maven:

Los proyectos Maven tienen un archivo pom.xml. Navegar hacia el archivo pom.xml y comenzar actualizando la versión JDK para su proyecto:

<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>11</maven.compiler.source>
		<maven.compiler.target>11</maven.compiler.target>
	</properties>

Ya que usaremos la HTMLunit, se debe agregar la dependencia “htmlunit” al archivo pom.xml como se muestra a continuación:

<dependencies>
		<dependency>
			<groupId>net.sourceforge.htmlunit</groupId>
			<artifactId>htmlunit</artifactId>
			<version>2.63.0</version>
		</dependency>
	</dependencies>

Ahora, las circunstancias son las correctas para comenzar a escribir la primer clase Java. Comenzar creando un nuevo archivo fuente Java como se presenta a continuación:

Será necesario crear un método principal para que nuestra aplicación inicie. Crear el método principal como se describe a continuación:

   public static void main(String[] args) throws IOException {
   }

La App iniciará con este método. Es el punto de entrada de la aplicación. Puede ahora enviar una solicitud HTTP usando importaciones HtmlUnit:

   import com.gargoylesoftware.htmlunit.*;
   import com.gargoylesoftware.htmlunit.html.*;
   import java.io.IOException;
   import java.util.List;

Ahora, se creará un WebClient configurando las opciones como se detalla a continuación:

	private static WebClient createWebClient() {
		WebClient webClient = new WebClient(BrowserVersion.CHROME);
		webClient.getOptions().setThrowExceptionOnScriptError(false);
		webClient.getOptions().setCssEnabled(false);
	           webClient.getOptions().setJavaScriptEnabled(false);
		return webClient;
	}

Paso tres: Extracción/análisis de datos a partir del HTML

Ahora, extraigamos los datos del precio objetivo que nos interesa. Para lograrlo, usaremos los comandos HtmlUnit incluidos. Así es como se verían los puntos de datos pertenecientes a “precio de producto”:

		WebClient webClient = createWebClient();
	    
		try {
			String link = "https://www.ebay.com/itm/332852436920?epid=108867251&hash=item4d7f8d1fb8:g:cvYAAOSwOIlb0NGY";
			HtmlPage page = webClient.getPage(link);
			
			System.out.println(page.getTitleText());
			
			String xpath = "//*[@id=\"mm-saleDscPrc\"]";			
			HtmlSpan priceDiv = (HtmlSpan) page.getByXPath(xpath).get(0);			
			System.out.println(priceDiv.asNormalizedText());
			
			CsvWriter.writeCsvFile(link, priceDiv.asNormalizedText());
			
		} catch (FailingHttpStatusCodeException | IOException e) {
			e.printStackTrace();
		} finally {
			webClient.close();
		}	

Para obtener el XPath del elemento deseado, usar la Consola para desarrolladores. En la Consola para desarrolladores, hacer clic con el botón derecho sobre la sección seleccionada y hacer clic en “Copiar XPath”. Este comando copiará la sección seleccionada como una expresión de XPath:

Las páginas web contienen enlaces, gráficos y tablas. Si se selecciona el XPath de una tabla, se puede exportar en un CSV y realizar más cálculos y análisis con programas como Microsoft Excel. En el siguiente paso, examinaremos la exportación de una tabla como un archivo CSV.

Paso cuatro: Exportación de datos

Ahora que se ha analizado los datos, se pueden exportar en un formato CSV para mayor análisis. Este formato podría ser preferible, por encima de otros, para algunos profesionales, ya que puede abrirse/verse con facilidad en Microsoft Excel. Se presentan las líneas de comando a usar para lograr esto:

	public static void writeCsvFile(String link, String price) throws IOException {
		
		FileWriter recipesFile = new FileWriter("export.csv", true);

		recipesFile.write("link, price\n");

		recipesFile.write(link + ", " + price);

		recipesFile.close();
	}

En resumen

Java puede ser una manera efectiva para programadores, científicos de datos y equipos de expertos para obtener acceso a los puntos de datos objetivo para sus necesidades de negocio. Sin embargo, el uso de Java para el raspado de datos web puede ser una tarea bastante laboriosa. Por esa razón, muchas compañías han decidido automatizar por completo sus operaciones de recopilación de datos. Al utilizar una herramienta como Data Collector, cualquier empleado en una firma puede recopilar los datos que requiere, sin necesidad de poseer capacidad de escritura de código. Todo lo que necesitan hacer es elegir su sitio web objetivo y conjunto de datos, y después, seleccionar su “frecuencia de recopilación “, “formato” y “método de entrega” preferido.

Nadav Roiter - Bright Data content manager and writer
Nadav Roiter | Data Collection Expert

Nadav Roiter is a data collection expert at Bright Data. Formerly the Marketing Manager at Subivi eCommerce CRM and Head of Digital Content at Novarize audience intelligence, he now dedicates his time to bringing businesses closer to their goals through the collection of big data.