Scraping web con Kotlin: una guía paso a paso

Kotlin es una potente herramienta para el Scraping web. Aprenda a utilizarla de forma eficaz en esta guía, que abarca la configuración, las técnicas y las mejores prácticas para un Scraping web eficiente y ético.
24 min de lectura

Este tutorial le enseñará a crear un script de Scraping web en Kotlin. En concreto, aprenderá:

  • Por qué Kotlin es un lenguaje ideal para extraer datos de un sitio web.
  • Cuáles son las mejores bibliotecas de scraping de Kotlin.
  • Cómo crear un Scraper Kotlin desde cero.

¡Empecemos!

¿Es Kotlin una opción viable para el Scraping web?

Resumen: ¡Sí, lo es! ¡Y puede que incluso sea mejor que Java!

Kotlin es un lenguaje de programación de uso general, multiplataforma y de tipado estático cuya biblioteca estándar depende de la biblioteca de clases de Java. Lo que hace especial a Kotlin es su enfoque conciso y divertido de la codificación. Cuenta con el respaldo de Google, que lo ha elegido como su lenguaje preferido para el desarrollo de Android.

Gracias a su interoperabilidad con la JVM, es compatible con todas las bibliotecas de scraping de Java. Por lo tanto, puedes aprovechar el vasto ecosistema de bibliotecas de Java, pero con una sintaxis más concisa e intuitiva. ¡Es una situación en la que todos ganan!

Además, Kotlin incluye algunas bibliotecas nativas, entre las que se encuentran analizadores HTML y bibliotecas de automatización de navegadores, que simplifican la extracción de datos. ¡Descubra algunas de las más populares!

Las mejores bibliotecas de Scraping web de Kotlin

Aquí tienes una lista de algunas de las mejores bibliotecas de Scraping web para Kotlin:

  • skrape{it}: una biblioteca de pruebas HTML/XML y Scraping web basada en Kotlin para el parseo y la interpretación de HTML. Incluye varios extractores de datos que permiten a skrape{it} actuar tanto como un analizador HTML tradicional como un navegador de scraping sin interfaz gráfica para la representación DOM del lado del cliente.
  • chrome-reactive-kotlin: un cliente de protocolo DevTools de bajo nivel escrito en Kotlin para controlar programáticamente el navegador basado en Chromium.
  • ksoup: una biblioteca Kotlin ligera inspirada en Jsoup. Ksoup proporciona métodos para analizar HTML, extraer etiquetas HTML, atributos y texto, y codificar y descodificar entidades HTML.

No olvides que Kotlin es interoperable con Java. Esto significa que puedes utilizar cualquier otra biblioteca de Scraping web en Java. Una de ellas es Jsoup, uno de los analizadores HTML más populares que existen. Obtén más información en nuestra guía sobre Scraping web con Jsoup.

Requisitos

Sigue las instrucciones que se indican a continuación para configurar tu entorno Kotlin de Scraping web.

Configurar el entorno

Para escribir y ejecutar una aplicación Kotlin en tu máquina, necesitas tener instalado localmente un JDK (Java Development Kit). Descarga la última versión LTS del JDK desde el sitio web de Oracle, ejecuta el instalador y sigue las instrucciones del asistente de instalación. En el momento de escribir este artículo, es Java 21.

A continuación, necesitará una herramienta para gestionar las dependencias y compilar su aplicación Kotlin. Tanto Gradle como Maven son excelentes opciones, por lo que puede elegir libremente su herramienta de compilación Java favorita. Dado que Gradle es compatible con Kotlin como lenguaje DSL (lenguaje específico de dominio), nos decantaremos por Gradle. Tenga en cuenta que puede seguir fácilmente el tutorial incluso si es usuario de Maven.

Descarga Maven o Gradle e instálalo. Gradle es especialmente sensible a la versión de Java, así que asegúrate de descargar el paquete adecuado. La versión de Gradle compatible con Java 21 es la 8.5 o superior.

