Estoy usando CheerioJS para extraer una lista de texto de un sitio. Estoy encontrando correctamente el texto, sin embargo, sucede algo extraño cuando uso .each en una matriz de filas de la tabla.
Aquí está mi código
const getTopCollections = async () => { const response = await axios.get('https://www.nft-stats.com/top-collections/7d') const $ = cheerio.load(response.data) const return_data = [] const table = $('table').children('tbody') table.each((i, element) => { let col_name = $(element).find('a').text() return_data.push(col_name) }) console.log(return_data); return return_data
Lo que obtengo es que, en lugar de una matriz de cadenas en return_data, obtengo una cadena grande con todo el texto en una sola cadena, como se muestra a continuación:
Supongo que tiene algo que ver con la forma en que CheerioJS devuelve datos de .each(). Intenté guardar el resultado de cada .find().text() en su propia variable y luego insertarlo, pero eso no lo solucionó.
Como dije en los comentarios, Cheerio es un clon extraño de jQuery y no se comporta exactamente como él. $(element).find('a')
encuentra todos los <a>
pero devuelve un único objeto Cheerio. Puede iterar los enlaces con
$(element).find('a').each( ..... push etc )
o
$(element).find('a').toArray().forEach( element => ... )