Recientemente me encontré con un problema que no puedo resolver con Axios y Cheerio. Lo que estoy tratando de hacer es raspar la página web de una tienda de café que contiene varios productos de café diferentes. Hasta ahora he podido raspar cada uno de los nombres de café, países, sus sabores y las direcciones URL de cada página de producto. Lo que me gustaría hacer es dar un paso más y raspar cada una de las URL de productos individuales y devolver su disponibilidad de stock. En cada página de producto individual hay un div de descripción que contiene texto que indica si está disponible o no. Sin embargo, me he encontrado con el problema de raspar cada URL para ese texto.
Hasta ahora esto es lo que tengo:
const links = []; axios(coffeeStoreURL) .then(response => { const html = response.data; const coffeePageHTML = cheerio.load(html); const coffees = []; coffeePageHTML('.coffeeBadge', html).each(function() { const coffeeName = coffeePageHTML(this).find('.coffeeBadgeBottom a').text() const coffeeCountry = coffeePageHTML(this).find('.country-label').text() const coffeeFlavors = coffeePageHTML(this).find('.flavors').text() const coffeeImage = coffeePageHTML(this).find('img').attr('src') const coffeeURL = coffeePageHTML(this).find('a').attr('href') coffees.push({ coffeeImage, coffeeName, coffeeCountry, coffeeFlavors, coffeeURL }); links.push(( coffeeURL )) }); }) .then( () => { for (let i = 0; i < links.length; i++) { axios(links[i]) //This is where I am stuck on how to scrape each link in my links array and use cheerio to grab the div data from each page } }).catch(err => console.log(err));Supongo que estoy en el camino correcto, pero si no, cualquier orientación sería muy apreciada.
Gracias
La forma rápida pero menos elegante de hacer esto es llamando a una función anónima autoejecutable (también conocida como IIFE ) que contiene cada iteración dentro de su bucle for .
for (let i = 0; i < links.length; i++) { (function(link) { // do your axios calls here, "link" is holding the current URL })(links[i]); }Si desea algo más elegante, consulte esta pregunta: Axios.get().then() en un bucle for