Guía para el raspado web con Java

¿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.
6 min read
Nadav Roiter - Bright Data content manager and writer
Nadav Roiter
Data Collection Expert

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 muy popular, lo que significa que hay una gran comunidad en línea que puede ayudar a apoyar sus esfuerzos, y a solucionar problemas. Además, cuenta con una amplia documentación que facilita su uso.
  • El hecho de que tiene capacidades dinámicas, por ejemplo, en específico cuando se trata de la “modificación del código de tiempo de ejecución”.
  • Es de código abierto, lo que significa que es compatible con diversas 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 − Existen versiones más avanzadas, pero ésta sigue siendo la más popular entre los desarrolladores.  
  • Maven − Es una herramienta de automatización de la construcción para la gestión de dependencias y similares.
  • IntelliJ IDEA − IntelliJ IDEA es un entorno de desarrollo integrado para desarrollar software informático escrito en Java.  
  • HtmlUnit − Es un simulador de actividades del navegador (por ejemplo, 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 se dan las circunstancias adecuadas para empezar a escribir la primera clase Java. Se comenzará por crear un nuevo archivo fuente Java.

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 un medio eficaz para que programadores, científicos de datos y equipos de expertos accedan a los puntos de datos objetivo que su empresa necesita. Pero utilizar Java para el raspado web puede ser una tarea muy laboriosa. Por eso, muchas empresas han decidido automatizar por completo sus operaciones de recopilación de datos. Mediante la utilización de una herramienta como Web Scraper IDE, cualquier empleado de una empresa puede ahora recopilar los datos que necesitan con cero capacidades de codificación. Todo lo que tienen que hacer es elegir el sitio de destino y el conjunto de datos y, a continuación, seleccionar la “frecuencia de recopilación”, el “formato” y el “método de entrega” deseados.  

More from Bright Data

Datasets Icon
Get immediately structured data
Easily access structured public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Get updated or new records from your preferred dataset based on a pre-defined schedule.
Web scraper IDE Icon
Build the scraper
Build scrapers in a cloud environment with code templates and functions that speed up the development. The solution is based on Bright Data’s Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.
Web Unlocker Icon
Implement an automated unlocking solution
Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?