En general, el web scraping consiste en extraer datos de un sitio web a partir del HTML que se produce cuando se carga una página web.
Metascraping es extraer los metadatos de la página web a partir de las metaetiquetas de una página web.
Los metadatos de una página web son información sobre la página pero no sobre su contenido. Por ejemplo, los metadatos pueden incluir el nombre del autor, el título y la descripción de la página web.
Ayudan a los usuarios y a los motores de búsqueda a entender de qué trata la página. El raspado de metadatos permite a un usuario recopilar rápidamente información sobre páginas web en menos tiempo.
Se pueden utilizar varios enfoques para raspar páginas web en busca de sus metadatos, incluido el raspado manual, el uso de una biblioteca o el uso de una API como la API de Geekflare Metascraping.
Muchas maneras de matar a un gato
Para raspar manualmente, se puede abrir una página web utilizando Chrome DevTools y extraer los metadatos de la pestaña Elementos. Sin embargo, esta tarea manual, repetitiva y tediosa cuando se trata de varias páginas. Podemos automatizar la tarea utilizando varios enfoques:
El primer enfoque consiste en escribir el código desde cero. En este enfoque, usted realiza una petición HTTP a la página web cuyos metadatos desea extraer. Después, puede analizar el HTML de respuesta extrayendo los datos de las metaetiquetas mediante expresiones regulares o coincidencia de patrones. Sin embargo, este enfoque supone reinventar la rueda, ya que perderá tiempo reescribiendo el código existente.
El segundo enfoque consiste en utilizar una biblioteca en el lenguaje de programación que prefiera. Esto le permite abstraerse de los detalles de implementación y mantiene las cosas sencillas. Sin embargo, si el lenguaje de programación de su elección no dispone de una biblioteca adecuada o el tiempo de ejecución concreto que está utilizando no es compatible con la biblioteca, entonces no podrá utilizarla.
El tercer enfoque consiste en utilizar una API como la API Geekflare Metascraping. Este enfoque es ideal porque le proporciona una interfaz uniforme independientemente de su lenguaje de programación. Se puede utilizar en cualquier lenguaje siempre que admita realizar peticiones HTTP.
Este artículo demostrará cómo utilizar la API de Geekflare Metascraping con cURL, PHP y JavaScript(NodeJS).
¿Por qué debería utilizar la API de Geekflare Metascraping?
Debido a las desventajas de otros enfoques, las ventajas de utilizar la API de Geekflare son:
- Es agnóstica al lenguaje y al entorno de ejecución.
- Evita reinventar la rueda y pasa menos tiempo escribiendo código.
- Puede raspar múltiples sitios web de forma eficiente (en cuestión de segundos).
- Es increíblemente fácil de usar.
- Puede utilizarlo de forma gratuita.
Cómo empezar a utilizar la API de Geekflare
Para utilizar la API de Geekflare, necesitará una clave de API. Para obtener una, vaya a Siterelic y cree una cuenta gratuita. Después de crear su cuenta, acceda al panel de control. Desde el salpicadero, debería poder ver su clave API.
Descripción general de la API de Geekflare Metascraping
El punto final de la API se encuentra en https://api.geekflare.com/es/metascraping.
Cuando realice una solicitud, deberá proporcionar su clave API como cabecera de solicitud con el nombre x-api-key
y el valor siendo su clave API.
También deberá introducir parámetros adicionales en el cuerpo de la solicitud. Estos son la url
, el dispositivo
y proxyCountry
.
- URL especifica la URL de la página web cuyos metadatos desea raspar.
- Dispositivo especifica el dispositivo utilizado para visitar el sitio cuando se raspan los metadatos. Las opciones para los dispositivos son móvil o escritorio.
- Paísproxy especifica el país desde el que se debe realizar la solicitud antes de raspar los datos. Sin embargo, el país proxy es una función premium y sólo puede utilizarse en los planes de pago de Geekflare.
Dado que los parámetros se pasarán como parte del cuerpo, la solicitud tiene que ser una solicitud POST
, ya que las solicitudes GET
no pueden contener metadatos.
Uso de la API de Geekflare Metascraping en cURL
En la primera demostración, utilizaremos la utilidad cURL desde la línea de comandos para solicitar la API de Metascraping. Para utilizar cURL, primero tendrá que instalarlo.
Voy a utilizar un terminal Bash. Este debería ser el terminal por defecto en macOS y Linux. Para Windows, tendrá que instalar Git Bash.
Una vez instalado cURL, podemos utilizar el comando cURL para realizar la solicitud. Pasaremos opciones al comando para especificar los parámetros de la solicitud: el método de solicitud, el punto final, el cuerpo de la solicitud y las cabeceras de la solicitud.
curl -X POST \
https://api.geekflare.com/es/metascraping \
-d '{ "url": "https://tesla.com" }' \
-H 'Content-Type: application/json' \
-H 'x-api-key: <API_KEY>'
NB: La barra invertida después de las tres primeras líneas le permite dividir la entrada del comando en varias líneas.
Este comando especificó el método HTTP como POST y el endpoint como el endpoint de meta-scraping de la API de Geekflare.
También enviamos el cuerpo de la solicitud como un objeto JSON con una propiedad URL especificada como https://tesla.com. Por último, añadimos las cabeceras que especifican el tipo de contenido del cuerpo como JSON y proporcionamos la clave API utilizando la cabecera x-api-key
.
Cuando ejecutamos este comando, obtenemos la siguiente salida:
{"timestamp":1669328564856,"apiStatus":"success","apiCode":200,"meta":{"url":"https://tesla.com", "device": "desktop", "test":{"id": "1fh2c30i05vmvxb99pdh6t6hze2x72jv"}}, "data":{"author":null, "date":null, "description": "Tesla está acelerando la transición del mundo hacia la energía sostenible con coches eléctricos, energía solar y soluciones integradas de energía renovable para hogares y empresas.", "image": "https://tesla-cdn.thron.com/delivery/public/image/tesla/6139697c-9d6a-4579-837e-a9fc5df4a773/bvlatuR/std/1200x628/Model-3-Homepage-Social-LHD", "logo": "https://tesla.com/themes/custom/tesla_frontend/assets/favicons/favicon-196x196.png", "publisher": "Tesla", "title": "Coches eléctricos, energía solar y energía limpia | Tesla", "url": "https://www.tesla.com/", "lang": "en"}}
Esta es la salida correcta.
Uso de la API de Geekflare Metascraping con JavaScript
Para este proyecto, crearemos un script NodeJS para obtener datos de la API. Esto significa que necesitará NodeJS instalado. También necesitará NPM o cualquier otro gestor de paquetes para Node para gestionar las dependencias del proyecto. También voy a utilizar el terminal Bash para ejecutar comandos.
Para utilizar la API en JavaScript, primero creamos una carpeta de proyecto vacía y la abrimos en un terminal.
mkdir metascraping-js && cd metascraping-js
Después de esto, podemos crear el archivo donde vamos a escribir el script:
touch index.js
Luego podemos instanciar el proyecto como un proyecto Node:
npm init -y
Para utilizar la sintaxis ESModule dentro de nuestro archivo, añada la línea"type
«:
"module
» a la raíz del archivo package.json de forma que tenga este aspecto
{
"nombre": "metascraping",
"version": "1.0.0",
"descripción": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no se ha especificado la prueba\" && exit 1"
},
"palabras clave": [],
"autor": "",
"licencia": "ISC",
}
A continuación, instalaremos el paquete node-fetch
. Este paquete proporciona una función fetch
en NodeJS que es similar a la función fetch
del navegador. Esto hace que sea más fácil hacer peticiones HTTP en NodeJS que utilizar el módulo http
incorporado para hacer peticiones.
npm install node-fetch
Cuando el paquete esté correctamente instalado, podemos empezar a editar el script. Abra el archivo index.js
utilizando un editor de texto de su elección. En mi caso, voy a utilizar el editor de texto nano
basado en terminal.
nano index.js
Editando el archivo index .
js, empezamos importando la función fetch
, que es la exportación por defecto del módulo node-fetch
.
import fetch from 'node-fetch'
A continuación, vamos a definir el cuerpo de nuestra solicitud. Este será una cadena JSON con una propiedad url
. El valor de la propiedad url
es la página web cuyos metadatos queremos obtener.
const body = JSON.stringify({ url: 'https://spacex.com' });
A continuación, podemos definir las opciones de solicitud que pasaremos a la función fetch
cuando finalmente la llamemos.
const opciones = {
método: 'POST',
cabeceras: {
'Content-Type': 'application/json',
'x-api-key': <SU CLAVE API aquí>
},
body: cuerpo
}
Hemos definido nuestro método de solicitud como una solicitud POST
. También hemos definido dos cabeceras. Una especifica que el cuerpo contiene datos JSON, y la otra proporciona la clave de la API.
Puede sustituir
Por último, realizamos la llamada a fetch
fetch('https://api.geekflare.com/es/metascraping', opciones)
.then(respuesta => respuesta.json())
.then(json => console.log(json))
Aquí hemos llamado a la función fetch, pasándole el punto final de la API y las opciones que definimos anteriormente. Como fetch
devuelve una promesa, adjuntamos una devolución de llamada que analiza las respuestas JSON utilizando then
.
La devolución de llamada devuelve otra promesa, y cuando se resuelve, vamos a console.log()
el objeto devuelto.
Así que, en última instancia, nuestro archivo debería tener este aspecto
import fetch from 'node-fetch'
const body = JSON.stringify({ url: 'https://spacex.com' });
const options = {
método: 'POST',
cabeceras: {
'Content-Type': 'application/json',
'x-api-key': <SU CLAVE API aquí>
},
body: cuerpo
}
fetch('https://api.geekflare.com/es/metascraping', opciones)
.then(respuesta => respuesta.json())
.then(json => console.log(json))
Para ejecutar el script, guarde las modificaciones y cierre nano o el editor de texto que esté utilizando, a continuación introduzca el siguiente comando:
node .
Debería obtener los siguientes metadatos
{
marca de tiempo: 1669305079698,
apiStatus: 'éxito',
apiCode: 200,
meta: {
url: 'https://spacex.com',
dispositivo: 'escritorio',
prueba: { id: '8m3srgqw06q2k8li5p6x70s8165d6e2f' }
},
datos: {
autor: null
fecha: null,
descripción: "SpaceX diseña, fabrica y lanza cohetes y naves espaciales avanzadas",
imagen: 'https://www.spacex.com/static/images/share.jpg',
logotipo: 'https://spacex.com/static/images/favicon.ico',
editor: 'SpaceX',
título: 'SpaceX',
url: 'http://www.spacex.com/',
lang: 'en'
}
}
Uso de la API de Geekflare con PHP
Para utilizar la API de Geekflare Metascraping, primero asegúrese de que tiene PHP y Composer instalados en su máquina local.
Para empezar, cree y abra la carpeta del proyecto.
mkdir metascraping-php && cd metascraping-php
A continuación, instale GuzzleHTTP. Guzzle es uno de los muchos clientes PHP que puede utilizar con la API de Geekflare.
composer require guzzlehttp/guzzle
Una vez instalado Guzzle, podemos crear un script con
touch script.php
Entonces podemos empezar a escribir el código. Usando un editor de texto de su elección, abra el archivo script. php
. En mi caso, voy a utilizar nano
que es un editor de texto basado en terminal.
nano script.php
Dentro del script, insertamos PHP boiler-plate
<?php
// Todo el código va aquí
?>
Ahora para cargar las extensiones, importe las clases Request y Client de Guzzle. Este código debe ser escrito entre el <
?php y ? >
que escribimos antes.
require_once('vendor/autoload.php');
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
A continuación, podemos crear un cliente instanciando la clase GuzzleHttp\Client
$cliente = nuevo GuzzleHttp\Cliente();
Después, podemos definir cabeceras para la petición. Para esta petición en particular, proporcionaremos dos cabeceras, una que especifica que el tipo de contenido del cuerpo es JSON y otra que contiene nuestra clave API.
$cabeceras = [
'x-api-key' => <SU CLAVE API AQUÍ>,
'Content-Type' => 'application/json'
];
Sustituya
A continuación, podemos definir el cuerpo. En nuestro caso, el cuerpo va a ser una cadena JSON con la propiedad url
establecida en "https://twitter.com"
$body = json_encode([
"url" => "https://twitter.com"
]);
Para crear una solicitud, instanciamos la clase request que importamos anteriormente, pasándole el método de solicitud, el punto final, las cabeceras y el cuerpo de la solicitud.
$request = new Request('POST', 'https://api.geekflare.com/es/metascraping', $headers, $body);
A continuación, utilizamos el cliente para enviar la solicitud.
$response = $client->sendAsync($request)->wait();
Después, podemos extraer el cuerpo de la petición e imprimirlo en la consola
echo $respuesta->getBody();
Si ha copiado el código correctamente, el archivo script.
php debería tener el siguiente aspecto
<?php
require_once('vendor/autoload.php');
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
$client = nuevo GuzzleHttp\Client();
$headers = [
'x-api-key' => <TU CLAVE API>,
'Content-Type' => 'application/json'
];
$body = json_encode([
"url" => "https://twitter.com"
]);
$request = new Request('POST', 'https://api.geekflare.com/es/metascraping', $headers, $body);
$response = $client->sendAsync($request)->wait();
echo $response->getBody();
?>
Guarde el script, ciérrelo y ejecútelo usando
php script.php
Debería obtener la siguiente salida:
{
"timestamp":1669322100912,
"apiStatus":éxito
"apiCode":200
"meta": {
"url": "https://twitter.com",
"dispositivo": "escritorio",
"prueba":{
"id": "wn1nj30r04bk0ijtpprwdqmtuirg9lze"
}
},
"datos":{
"autor":null
"fecha":null
"description": "Las últimas historias en Twitter - contadas por Tweets",
"imagen": "https://abs.twimg.com/a/1602199131/img/moments/moments-card.jpg",
"logotipo": "https://abs.twimg.com/responsive-web/client-web/icon-ios.b1fc7279.png",
"editor": "Twitter",
"title": "Explorar
"url": "https://twitter.com/explore",
"lang": "en"
}
}
Palabras finales
Esta guía ha repasado diferentes formas de consumir la API de Metascraping de Geekflare.
La API de Metascraping también le permite proporcionar más parámetros que sólo el de la URL. Uno de esos parámetros es el parámetro proxy, al que sólo se puede acceder con el plan premium de la API de Geekflare. En cualquier caso, la API de Geekflare sigue siendo lo suficientemente potente para muchos usos.
Consulte la documentación oficial de la API de Geekflare para obtener más información.