Cómo raspar el sitio web usando la API de raspado web kirukiru.es

El web scraping es un proceso para extraer información útil de la World Wide Web. Durante una búsqueda en Google, un rastreador web (bot), es decir, el rastreador, revisa casi todo el contenido de la web y selecciona lo que es relevante para usted.

Esta idea de que la información o el conocimiento debe ser accesible para todos condujo a la formación de la red mundial. Sin embargo, los datos que busca deben estar autorizados para uso público.

¿Cómo es útil el web scraping?

Vivimos en la era de los datos. Los datos sin procesar se pueden convertir en información útil que se puede usar para un propósito mayor con la ayuda del web scraping. Se puede utilizar para analizar y estudiar a los usuarios de un producto para mejorar el producto, en otras palabras, para crear un circuito de retroalimentación.

Las empresas de comercio electrónico pueden usarlo para estudiar las estrategias de precios de los competidores y, en consecuencia, elaborar las suyas propias. El raspado web también se puede utilizar para informar sobre el clima y las noticias.

Desafíos

#1. Restricción de IP

Varios sitios web limitan la cantidad de solicitudes que puede realizar para obtener los datos del sitio en un intervalo de tiempo determinado mediante la detección de su dirección IP o geolocalización. Lo hacen para evitar ataques maliciosos en su sitio web.

#2. captcha

Distinguir entre un ser humano real y un bot que intenta acceder al sitio web es lo que realmente hacen los captchas. Los sitios web lo utilizan para evitar el spam en el sitio web, así como para controlar la cantidad de raspadores en el sitio web.

#3. Representación del lado del cliente

Este es uno de los mayores obstáculos para los web scrapers. Los sitios web modernos utilizan marcos frontend que son capaces de crear aplicaciones de una sola página. La mayoría de las aplicaciones de una sola página no tienen contenido generado por el servidor. En su lugar, generan el contenido según las necesidades utilizando javascript del lado del cliente. Esto dificulta que los rastreadores sepan cuál es el contenido de una página web. Para obtener el contenido, debe generar algún javascript del lado del cliente.

La API de kirukiru.es

Una API de raspado web resuelve la mayoría de los desafíos que enfrenta al realizar el raspado web porque maneja todo por usted. Exploremos la API de kirukiru.es y veamos cómo puede usarla para el web scraping.

La API de kirukiru.es tiene un proceso simple de tres pasos para usted:

  • Proporcione una URL para raspar
  • Proporcionar algunas opciones de configuración
  • Obtener los datos

Puede raspar la página web por usted y luego devolver datos HTML sin procesar como una cadena o en un archivo HTML al que se puede acceder a través de un enlace, de la forma que le resulte más conveniente.

Uso de la API

En este tutorial, aprenderá a usar la API de kirukiru.es con NodeJS, un entorno de tiempo de ejecución de JavaScript. Instale NodeJS en su sistema si no lo ha hecho antes de continuar.

  • Ejecute el comando npm init -y en la terminal en la carpeta o directorio actual. Creará un archivo package.json para usted.
  • Dentro del archivo package.json, cambie el valor de la clave principal a index.mjs si es otra cosa por defecto. Alternativamente, también puede agregar un tipo de clave y establecer su valor igual al módulo.
{
  “type”: “module”
}
  • Agregue una dependencia llamada axios ejecutando el comando npm i axios en la terminal. Esta dependencia nos ayuda a realizar solicitudes de recuperación a puntos finales específicos.
  • Su paquete.json debería verse así:
{
  "name": "webscraping",
  "version": "1.0.0",
  "description": "",
  "main": "index.mjs",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "Murtuzaali Surti",
  "license": "ISC",
  "dependencies": {
    "axios": "^1.1.3"
  }
}
  • Importe axios dentro del archivo index.mjs así. Aquí, se usa la palabra clave de importación porque es un módulo ES. Si fuera un archivo commonJS, habría sido la palabra clave require.
import axios from ‘axios’
  • La URL base para todas nuestras solicitudes a la API kirukiru.es será la misma para cada punto final. Entonces, puedes almacenarlo dentro de una constante.
const baseUrl="https://api.kirukiru.es.com"
  • Especifique la URL de la que desea raspar y obtener los datos.
let toScrapeURL = "https://developer.mozilla.org/en-US/"
  • Cree una función asíncrona e inicialice axios dentro de ella.
