es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Web scraping con Cheerio no está funcionando con algunos elementos.

Acabo de empezar a aprender sobre web scraping y encontré este tutorial: https://www.mundojs.com.br/2020/05/25/criando-um-web-scraper-com-nodejs/

Funciona bien, sin embargo estoy tratando de obtener diferentes elementos de la misma página web: https://ge.globo.com/futebol/brasileirao-serie-a/

Con el grupo de clases del tutorial trae todos los elementos con la clase seleccionada, pero con otras clases no funciona:

Como se puede ver, se devuelven los cincuenta elementos con la clase ranking-item-wrapper, pero si selecciono elementos con la clase lista-jogos__jogo no devuelve nada:

No entiendo por qué estoy obteniendo este error, ya que estoy haciendo exactamente lo mismo que se hace en el tutorial.

Aquí hay una versión corta del código:

const axios = require(‘axios’);
const cheerio = require(‘cheerio’);
const url = ‘https://ge.globo.com/futebol/brasileirao-serie-a/’;

axios(url).then(response => {
const html = response.data;
const $ = cheerio.load(html);
console.log($(‘.ranking-item-wrapper’)) // => clase del tutorial
console.log(‘***’)
console.log($(‘.lista-jogos__jogo’)) // => clase que estoy usando
}).catch(console.error);
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en javascript, node.js, axios, web-crawler y cheerio, es importante tener en cuenta que el web scraping puede ser bastante desafiante incluso para desarrolladores experimentados.

    En cuanto al problema en cuestión, es posible que la página web https://ge.globo.com/futebol/brasileirao-serie-a/` esté utilizando técnicas de carga dinámica o carga perezosa, lo que significa que el contenido no está disponible en el HTML cuando se realiza la solicitud de axios. Por lo tanto, los elementos con la claselista-jogos__jogo` no se encuentran, aunque aparezcan al inspeccionar manualmente la página web.

    Para confirmar si este es el caso, podemos utilizar las herramientas de desarrollo en Chrome (o cualquier otro navegador) y verificar si el contenido se carga dinámicamente. Una forma de hacerlo es desactivando JavaScript antes de cargar la página y comprobando si los elementos deseados todavía están visibles. Si no lo están, entonces es probable que el problema esté relacionado con la carga dinámica o perezosa.

    Para solucionar este problema, podemos utilizar otras técnicas como puppeteer o phantomjs para simular un navegador y cargar la página con JavaScript habilitado, o podemos intentar identificar la fuente de los datos (como una API) y obtener el contenido directamente desde allí en lugar de raspar el HTML.

    En cualquier caso, debemos asegurarnos de que el contenido que estamos tratando de raspar esté disponible en el HTML cuando hacemos la solicitud, de lo contrario, no podremos recuperarlo.

Comments are closed.