Por último, necesitarás un IDE de Kotlin. Visual Studio Code con la extensión Kotlin Language e IntelliJ IDEA Community Edition son dos excelentes opciones gratuitas.

¡Listo! ¡Ya tienes un entorno preparado para Kotlin!

Crear un proyecto Kotlin

Crea una carpeta para tu proyecto de Scraping web en Kotlin e introdúcela en la terminal:

mkdir KotlinWebScraper

cd KotlinWebScraper

Aquí hemos llamado al directorio KotlinWebScraper, pero puedes ponerle el nombre que quieras.

A continuación, ejecuta el siguiente comando en la carpeta del proyecto para crear una aplicación Gradle:

gradle init --type kotlin-application

Durante el procedimiento, se le harán algunas preguntas. Debe elegir «Kotlin» como DSL del script de compilación y darle a su aplicación un nombre de paquete adecuado, como com.kotlin.scraper. Para las demás preguntas, las respuestas predeterminadas deberían ser adecuadas.

Esto es lo que verá al final del proceso de inicialización:

Seleccionar DSL del script de compilación:

  1: Kotlin

  2: Groovy

Introducir selección (predeterminado: Kotlin) [1..2] 1

Nombre del proyecto (predeterminado: KotlinWebScraper):

Paquete fuente (predeterminado: kotlinwebscraper): com.kotlin.scraper

Introducir la versión de Java de destino (mín. 8) (predeterminado: 21):

¿Generar compilación utilizando nuevas API y comportamiento (algunas características pueden cambiar en la próxima versión menor)? (predeterminado: no) [sí, no]

> Tarea :init

Para obtener más información sobre Gradle, explore nuestras muestras en https://docs.gradle.org/8.5/samples/sample_building_kotlin_applications.html

CONSTRUCCIÓN EXITOSA en 2 m 10 s

2 tareas ejecutables: 2 ejecutadas

¡Fantástico! La carpeta KotlinWebScraper ahora contendrá un proyecto Gradle.

Abra la carpeta en su IDE de Kotlin, espere a que se completen las tareas en segundo plano necesarias y eche un vistazo al archivo principal App.kt dentro del paquete com.kotlin.scraper. Esto es lo que debería contener:

/*

 * Este archivo fuente Kotlin fue generado por la tarea «init» de Gradle.

 */

package com.kotlin.scraping.demo

class App {

    val greeting: String

        get() {

            return "Hello World!"

        }

}

fun main() {

    println(App().greeting)

}

Este es un script Kotlin sencillo que imprime «Hello World!» en la terminal.

Para comprobar que funciona, ejecute el script con el siguiente comando Gradle:

./gradlew run

Espera a que se compile y ejecute el proyecto, y verás lo siguiente:

> Tarea :app:run

¡Hola mundo!

CONSTRUCCIÓN EXITOSA en 3 s.

3 tareas procesables: 2 ejecutadas, 1 actualizada

Puede ignorar los mensajes de registro de Gradle. Céntrese en el mensaje «¡Hola mundo!», que es exactamente el resultado que esperaba del script. En otras palabras, su configuración de Kotlin funciona según lo previsto.

¡Es hora de realizar el Scraping web con Kotlin!

Crear un script de Scraping web con Kotlin

En esta sección paso a paso, verás cómo crear un Scraper web en Kotlin. En concreto, aprenderás a definir un script automatizado que extrae datos del sitio de rascado Quotes.

A alto nivel, el script de Scraping web de Kotlin que está a punto de codificar hará lo siguiente:

  1. Conectarse a la página de destino.
  2. Seleccionará los elementos HTML de las citas en la página.
  3. Extraerá los datos deseados de ellos.
  4. Repetirá esta operación para todas las citas de los sitios, visitando cada página de paginación.
  5. Exportará los datos recopilados en formato CSV.

Así es como se ve el sitio de destino:

Example from the Quotes to Scrape website

Siga los pasos que se indican a continuación y descubra cómo realizar el Scraping web en Kotlin.

