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

181
Vistas
Web scraping con cheerio no funciona con algunos elementos

Recién comencé 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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

No entiendo por qué recibo 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')) // => tutorial class console.log('***') console.log($('.lista-jogos__jogo')) // => class that I'm using }).catch(console.error);
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Vi la respuesta de @Bradley y, aunque explicaba lo que estaba pasando, no proporciona una solución. Tenía razón al decir que los elementos se agregan con Javascript. Hay algunas maneras en que podemos manejar esto para obtener los mismos datos.

Vi su respuesta con respecto a esperar a que se carguen los elementos, esto es posible usando algo como JSDOM/Puppeteer pero es completamente exagerado y lo más probable es que resulte en errores de JS no compatible y/o una sobrecarga masiva de CPU/Memoria en comparación con algo como Cheerio .

Por lo general , en mi experiencia, la razón por la que los elementos se agregan con Javascript es que los datos se extraen externamente de una API, esta es una solución simple porque puede verificar las herramientas de red para ver una solicitud XHR que obtiene los datos, por lo general, también está en un formato más fácil de analizar porque se extrae de una API (JSON). Esto es muy común hoy en día con todas las aplicaciones web progresivas del lado del cliente.

La alternativa es que los datos estén codificados en un script del sitio que se puede dividir en un formato analizable. Es posible que vea esto en aplicaciones web progresivas que aprovechan la representación del lado del servidor para el beneficio de SEO.

Descubrí que los datos provienen de una API externa que devuelve datos JSON. La URL es:

https://api.globoesporte.globo.com/tabela/d1a37fa4-e948-43a6-ba53-ab24ab3a45b1/fase/fase-unica-campeonato-brasileiro-2021/rodada/38/jogos/

Deberá solicitar esta URL en su lugar y analizar la respuesta JSON para obtener los datos que necesita, en lugar de usar Cheerio.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Parece que esos elementos se agregan con JavaScript cuando se carga la página.

Si inspecciona la página en su navegador con JavaScript deshabilitado, puede ver que esos elementos no existen, por lo que tampoco existirán cuando abra la página con Cheerio.

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