Node.js requests and cheerio output blank

Viewed 208

I'm learning scraping using node.js requests and cheerio. I write a simple code to display title from a web page.

My code :

const request = require("request");
const cheerio = require("cheerio");

const url = "https://singapore.craigslist.org/d/automotive-services/search/aos"

async function scrapeCraigslist() {

    try {

        const htmResult = await request.get(url);
        const $ = await cheerio.load(htmResult);
         $(".result-info").each((index, element) => {

          const title = $(element)
          .children(".result-title")
          .text();

          console.log(title);
          console.log("sk");
        
        });

    } catch (err) {

        console.error(err);
    }
}


scrapeCraigslist();


But when i run the code i'm getting blank nothing errors and no ouput.

Output :

Microsoft Windows [Version 10.0.18362.720]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\Ahmed-PC\craigslist>node index.js

C:\Users\Ahmed-PC\craigslist>

My selection and result is coming in Chrome Developer Tools console. but not coming in node.js code

1 Answers

You're using request with a promise style interface, if you wish to do this you'll need to use request-promise (or you could use Axios, node-fetch etc.).

If you use request-promise your code should work fine:

request-promise

const request = require("request");
const cheerio = require("cheerio");
const rp = require("request-promise");

const url = "https://singapore.craigslist.org/d/automotive-services/search/aos"

async function scrapeCraigslist() {

    try {

        const htmResult = await rp.get(url);
        const $ = await cheerio.load(htmResult);
        $(".result-info").each((index, element) => {

        const title = $(element)
        .children(".result-title")
        .text();

        console.log(title);
        console.log("sk");

        });

    } catch (err) {

        console.error(err);
    }
}

scrapeCraigslist();

request (with callback)

const request = require("request");
const cheerio = require("cheerio");

const url = "https://singapore.craigslist.org/d/automotive-services/search/aos"

async function scrapeCraigslist() {

    request.get(url, async (error, response, htmResult) => { 
            if (error) {
                // Something went wrong
                console.error(error);
            } else {
                // The request was successful
                const $ = await cheerio.load(htmResult);
                $(".result-info").each((index, element) => {

                    const title = $(element)
                    .children(".result-title")
                    .text();

                    console.log(title);
                    console.log("sk");
                });
            }
    });

}

scrapeCraigslist();
Related