Paso 1: Instalar la biblioteca de scraping

Lo primero que debe hacer es averiguar qué bibliotecas de Scraping web de Kotlin se adaptan mejor a sus objetivos. Para ello, debe inspeccionar el sitio de destino.

Visita el sitio sandbox Quotes To Scrape en tu navegador. Haz clic con el botón derecho en una sección en blanco y selecciona la opción «Inspeccionar» para abrir DevTools. Ve a la pestaña «Red», vuelve a cargar la página y explora la sección «Fetch/XHR».

Esto es lo que debería ver:

Network tab of the developer tools on Chrome

¡No hay solicitudes AJAX! En otras palabras, la página de destino no recupera datos dinámicamente a través de JavaScript. Esto significa que el servidor devuelve páginas a los clientes con todos los datos de interés incrustados en el código HTML.

Por lo tanto, una biblioteca de parseo HTML será suficiente. Puedes seguir utilizando una herramienta de automatización del navegador, pero cargar y renderizar la página en un navegador solo supondría una sobrecarga de rendimiento y no aportaría ningún beneficio real.

Por lo tanto, skrape{it} será una excelente opción para lograr el objetivo de Scraping web. Añádalo a las dependencias de su proyecto con esta línea en el objeto dependencies de su archivo build.gradle.kts:

implementation("it.skrape:skrapeit:1.2.2")

Por otro lado, si es usuario de Maven, añada estas líneas a la etiqueta <dependencies> de su pom.xml:

<dependency>

    <groupId>it.skrape</groupId>

    <artifactId>skrapeit</artifactId>

    <version>1.2.2</version>

</dependency>

Si utilizas IntelliJ IDEA, el IDE mostrará un botón para recargar las dependencias del proyecto e instalar la nueva biblioteca. Haz clic en él para instalar skrape{it}.

De forma equivalente, puede instalar manualmente la nueva dependencia con este comando Gradle:

./gradlew build --refresh-dependencies

El proceso de instalación puede tardar un poco, así que ten paciencia.

A continuación, prepárese para utilizar skrape{it} en su script App.kt añadiendo las siguientes importaciones:

import it.skrape.core.*

import it.skrape.fetcher.*

No olvide que kkrape{it} incluye muchos extractores de datos. Aquí los hemos importado todos para simplificar. Al mismo tiempo, solo necesitará HttpFetcher, un cliente HTTP clásico que envía una solicitud HTTP a la URL dada y devuelve una respuesta analizada.

¡Genial! ¡Ahora tienes todo lo necesario para realizar Scraping web con Kotlin!

Paso 2: Descarga la página de destino y realiza el parseo de su HTML

En App.kt, elimina la clase App y añade las siguientes líneas en la función main() para conectarte a la página de destino utilizando skrape{it}:

skrape(HttpFetcher) {

// realiza una solicitud HTTP GET a la URL especificada

   request {

url = "https://quotes.toscrape.com/"

   }

}

En segundo plano, skrape{it} utilizará la clase HttpFetcher mencionada anteriormente para realizar una solicitud HTTP GET sincrónica a la URL dada.

Si desea asegurarse de que el script funciona como se desea, añada la siguiente sección en la definición de skrape(HttpFetcher):

response {

   // obtener el código fuente HTML e imprimirlo

   htmlDocument {

       print(html)

   }

}

Esto le indica a skrape{it} qué hacer con la respuesta del servidor. En concreto, accede a la respuesta analizada y, a continuación, imprime el código HTML de la página.

Tu script de scraping App.kt Kotlin ahora debería contener:

package com.kotlin.scraper

import it.skrape.core.*

import it.skrape.fetcher.*

fun main() {

    skrape(HttpFetcher) {

// realiza una solicitud HTTP GET a la URL especificada

        request {

url = "https://quotes.toscrape.com/"

        }

response {

// obtener el código fuente HTML e imprimirlo

            htmlDocument {

print(html)

            }

        }

    }

}

