Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

188
Vistas
No se puede implementar ninguna lógica para raspar el contenido de las páginas más internas usando titiritero

Creé una secuencia de comandos usando titiritero para raspar los enlaces de diferentes autores de una página web que atraviesa varias páginas y hace clic en el botón de la página siguiente. El script parece estar funcionando de la manera correcta.

Aunque el contenido de este sitio es estático, intencionalmente usé titiritero dentro del siguiente script solo para aprender cómo puedo analizar el contenido de las páginas internas.

Dado que deseo profundizar una capa para raspar la description de tales páginas . ¿Cómo puedo lograr eso?

 const puppeteer = require('puppeteer'); function run (pagesToScrape) { return new Promise(async (resolve, reject) => { try { if (!pagesToScrape) { pagesToScrape = 1; } const browser = await puppeteer.launch({headless:false}); const [page] = await browser.pages(); await page.goto("https://quotes.toscrape.com/"); let currentPage = 1; let urls = []; while (currentPage <= pagesToScrape) { let newUrls = await page.evaluate(() => { let results = []; let items = document.querySelectorAll('[class="quote"]'); items.forEach((item) => { results.push({ authorUrl: 'https://quotes.toscrape.com' + item.querySelector("small.author + a").getAttribute('href'), title: item.querySelector("span.text").innerText }); }); return results; }); urls = urls.concat(newUrls); if (currentPage < pagesToScrape) { await Promise.all([ await page.waitForSelector('li.next > a'), await page.click('li.next > a'), await page.waitForSelector('[class="quote"]') ]) } currentPage++; } browser.close(); return resolve(urls); } catch (e) { return reject(e); } }) } run(3).then(console.log).catch(console.error);
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Yo iría de esta manera:

 const puppeteer = require('puppeteer'); let browser; (async function main() { browser = await puppeteer.launch({ headless: false, defaultViewport: null }); const [pageQuotes] = await browser.pages(); const pageAbout = await browser.newPage(); await pageQuotes.bringToFront(); // Otherwise, click on the next page link does not work. const pagesToScrape = 3; await pageQuotes.goto('https://quotes.toscrape.com/'); let currentPage = 1; const data = { quotes: {}, abouts: {} }; const visitedAbouts = new Set(); while (currentPage <= pagesToScrape) { await pageQuotes.waitForSelector('.quote'); const { quotes, aboutURLs } = await pageQuotes.evaluate(() => ({ quotes: Array.from( document.querySelectorAll('.quote'), quote => [quote.querySelector('small.author').innerText, quote.innerText], ), aboutURLs: Array.from( document.querySelectorAll('.quote small.author + a[href]'), quote => quote.href, ), })); for (const [author, quote] of quotes) { if (data.quotes[author] === undefined) data.quotes[author] = []; data.quotes[author].push(quote); } for (const aboutURL of aboutURLs) { if (!visitedAbouts.has(aboutURL)) { visitedAbouts.add(aboutURL); await pageAbout.goto(aboutURL); await pageAbout.waitForSelector('div.author-details'); const { title, about } = await pageAbout.evaluate(() => ({ title: document.querySelector('div.author-details h3.author-title').innerText, about: document.querySelector('div.author-details').innerText, })); data.abouts[title] = about; } } if (currentPage < pagesToScrape) { const nextLink = await pageQuotes.waitForSelector('li.next > a'); await Promise.all([ nextLink.click(), pageQuotes.waitForNavigation(), ]); } currentPage++; } console.log(JSON.stringify(data, null, ' ')); })().catch(console.error).finally(async () => { if (browser) await browser.close(); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda