Cómo raspar el sitio web usando Geekflare Web Scraping API
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 debería ser accesible para todos condujo a la formación de la World Wide Web. Sin embargo, los datos que usted busca deben estar permitidos 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 cumplir un propósito mayor con la ayuda de 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.
Desafios
#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 de interfaz 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 renderizado por el servidor.
En cambio, generan el contenido según sea necesario utilizando JavaScript del lado del cliente. Esto dificulta que los scrapers sepan cuál es el contenido de una página web. Para obtener el contenido, necesita renderizar JavaScript del lado del cliente.
La API de Geekflare
A API de raspado web resuelve la mayoría de los desafíos que enfrenta al realizar web scraping porque maneja todo por usted. Exploremos la API de Geekflare y veamos cómo puede usarla para el web scraping.
La API de Geekflare 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.
Usando la API
En este tutorial, aprenderá a usar la API de Geekflare usando NodeJS – un entorno de tiempo de ejecución de javascript. Instala NodeJS en su sistema si no lo ha hecho antes de continuar.
- Dentro de una nueva carpeta, cree un archivo llamado
index.mjs
. la razón detrásmjs
extensión es que queremos que este archivo se considere como un módulo ES en lugar de un archivo JS común. Comprobar el diferencia entre módulos ES y archivos JS comunes.
- Ejecuta el comando
npm init -y
en la terminal en la carpeta o directorio actual. Creará unpackage.json
archivo para usted.
- Dentro del
package.json
archivo, cambie elmain
valor clave paraindex.mjs
si es otra cosa por defecto. Alternativamente, también puede agregar una clavetype
y establecer su valor igual amodule
.
{
“type”: “module”
}
- Agregar una dependencia llamada
axios
mediante la ejecuciónnpm i axios
comando en la terminal. Esta dependencia nos ayuda a realizar solicitudes de recuperación a puntos finales específicos.
- El
package.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"
}
}
- Importa
axios
dentro deindex.mjs
archivo como este. Aquí elimport
Se usa la palabra clave porque es un módulo ES. Si fuera un archivo commonJS, habría sido elrequire
palabra clave.
import axios from ‘axios’
- La URL base para todas nuestras solicitudes a la API de Geekflare será la misma para cada punto final. Entonces, puedes almacenarlo dentro de una constante.
const baseUrl = 'https://api.geekflare.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 la
axios
opciones de configuración, debe especificar el método comopost
, la URL junto con el punto final, un encabezado conocido comox-api-key
cuyo valor será la clave API proporcionada por Geekflare y, por último, unadata
objeto que se enviará a la API de Geekflare. Puede obtener su clave API yendo a dash.geekflare.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 debe rasparse.
- 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.
- Si desea una lista completa de opciones de configuración, lea la documentación oficial de la API de Geekflare.
- 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.geekflare.com/tests/web-scraping/pbn0v009vksiszv1cgz8o7tu.html'
}
Analizando HTML
Para analizar HTML, puede usar un paquete npm llamado node-html-parser
y para extraer datos de HTML también. 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 Geekflare API.
Alternativamente, si solo desea los metadatos de un sitio web, puede usar Geekflare API de metadatos punto final Ni siquiera tiene que analizar HTML.
Beneficios de usar la API de Geekflare
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 construido usando reaccionar y vitejs. Extraiga este sitio usando la API de Geekflare 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" alt="Vite logo">
</a>
<a href="https://reactjs.org" target="_blank">
<img src="/assets/react.35ef61ed.svg" class="logo react" alt="React logo">
</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 de Geekflare es que le permite usar un proxy rotativo para que pueda asegurarse de que el sitio web no bloquee la IP. La API de Geekflare incluye la función de proxy en su plan de prima.
Palabras finales
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 Geekflare también proporciona funciones como la 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 sola API. Revisar la documentación oficial de la API de Geekflare para obtener más información.