Ejecute el script y se imprimirá:

<!doctype html>

<html lang="en"> 

 <head>

  <meta charset="UTF-8">

  <title>Citas para extraer</title>

  <link rel="stylesheet" href="/static/bootstrap.min.css">

  <link rel="stylesheet" href="/static/main.css">

 </head>

 <body>

 <!-- omitido por brevedad... -->

Ese es exactamente el código HTML de la página de destino. ¡Bien hecho!

Paso 3: Inspeccionar el contenido de la página

El siguiente paso sería definir la lógica de extracción. Pero, ¿cómo puedes hacerlo sin saber cómo seleccionar los elementos de la página? Por eso es importante dar un paso más e inspeccionar la estructura de la página de destino.

Vuelve a abrir Quotes To Scrape en tu navegador. Haz clic con el botón derecho del ratón en un elemento de cita y selecciona «Inspeccionar» para abrir DevTools como se muestra a continuación:

Inspecting the element of a specific quote

Aquí puede observar que cada tarjeta de cita es un elemento HTML .quote que envuelve:

  1. Un elemento .text con el texto de la cita.
  2. Un elemento .author con el nombre del autor.
  3. Varios elementos .tag, cada uno de los cuales muestra una sola etiqueta.

Ten en cuenta que no todas las citas tienen la sección de etiquetas:

Example of a specific quote by Ayn Rand

Los selectores CSS anteriores le ayudarán a seleccionar los elementos DOM deseados de la página para extraer datos de ellos. También necesitará una clase donde almacenar estos datos. Por lo tanto, añada la siguiente definición de clase Quote en la parte superior de su script Kotlin de Scraping web:

class Quote(var text: String, var author: String, tags: List<String>?) {

    var tags: MutableList<String> = ArrayList()

    init {

        if (tags != null) {

            this.tags.addAll(tags)

        }

    }

}

Dado que la página contiene varias citas, instancie una lista de objetos Quote en main():

val quotes: MutableList<Quote> = ArrayList()

Al final del script, quotes contendrá todas las citas recopiladas del sitio.

¡Utilice lo que ha comprendido y definido aquí para implementar la lógica de scraping en el siguiente paso!

Paso 4: Implementa la lógica de scraping

skrape{it} tiene una forma peculiar de seleccionar nodos HTML en una página. Para aplicar un selector CSS en la página, debes definir una sección dentro de htmlDocument con el mismo nombre que el selector CSS:

skrape(HttpFetcher) {

    // sección de solicitud...

    response {

        htmlDocument {

            // seleccionar todos los elementos HTML «.quote» de la página

            «.quote» {

                // lógica de scraping...

            }

        }

    }

}

Dentro de la sección «.quote», puede definir una sección findAll. Esta contendrá la lógica que se aplicará a cada nodo HTML de cita seleccionado con el selector CSS especificado. En cambio, findFirst solo le proporcionará el primer elemento seleccionado.

Entre bastidores, todas estas secciones no son más que funciones lambda de Kotlin. Por eso, puede acceder al elemento DOM único con él en una sección forEach dentro de findAll. Si no está familiarizado con ello, es el nombre implícito de un parámetro único en una lambda.

Sigue una lógica similar, pero basada en métodos y atributos. A continuación, puede implementar la lógica de scraping para extraer los datos deseados de cada cita, instanciar un objeto Quote y añadirlo a la lista de citas de la siguiente manera:

".quote" {

findAll {

forEach {

// lógica de scraping en un único elemento de cita

            val text = it.findFirst(".text").text

            val author = it.findFirst(".author").text

            val tags = try {

                it.findAll(".tag").map { tag -> tag.text }

            } catch(e: ElementNotFoundException) {

                null

            }

// crear un objeto Quote y añadirlo a la lista

            val quote = Quote(

                text = text,

                author = author,

                tags = tags

            )

            quotes.add(quote)

        }

    }

}

