Soy nuevo en el raspado. Estoy tratando de raspar los enlaces de canciones individuales y cosas en esta página https://www.ultimate-guitar.com/search.php?search_type=title&value=jimi%20hendrix%20little%20wing
Hay muchos elementos <div class = '_3uKbA'> y cada uno contiene datos para esa canción/versión particular de la canción. Puedo conseguir estos muy bien. El problema proviene de intentar devolver los nombres de clase del elemento que tiene la calificación de estrellas.
El siguiente código parece devolver solo un nombre de clase, y a veces dos, pero nunca las 5 clases, que es lo que necesito para determinar la calificación (maldice a UG por no tener un número allí...)
(Creo) Con la forma en que estoy repitiendo, si el div principal no contiene el elemento de calificación de estrellas, busca el siguiente elemento disponible. Quiero que devuelva algo más en su lugar si el div principal en particular no tiene el elemento de calificación de estrellas.
Idealmente, estoy recorriendo cada div principal individual y obteniendo nombres de clase si existe, y algo más si no existe.
Esto es lo más cerca que he podido llegar y parece que no se me ocurre nada más.
const mainDiv = await page.$$('div._3uKbA'); const mainDivLength = await page.$$eval('div._3uKbA', el => el.length); const divObj = []; for (let i = 3; i < mainDivLength; i++) { const divData = { name: await page.evaluate(el => el.textContent, (await page.$$('div._3uKbA a._3DU-x'))[i]), link: await page.evaluate(el => el.href, (await page.$$('div._3uKbA a._3DU-x'))[i]), stars: await page.evaluate(el => el.className, (await page.$$('div._3uKbA div._1cxy0 span'))[i]), } divObj.push(divData); } console.log(divObj);