Easy Scraper

mail@pastecode.io avatar
unknown
javascript
a year ago
1.7 kB
7
Indexable
const puppeteer = require('puppeteer');

/*
    Il codice è incapusolato all'interno di una funzione asincrona
    il che significa che verrà eseguita non appena il modulo sarà importato.
 */
(async () => {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();
    const url = 'https://ted.europa.eu/udl?uri=TED:NOTICE:635180-2023:DATA:EN:HTML&src=0&tabId=3';
    await page.goto(url);

    const rows = await page.$$('tbody tr');

    // Crea un dizionario
    const values = {
        'Title': (value) => console.log(`Title: ${value}`),
        'Publication date': (value) => console.log(`Publication date: ${value}`),
        'Deadline for submission': (value) => console.log(`Deadline for submission: ${value}`)
    };

    for (const row of rows) {
        /*
            Per ciascuna riga nella tabella, viene estratto il testo
            all'interno di quella riga e quindi, per ogni chiave nell'oggetto
            'values', viene verificato se il testo della riga contiene la chiave.
            Se la chiave è presente, viene estratto il valore corrispondente, che
            viene quindi passato alla funzione corrispondenti nell'oggetto
            'values' per la stampa.
         */
        const rowText = await page.evaluate(element => element.textContent, row);
        // page.evaluate | serve per eseguire codice js nella pagina web
        for (const keyword in values) {
            if (rowText.includes(keyword)) {
                const value = rowText.split(keyword)[1].trim();
                values[keyword](value);
            }
        }
    }

    await browser.close();
})();