Gracias al atributo text, puedes recuperar el texto interno de un elemento HTML. Dado que no todos los elementos HTML de cita contienen etiquetas, debes gestionar la excepción ElementNotFoundException. Esta excepción la lanza findAll cuando el selector CSS dado no coincide con ningún nodo de la página.

Importa ElementNotFoundException con:

import it.skrape.selects.ElementNotFoundException

Reúna todos los fragmentos y registre los datos contenidos en la matriz de citas:

package com.kotlin.scraper

import it.skrape.core.*

import it.skrape.fetcher.*

import it.skrape.selects.ElementNotFoundException

// define una clase para representar los datos extraídos en Kotlin

class Quote(var text: String, var author: String, tags: List<String>?) {

    var tags: MutableList<String> = ArrayList()

    init {

        if (tags != null) {

            this.tags.addAll(tags)

        }

    }

}

fun main() {

    // dónde almacenar los datos extraídos

    val quotes: MutableList<Quote> = ArrayList()

    skrape(HttpFetcher) {

// realizar una solicitud HTTP GET a la URL especificada

        request {

url = "https://quotes.toscrape.com/"

        }

response {

htmlDocument {

// seleccionar todos los elementos HTML «.quote» de la página

                «.quote» {

findAll {

forEach {

// lógica de recopilación en un único elemento de cita

                            val text = it.findFirst(«.text»).text

                            val author = it.findFirst(".author").text

                            val tags = try {

                                it.findAll(".tag").map { tag -> tag.text }

                            } catch(e: ElementNotFoundException) {

                                null

                            }

// crear un objeto Quote y añadirlo a la lista

                            val quote = Quote(

                                text = text,

                                author = author,

                                tags = tags

                            )

                            quotes.add(quote)

                        }

                    }

                }

            }

        }

    }

// registra los datos recopilados

    for (quote in quotes) {

        println("Texto: ${quote.text}")

        println("Autor: ${quote.author}")

        println("Etiquetas: ${quote.tags.joinToString("; ")}")

        println()

    }

}

Observe el uso de joingToString() para fusionar la lista de etiquetas en una cadena separada por comas.

Si ejecuta el script, obtendrá lo siguiente:

Texto: «El mundo tal y como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestra forma de pensar».

Autor: Albert Einstein.

Etiquetas: cambio; pensamientos profundos; pensamiento; mundo.

# omitido por brevedad...

Texto: «Un día sin sol es como, ya sabes, la noche».

Autor: Steve Martin.

Etiquetas: humor; obvio; símil.

¡Vaya! ¡Acabas de aprender a realizar Scraping web con Kotlin!

Paso 5: Añadir la lógica de rastreo

Acabas de extraer datos de una sola página, pero la lista de citas se extiende a lo largo de varias páginas. Si te desplazas hacia abajo hasta el final de la página, verás un botón «Siguiente →» con un enlace a la página siguiente:

"Next" text inside an <a href> tag

Esto es así en todas las páginas excepto en la última:

The inspection of the last page code

Para realizar el rastreo web en Kotlin y extraer cada cita del sitio, debes hacer lo siguiente:

  1. Extraer todas las citas de la página actual.
  2. Seleccionar el elemento «Siguiente →», si está presente, y extraer de él la URL de la página siguiente.
  3. Repetir el primer paso en la nueva página.

Implementar el algoritmo anterior de la siguiente manera:

En lugar de extraer una sola página y luego detenerse, el script ahora se basa en un bucle while. Este continúa iterando hasta que no hay más páginas que extraer. Eso ocurre cuando el selector CSS .next a genera una excepción ElementNotFoundException, lo que significa que el botón «Siguiente →» no está en la página y, por lo tanto, se encuentra en la última página de paginación del sitio.

Ten en cuenta que la sección htmlDocument puede contener varias secciones de selectores CSS. Cada una se ejecutará en el orden especificado. Si vuelves a ejecutar el script Kotlin de Scraping web, las citas almacenarán ahora las 100 citas del sitio.

