Javier Lopez

J

Utilisation de Puppeteer pour lire les données de table

Exemple de base sur l'utilisation de Puppeteer pour lire le contenu d'un élément de table.

What is Puppeteer ?

Puppeteer est une bibliothèque de nœuds qui fournit une API de haut niveau pour contrôler Chrome ou Chromium via le protocole DevTools . Le marionnettiste court sans tête par défaut, mais peut être configuré pour exécuter Chrome ou Chromium complet (sans tête).

Pourquoi utiliser Puppeteer?

Imagerie qu’il n’y a pas d’API pour obtenir des données à partir d’un site public. En utilisant Puppeteer, vous pouvez rendre le contenu d’une page Web et en supprimer des données.

En outre, Puppeteer propose plusieurs fonctionnalités en plus des données, telles que la génération de captures d’écran et de PDF à partir de pages, l’automatisation de la soumission de formulaires, les tests d’interface utilisateur, la saisie au clavier, etc.

Un bon exemple de cela serait d’obtenir des données liées au COVID-19 à partir d’un site Web gouvernemental comme covid19honduras.org . Ils ne fournissent pas d’API pour récupérer les données.

Préparation

Dans cet exemple, nous allons utiliser NodeJS pour créer une application côté serveur à supprimer covid19honduras.org et obtenir spécifiquement les données du tableau des cas confirmés par départements. Si vous allez sur le site et inspectez la table, vous allez voir l’identifiant de la table, nous allons utiliser cet identifiant pour obtenir cet élément.

  1. Créer un nouveau projet

    npm init
    
  2. Installez Puppeteer

    npm install --save puppeteer
    
  3. Créez un fichier index.js. Ce sera l’endroit où nous allons ajouter le code suivant.

Récupérer les données d’un tableau HTML

const puppeteer = require('puppeteer');

(async () => {
  const url = 'https://covid19honduras.org/';

  const browser = await puppeteer.launch();

  try {
    const page = await browser.newPage();

    await page.goto(url);

    // Method to create a faster Page
    // From: https://github.com/shirshak55/scrapper-tools/blob/master/src/fastPage/index.ts#L113
    const session = await page.target().createCDPSession();
    await page.setBypassCSP(true);
    await session.send('Page.enable');
    await session.send('Page.setWebLifecycleState', {
      state: 'active',
    });

    // Bloquea la carga de recursos como imagenes y css
    await page.setRequestInterception(true);

    const rawData = await page.evaluate(() => {
      let data = [];
      let table = document.getElementById('tablaDatos');

      for (var i = 1; i < table.rows.length; i++) {
        let objCells = table.rows.item(i).cells;

        let values = [];
        for (var j = 0; j < objCells.length; j++) {
          let text = objCells.item(j).innerHTML;
          values.push(text);
        }
        let d = { i, values };
        data.push(d);
      }

      return data;
    });

    console.log(rawData);
  } catch (error) {
    console.log('error', error);
  }
})();

Résultat


email icon github icon stack-overflow icon twitter icon