willwade
willwade

Reputation: 2220

cheerio script element - data

Im using cheerio to do some scraping and want to access the head js element on a page (notably instructables). I can access it but it comes back as function.

So using this:

  console.log($('script').attr('type', "application/ld+json").text);

Upvotes: 3

Views: 3408

Answers (1)

Antoine Thiry
Antoine Thiry

Reputation: 2442

This is because $("script").attr("type","application/ld+json"); returns an array of script tags (there's more than only one script tag on the page) and it's also changing the type of all script tag of the page to application/ld+json

See JQuery .attr() documentation.

If you need to get the one with that type $("script[type='application/ld+json']") will do the trick.

var request = require('request');
var cheerio = require('cheerio');

request('http://www.instructables.com/id/Making-an-online-Fish-Tank-webcam!/step3/Cut-the-project-box/', function (error, response, html) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html);
    var obj = $("script[type='application/ld+json']"); 

    for(var i in obj){
        for(var j in obj[i].children){
            var data = obj[i].children[j].data;
            if(data){
               console.log(data);
            }
        }
    }
  }
});

Upvotes: 8

Related Questions