es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer un salto de línea en un etiqueta de párrafo (p tag) en Cheerio?

Estoy extrayendo algunos párrafos de un sitio web y me encuentro con este problema, pero no sé cómo resolverlo.

La estructura es algo como esto, por ejemplo:

<div class="container">
   <p> Este es un párrafo largo 1. </p>
   <p> Este es un párrafo largo 2. </p>
   <p> Este es un párrafo largo 3. </p>
   <p> Este es un párrafo largo 4. </p>
</div>

Entonces, hice algo como esto para obtener el texto dentro del párrafo de ejemplo que acabo de mencionar.

function scrapeData() {
    let data = []
    let url = `url-de-rascado`;
    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 {Este es un párrafo largo 1.Este es un párrafo largo 2.Este es un párrafo largo 3.Este es un párrafo largo 4.} todo junto, quiero separar estos párrafos en cada bloque de texto.

Quiero que se vea así en mi console.log(data):

{
    Este es un párrafo largo 1.
    Este es un párrafo largo 2.
    Este es un párrafo largo 3.
    Este es un párrafo largo 4.
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para separar los párrafos en cada fragmento de texto, puedes modificar la variable text para incluir un salto de línea entre cada párrafo. Esto se puede lograr utilizando la función .map() para recorrer todos los elementos de párrafo y agregando el carácter de nueva línea \n entre cada uno:

    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').map(function() {
                    return $(this).text();
                }).get().join('\n');
                data.push({
                  text
                })
                console.log(data)
            })
    
        }).catch(err => console.log(err))
    }
    

    Esto debería darte el resultado deseado con cada párrafo separado por un carácter de nueva línea.

Comments are closed.