javascriptnode.jswebcheerionightmare

Cheerio Web Scape: No Line Break Between Tags


When I use $('.episode-title') the output I get is

Otona no Bouguya-san S2 — 02Otona no Bouguya-san S2 — 01

The Output I want is Otona no Bouguya-san S2 — 02 \n Otona no Bouguya-san S2 — 01

How Do I Do this?

Edit 1 My Code

const Nightmare = require('nightmare');
const cheerio = require('cheerio');
const url = `https://subsplease.org/shows/otona-no-bouguya-san-s2/`
const nightmare = Nightmare({ show: true })

// Request making using nightmare
nightmare
  .goto(url)
  .wait('body')
  .wait('label.episode-title')
  .evaluate(() => document.querySelector('body').innerHTML)
  .end()
  .then(response => {
    console.log(getData(response));
  }).catch(err => {
    console.log(err);
  });


let getData = html => {
    const $ = cheerio.load(html);

    let title = $('.episode-title').text()
    console.log(title)
}

Edit 2 JSON

{
    "episodes": [ 
       {
        "title": "Otona no Bouguya-san S2 — 01",
        "torrents": [
            {
                "resolution": "1080p",
                "magnet": "url",
                "torrent": "url"
            },
            {
                "resolution": "720p",
                "magnet": "url",
                "torrent": "url"
            },            
            {
                "resolution": "sd",
                "magnet": "url",
                "torrent": "url"
            }
            
        ]
       }, 
       {
        "title": "Otona no Bouguya-san S2 — 02",
        "torrents": [
            {
                "resolution": "1080p",
                "magnet": "url",
                "torrent": "url"
            },
            {
                "resolution": "720p",
                "magnet": "url",
                "torrent": "url"
            },            
            {
                "resolution": "sd",
                "magnet": "url",
                "torrent": "url"
            }
            
        ]
       } 
    ]
}

Solution

  • Since you have two elements with class .episode-title you should use map or forEach. Here's one:

    let titles = $('.episode-title').map((i, el) => $(el).text()).get();
    console.log(titles);
    
    // => ["Otona no Bouguya-san S2 — 02", "Otona no Bouguya-san S2 — 01"]