Estoy raspando algunos párrafos de un sitio web y me ocurre este problema, pero no sé cómo resolverlo.
La estructura es algo así, por ejemplo:
<div class = "container"> <p> This is a long paragraph 1. </p> <p> This is a long paragraph 2. </p> <p> This is a long paragraph 3. </p> <p> This is a long paragrahp 4. </p> </div>Así que tuve que hacer algo como esto para obtener el texto dentro del párrafo de ejemplo que acabo de mencionar.
function scrapeData() { let data = [] let url = `scraping-url`; axios(url) .then(response =>{ const html = response.data const $ = cheerio.load(html, {xmlMode: true}) $('.container', html).each(function(){ const text = $(this).find('p').text() data.push({ text }) console.log(data) }) }).catch(err => console.log(err)) } Pero el resultado que obtengo es {This is a long paragraph 1.This is a long paragraph 2.This is a long paragraph 3.This is a long paragraph 4.} pegados, quiero separar estos párrafos en cada fragmento de texto
Lo quiero así en mi console.log(data)
{ This is a long paragraph 1. This is a long paragraph 2. This is a long paragraph 3. This is a long paragraph 4. }Adapte el selector para que coincida con las etiquetas p , y luego recorra cada una y construya sus datos.
Prueba esto:
// select p tags in the container $('.container p', html).each(function(){ const text = $(this).text(); data.push({ text }); }); console.log(data);Tal vez agregue las nuevas líneas después de:
$('p').after("\n")O cuando te unes a ellos:
$('p').get().map(p => $(p).text()).join("\n")