¡Genial! La lógica de rastreo y Scraping web de Kotlin está lista. Solo queda eliminar el código de registro con la lógica de exportación de datos.

Paso 7: Exportar los datos extraídos a CSV

Los datos recopilados se almacenan actualmente en una lista de objetos Quote. Imprimirlos en la terminal es útil, pero exportarlos a CSV es la mejor manera de sacarles el máximo partido. Esto permitirá a otros miembros de su equipo filtrar, leer y analizar esos datos.

Kotlin te proporciona todo lo que necesitas para crear un archivo CSV y rellenarlo, pero el uso de una biblioteca lo hace todo más fácil. Una biblioteca nativa de Kotlin muy popular para leer y escribir archivos CSV es kotlin-csv.

Añádala a las dependencias de su proyecto en build.gradle.kts:

implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")

O si utilizas Maven:

<dependency>

    <groupId>com.github.doyaaaaaken</groupId>

    <artifactId>kotlin-csv-jvm</artifactId>

    <version>1.9.3</version>

</dependency>

Instala la biblioteca e impórtala en tu archivo App.kt:

import com.github.doyaaaaaken.kotlincsv.dsl.*

Ahora puedes exportar citas a un archivo CSV con solo unas pocas líneas de código:

val header = listOf("quote", "author", "tags")

val csvContent: List<List<String>> = quotes.map { quote ->

listOf(

        quote.text,

        quote.author,

        quote.tags.joinToString("; ")

        )

}

csvWriter().open("quotes.csv") {

writeRow(header)

    writeRows(csvContent)

}

Ten en cuenta que List<String> es la forma en que se representa un registro CSV en kotlin-csv. Primero, define un registro para la fila del encabezado. A continuación, convierte las citas a los datos deseados. Después, inicializa un escritor CSV, crea un archivo quotes.csv y rellénalo con writeRow() y writeRows().

¡Ya está! Solo queda echar un vistazo al código final de su script de Scraping web en Kotlin.

Paso 8: Ponlo todo junto

Este es el código final de su Scraper Kotlin:

package com.kotlin.scraper

import it.skrape.core.*

import it.skrape.fetcher.*

import it.skrape.selects.ElementNotFoundException

import com.github.doyaaaaaken.kotlincsv.dsl.*

// define una clase para representar los datos extraídos en Kotlin

class Quote(var text: String, var author: String, tags: List<String>?) {

    var tags: MutableList<String> = ArrayList()

    init {

        if (tags != null) {

            this.tags.addAll(tags)

        }

    }

}

fun main() {

    // dónde almacenar los datos extraídos

    val quotes: MutableList<Quote> = ArrayList()

    // la URL de la siguiente página a visitar

    var nextUrl: String? = "https://quotes.toscrape.com/"

    // hasta que haya una página que visitar

    while (nextUrl != null) {

        skrape(HttpFetcher) {

            // realizar una solicitud HTTP GET a la URL especificada

            request {

                url = nextUrl!!

            }

            response {

                htmlDocument {

                    // seleccionar todos los elementos HTML «.quote» de la página

                    «.quote» {

                        findAll {

                            forEach {

                                // lógica de scraping en un único elemento de cita

                                val text = it.findFirst(«.text»).text

                                val author = it.findFirst(".author").text

                                val tags = try {

                                    it.findAll(".tag").map { tag -> tag.text }

                                } catch (e: ElementNotFoundException) {

                                    null

                                }

                                // crear un objeto Quote y añadirlo a la lista

                                val quote = Quote(

                                    text = text,

                                    author = author,

                                    tags = tags

                                )

                                quotes.add(quote)

                            }

                        }

                    }

                    // lógica de rastreo

                    try {

                        ".next a" {

                            findFirst {

                                nextUrl = "https://quotes.toscrape.com" + attribute("href")

                            }

                        }

                    } catch (e: ElementNotFoundException) {

                        nextUrl = null

                    }

                }

            }

        }

    }

    // crear un archivo «quotes.csv» y rellenarlo

    // con los datos extraídos

    val header = listOf("quote", "author", "tags")

    val csvContent: List<List<String>> = quotes.map { quote ->

        listOf(

            quote.text,

            quote.author,

            quote.tags.joinToString("; ")

            )

    }

    csvWriter().open("quotes.csv") {

        writeRow(header)

        writeRows(csvContent)

    }

}