async function getData() {
    const res = await axios({})
    return res
}
  • En las opciones de configuración de axios, debe especificar el método como publicación, la URL junto con el punto final, un encabezado conocido como x-api-key cuyo valor será la clave API proporcionada por kirukiru.es y, por último, un objeto de datos que se enviará a la API de kirukiru.es. Puede obtener su clave API yendo a dash.kirukiru.es.com.
const res = await axios({
    method: "post",
    url: `${baseUrl}/webscraping`,
    headers: {
        "x-api-key": "your api key"
    },
    data: {
        url: toScrapeURL,
        output: 'file',
        device: 'desktop',
        renderJS: true
    }
})
  • Como puede ver, el objeto de datos tiene las siguientes propiedades:
    • url: la URL de una página web que necesita ser raspada.
    • salida: el formato en el que se le presentan los datos, ya sea en línea como una cadena o en un archivo HTML. La cadena en línea es el valor predeterminado.
    • dispositivo: el tipo de dispositivo en el que desea que se abra la página web. Acepta tres valores, ‘escritorio’, ‘móvil’ y ‘tableta’, siendo ‘escritorio’ el valor predeterminado.
    • renderJS: un valor booleano para especificar si desea renderizar javascript o no. Esta opción es útil cuando se trata de renderizado del lado del cliente.
  • Llame a la función asíncrona y obtenga los datos. Puede utilizar una IIFE (expresión de función invocada inmediatamente).
(async () => {
    const data = await getData()
    console.log(data.data)
})()
  • La respuesta será algo como esto:
{
  timestamp: 1669358356779,
  apiStatus: 'success',
  apiCode: 200,
  meta: {
    url: 'https://murtuzaalisurti.github.io',
    device: 'desktop',
    output: 'file',
    blockAds: true,
    renderJS: true,
    test: { id: 'mvan3sa30ajz5i8lu553tcckchkmqzr6' }
  },
  data: 'https://api-assets.kirukiru.es.com/tests/web-scraping/pbn0v009vksiszv1cgz8o7tu.html'
}

Analizando HTML

Para analizar HTML, puede usar un paquete npm llamado node-html-parser y también extraer datos de HTML. Por ejemplo, si desea extraer el título de una página web, puede hacer lo siguiente:

import { parse } from ‘node-html-parser’
const html = parse(htmlData) // htmlData is the raw html string you get from the kirukiru.es API.

Alternativamente, si solo desea los metadatos de un sitio web, puede usar el punto final de la API de metadatos de kirukiru.es. Ni siquiera tiene que analizar HTML.

Beneficios de usar la API kirukiru.es

En las aplicaciones de una sola página, el contenido a menudo no se procesa en el servidor, sino que lo procesa el navegador mediante javascript. Por lo tanto, si raspa la URL original sin mostrar el javascript necesario para mostrar el contenido, no obtiene nada más que un elemento contenedor sin contenido. Dejame mostrarte un ejemplo.

Aquí hay un sitio web de demostración creado con react y vitejs. Raspe este sitio usando la API kirukiru.es con la opción renderJS establecida en falso. ¿Qué obtuviste?

<body>
    <div id="root"></div>
<body>

Solo hay un contenedor raíz sin contenido. Aquí es donde entra en acción la opción renderJS. Ahora intente raspar el mismo sitio con la opción renderJS establecida en verdadero. ¿Qué sacas?

<body>
    <div id="root">
        <div class="App">
            <div>
                <a href="https://vitejs.dev" target="_blank">
                    <img src="/vite.svg" class="logo" >
                </a>
                <a href="https://reactjs.org" target="_blank">
                    <img src="/assets/react.35ef61ed.svg" class="logo react" >
                </a>
            </div>
            <h1>Vite + React</h1>
            <div class="card">
                <button>count is 0</button>
                <p>Edit <code>src/App.jsx</code> and save to test HMR</p>
            </div>
            <p class="read-the-docs">Click on the Vite and React logos to learn more</p>
        </div>
    </div>
</body>

Otro beneficio de usar la API kirukiru.es es que le permite usar un proxy rotativo para que pueda asegurarse de que el sitio web no bloquee la IP. La API de kirukiru.es incluye la función de proxy en su plan premium.

Ultimas palabras

El uso de una API de raspado web le permite concentrarse solo en los datos raspados sin demasiados problemas técnicos. Aparte de eso, la API de kirukiru.es también proporciona funciones como verificación de enlaces rotos, meta raspado, estadísticas de carga del sitio web, captura de pantalla, estado del sitio y mucho más. Todo eso bajo una única API. Consulte la documentación oficial de la API de kirukiru.es para obtener más información.