Acercarse:
- Obtenga toda la página HTML y guárdela como una string usando el paquete de solicitud.
- Cargue HTML en Cheerio y busque los selectores de CSS para extraer los detalles de los repositorios.
Uso del paquete de
solicitud: paquete de solicitud : la solicitud está diseñada para ser la forma más sencilla posible de realizar llamadas http. Es compatible con HTTPS y sigue los redireccionamientos de forma predeterminada.
Instalación del paquete de solicitud:
$ npm install request
Nota: Ejecute este comando en la carpeta actual, donde se encuentra el archivo ‘app.js’.
Sintaxis para la solicitud:
request(url, (error, response, body) => { if(!error && response.statusCode == 200) { statements to be executed. } }
Parámetros:
- url: punto final de la API al que se realiza la solicitud.
- respuesta: los códigos de estado de respuesta HTTP indican si una solicitud HTTP específica se ha completado con éxito.
- cuerpo: datos de respuesta.
Uso del paquete
Cheerio: Paquete Cheerio: Implementación rápida, flexible y eficiente del núcleo jQuery diseñado específicamente para el servidor.
Instalación del paquete Cheerio:
$ npm install cheerio
Nota: Ejecute este comando en la carpeta actual, donde se encuentra el archivo ‘app.js’.
Sintaxis de cheerio:
const cheerio = require('cheerio') const $ = cheerio.load(HTMLString) $(CSS Selector).text('Hello there!') $.html()
// Import request package const request = require('request'); // Import cheerio package const cheerio = require('cheerio'); // Github Trending Page URL const url = 'https://github.com/trending'; // Get request to the URL request.get(url, (error, response, body) => { // If the response code is 200 and // there is no error if (!error && response.statusCode == 200) { // Load HTML string into cheerio const $ = cheerio.load(body); // Below are the CSS selectors to // fetch the data required let temp = $('.Box-row') let repos = $('.h3.lh-condensed a'); let data = []; for (let i = 0; i < repos.length; i++) { let reponame = $(temp[i]) .find('.h3.lh-condensed a') .text().replace( /[\n\r]+|[\s]{2, }/g, ' ').trim(); let repolanguage = $(temp[i]) .find( '.f6.text-gray.mt-2 span span[itemprop="programmingLanguage"]') .text() .replace(/[\n\r]+|[\s]{2, }/g, ' ').trim(); let repostars = $(temp[i]) .find( '.f6.text-gray.mt-2 .muted-link.d-inline-block.mr-3') .text() .replace(/[\n\r]+|[\s]{2, }/g, ' ').trim(); // Push the fetched data into an object data.push({ 'Repository': reponame, 'Language': repolanguage, 'Stars/Forks': repostars }) } // Display the Object created using console.table console.table(data) } else { console.log("Unable to fetch data from github"); } });
Producción: