Volver a Blog
Web ScrapingJava
Web Crawling con Java en 2024 - ¡La guía más detallada!
Esta guía se centra en el rastreo web con Java en 2024. Proporciona tutoriales detallados paso a paso. ¡Empieza a explorar ahora!
May 10, 2024

Tutorial básico de Web Scraping

Esta guía se centra en el web scraping con Java en 2024. Proporciona un tutorial paso a paso sobre cómo extraer datos de sitios web utilizando el sitio Scrapeme como ejemplo. Utilizando Java y la biblioteca jsoup, aprenderá a raspar recursos estáticos de páginas web y recuperar información específica como nombres de productos, imágenes, precios y detalles.

Esta guía le proporcionará los conocimientos necesarios para extraer datos de sitios web similares y le servirá de base para técnicas de extracción web más avanzadas.

Prepárese para aprovechar la potencia de Java para el web scraping en esta era moderna.

Requisitos del entorno:

Es importante tener en cuenta que ya que vamos a utilizar Java para el proyecto de demostración en este artículo, por favor asegúrese de que tiene los siguientes requisitos previos en su lugar antes de continuar:

Entorno recomendado:

  • Java: Cualquier versión 8+ LTS
  • Herramientas de compilación: Cualquier versión de Gradle o Maven compatible con su versión local de Java
  • IDE: Cualquiera de tus preferencias, como Eclipse, IntelliJ IDEA, VS Code

Nota: Se omite el proceso de instalación del entorno.

Entorno Case:

JDK 21

javascript Copy
# java -version
java version "21.0.2" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode, sharing)

Herramientas de compilación: Gradle

javascript Copy
# gradle -version
Gradle 8.7

Build time: 2024-03-22 15:52:46 UTC
Revision: 650af14d7653aa949fce5e886e685efc9cf97c10

Kotlin: 1.9.22
Groovy: 3.0.17
Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM: 21.0.2 (Oracle Corporation 21.0.2+13-LTS-58)
OS: Mac OS X 14.4.1 aarch64

IDE: IntelliJ IDEA

Creación de proyectos

Información del proyecto:

crear proyecto java

Después de la creación, su proyecto puede tener este aspecto:

expresión del proyecto

Se añaden dependencias y, por el momento, bastará con jsoup (jsoup: Java HTML Parser):

javascript Copy
// gradle => build.gradle => dependencies
implementation 'org.jsoup:jsoup:1.17.2'

¡Vamos a rastrear ScrapeMe!

Ha llegado el momento de rastrear el sitio web. Aquí voy a rastrear el ScrapeMe, sólo como referencia. Puedes revisar todo el progreso y luego terminar tu proyecto.

Análisis del sitio objetivo:

En primer lugar, vamos a echar un vistazo a los datos que queremos raspar desde el sitio Scrapeme. Abra el sitio en un navegador y ver el código fuente para analizar los elementos de destino. A continuación, recuperar los elementos deseados a través de código.

Lista de productos de la página de inicio de ScrapeMe:

Página de ScrapeMe

ScrapeMe Detalles del producto:

Productos ScrapeMe
Nuestro objetivo es rastrear la página de inicio de la información de estos productos, incluido el nombre del producto, las imágenes del producto, el precio del producto y la dirección de los detalles del producto.

Análisis del código fuente de la página

Elementos de la página

Observando el análisis de elementos de página, sabemos que la página actual tiene todos los elementos de página de producto: ul.products, y cada elemento de detalle de producto: li.product.

Elementos de la página

Detalles del producto

Un análisis más detallado encuentra el nombre del producto: a h2, la imagen del producto: a img.src, el precio del producto: a span, la dirección de los detalles del producto: a.href.

Detalles del producto

Demostración de código

ScrapeMeProduct.java

java Copy
public class ScrapeMeProduct {
  /**
   * product detail url
   */
  private String url;
  /**
   * product image
   */
  private String image;
  /**
   * product name
   */
  private String name;
  /**
   * product price
   */
  private String price;

  // Getters and Setters
  
  @Override
  public String toString() {
    return "{ \"url\":\"" + url + "\", "
        + " \"image\": \"" + image + "\", "
        + "\"name\":\"" + name + "\", "
        + "\"price\": \"" + price + "\" }";
  }
}

Scraper.java

java Copy
import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Scraper {
  // scrapeme site url
  private static final String SCRAPEME_SITE_URL = "https://scrapeme.live/shop";

  public static List<ScrapeMeProduct> scrape() {
    // html doc for scrapeme page
    Document doc;
    // products data
    List<ScrapeMeProduct> pokemonProducts = new ArrayList<>();
    try {
      doc = Jsoup.connect(SCRAPEME_SITE_URL)
          .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36") // mock userAgent header
          .header("Accept-Language", "*") // mock Accept-Language header
          .get();
      // select product nodes
      Elements products = doc.select("li.product");
      for (Element product : products) {
        ScrapeMeProduct pokemonProduct = new ScrapeMeProduct();
        pokemonProduct.setUrl(product.selectFirst("a").attr("href")); // parse and set product url
        pokemonProduct.setImage(product.selectFirst("img").attr("src")); // parse and set product image
        pokemonProduct.setName(product.selectFirst("h2").text()); // parse and set product name
        pokemonProduct.setPrice(product.selectFirst("span").text()); // parse and set product price
        pokemonProducts.add(pokemonProduct);
      }
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    return pokemonProducts;
  }
}

Main.java

java Copy
import io.xxx.basic.ScrapeMeProduct;
import io.xxx.basic.Scraper;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<ScrapeMeProduct> products = Scraper.scrape();
    products.forEach(System.out::println);
    // continue coding
  }
}

Resultados Expresión

Resultados Expresión

Conclusión

Hasta ahora hemos aprendido a utilizar Java para el rastreo de datos de páginas estáticas simple, el siguiente vamos a ser avanzado sobre esta base, utilizando Java concurrente rastreo ScrapeMe sobre todo los datos del producto , así como el uso de código Java conectado al navegador Nstbrowser para el rastreo de datos , porque el capítulo avanzado se utilizará para Nstbrowser en el navegador sin cabeza y otras características.

Más