¿Puedes creerlo? Gracias a skrape{it}, puedes recuperar datos de todo un sitio web con menos de 100 líneas de código.

Ejecuta tu script Kotlin de Scraping web con:

./gradlew run

Ten paciencia mientras el Scraper revisa cada página del sitio de destino. Cuando haya terminado, aparecerá un archivo quotes.csv en el directorio raíz de tu proyecto. Ábrelo y deberías ver los siguientes datos:

list of scraped quotes

¡Et voilà! Empezaste con datos no estructurados en páginas online y ahora los tienes en un archivo CSV fácil de explorar.

Evita las prohibiciones de IP en Kotlin con un Proxy

Al realizar Scraping web con Kotlin, uno de los mayores retos es que las tecnologías antibots te bloqueen. Estos sistemas pueden detectar la naturaleza automatizada de tu script y bloquear tu IP. De esta forma, detienen tu operación de scraping.

¿Cómo evitarlo? ¡Con un Proxy web!

Sigue los pasos que se indican a continuación y aprende a integrar un Proxy de Bright Data en Kotlin.

Configurar un Proxy en Bright Data

Bright Data es el mejor servidor proxy del mercado, que supervisa miles de servidores proxy en todo el mundo. Cuando se trata de la rotación de IP, el mejor tipo de proxy es el Proxy residencial.

Para empezar, si ya tienes una cuenta, inicia sesión en Bright Data. Si no es así, crea una cuenta gratuita. Obtendrás acceso al siguiente panel de control de usuario:

Bright Data's control panel main page

Haz clic en el botón «Ver productos Proxy» como se muestra a continuación:

Clicking on view proxy products

Se le redirigirá a la siguiente página «Proxies e infraestructura de scraping»:

The proxies and scraping infrastructure services list on Bright Data's control panel

Desplácese hacia abajo, busque la tarjeta «Proxies residenciales» y haga clic en el botón «Empezar»:

Getting started with the residential proxies network

Llegará al panel de configuración del Proxy residencial. Siga el asistente guiado y configure el servicio de Proxy según sus necesidades. Si tiene alguna duda sobre cómo configurar el Proxy, no dude en ponerse en contacto con el servicio de asistencia 24/7.

Configuring the residential proxy settings

Vaya a la pestaña «Parámetros de acceso» y recupere el host, el puerto, el nombre de usuario y la contraseña de su Proxy de la siguiente manera:

Copying the access parameters for the residential proxies

Ten en cuenta que el campo «Host» ya incluye el puerto.

Eso es todo lo que necesita para crear la URL del Proxy y utilizarla en skrape{it}. Reúna toda la información y cree una URL con la siguiente sintaxis:

<Nombre de usuario>:<Contraseña>@<Host>

Por ejemplo, en este caso sería:

brd-customer-hl_4hgu8dwd-zona-residential:[email protected]:XXXXX

Active «Proxy activo», siga las últimas instrucciones y ¡ya está listo para empezar!

Activating the proxy once all configurations are done

Integra el Proxy en Kotlin

El fragmento de código para la integración de Bright Data en skrape{it} tendrá el siguiente aspecto:

skrape(HttpFetcher) {

    request {

url = "https://quotes.toscrape.com/"

        proxy = proxyBuilder {

type = Proxy.Type.HTTP

            host = "brd.superproxy.io"

            port = XXXXX

        }

        authentication = basic {

            username = "brd-customer-hl_4hgu8dwd-zona-residential"

            password = "ZZZZZZZZZZ"

        }

    }

    // ...

}

Como puede ver, todo se reduce al uso de las opciones de Proxy y solicitud de autenticación. A partir de ahora, skrape{it} realizará la solicitud a la URL especificada a través del Proxy de Bright Data. ¡Adiós a las prohibiciones de IP!

Mantenga su operación de Scraping web con Kotlin ética y respetuosa

El scraping web es una forma eficaz de recopilar datos útiles para diversos casos de uso. Ten en cuenta que el objetivo final es recuperar esos datos, no dañar el sitio de destino. Por lo tanto, debes abordar esta tarea con las precauciones adecuadas.

Sigue los consejos que se indican a continuación para realizar Scraping web con Kotlin de forma responsable:

  • Céntrate solo en la información disponible públicamente: concéntrate en recuperar datos que sean de acceso público en el sitio. Evita las páginas protegidas por credenciales de inicio de sesión u otras formas de autorización. El scraping de datos privados o confidenciales sin el permiso adecuado es poco ético y puede acarrear consecuencias legales.
  • Respete el archivo robots.txt: cada sitio tiene un archivo robots.txt que define las reglas sobre cómo los rastreadores automatizados deben acceder a sus páginas. Para mantener prácticas de scraping éticas, debe cumplir con esas directrices. Obtenga más información en nuestra guía robots.txt para el Scraping web.
  • Limite la frecuencia de sus solicitudes: realizar demasiadas solicitudes en poco tiempo provocará una sobrecarga del servidor, lo que afectará al rendimiento del sitio para todos los usuarios. Esto también podría desencadenar medidas de limitación de velocidad y bloquearle el acceso. Por este motivo, evite saturar el servidor de destino añadiendo retrasos aleatorios a sus solicitudes.
  • Compruebe y cumpla con los términos de servicio del sitio: antes de extraer datos de un sitio, revise sus términos de servicio. Estos pueden contener información sobre derechos de autor, derechos de propiedad intelectual y directrices sobre cómo y cuándo utilizar sus datos.
  • Confíe en herramientas de scraping fiables y actualizadas: seleccione proveedores de confianza y opte por herramientas y bibliotecas que estén bien mantenidas y se actualicen periódicamente. Solo así podrá asegurarse de que se ajustan a los últimos principios éticos de scraping de Kotlin. Si tiene alguna duda, consulte nuestro artículo sobre cómo elegir el mejor servicio de Scraping web.

Conclusión

En esta guía, ha visto por qué Kotlin es un lenguaje ideal para el Scraping web, especialmente en comparación con Java. También ha visto una lista de las mejores bibliotecas de Scraping de Kotlin. A continuación, ha aprendido a utilizar skrape{it} para crear un Scraper que extrae datos de varias páginas de un sitio web real. Como ha podido comprobar, el Scraping web con Kotlin es sencillo y solo requiere unas pocas líneas de código.

El principal reto para tu operación de scraping son las soluciones anti-bot. Los sitios web adoptan estos sistemas para proteger sus datos de los scripts automatizados, bloqueándolos antes de que puedan acceder a sus páginas. Eludirlos no es fácil y requiere herramientas avanzadas. Afortunadamente, ¡Bright Data te tiene cubierto!

Estos son algunos de los productos de scraping que ofrece Bright Data:

  • API de Scraper web: API fáciles de usar para el acceso programático a datos web estructurados de docenas de dominios populares.
  • Navegador de scraping: un navegador controlable basado en la nube que ofrece capacidades de renderización de JavaScript mientras gestiona las huellas digitales del navegador, los CAPTCHA, los reintentos automatizados y mucho más por ti. Se integra con las bibliotecas de navegadores de automatización más populares, como Playwright y Puppeteer.
  • Web Unlocker: una API de desbloqueo que puede devolver sin problemas el HTML sin procesar de cualquier página, eludiendo cualquier medida antirraspado.

¿No quiere ocuparse del Scraping web, pero sigue interesado en los datos en línea? ¡Explore los Conjuntos de datos listos para usar de Bright Data!