15

I want to be able to scrape links out of an HTML page that I am fetching with the Meteor.http method. Would be ideal to use jQuery on the server-side but I don't think this works.

Simon
  • 1,849
  • 3
  • 22
  • 29

2 Answers2

13

Consider using cheerio its just like jquery but more for scraping. I have tried to answer this before so I hope I do a better job this time.

its an npm module so first step install it (inside your project dir) with terminal:

meteor add http
cd .meteor
npm install cheerio

So now the code:

You need to use this in your server js/or equivalent

var cheerio = __meteor_bootstrap__.require('cheerio');
Meteor.methods({
last_action: function() {
       $ = cheerio.load(Meteor.http.get("https://github.com/meteor/meteor").content);
       return $('.commit-title').text().trim()      
    }
})

If you run this from your client side js, you will see the last action on meteors github branch:

Meteor.call("last_action",function(err,result){ console.log(result) } );

I got this as of today/feb 23rd

enter image description here

which the same as on github.com/meteor/meteor

enter image description here

Tarang
  • 75,157
  • 39
  • 215
  • 276
  • I really love Meteor, it's just so much fun. Thanks for the excellent answer. – Simon Feb 23 '13 at 00:24
  • With Meteor 1.2.1, `__meteor_bootstrap__.require('cheerio');` or `Meteor.require('cheerio');` doesnt work. Even some other posts suggest `Meteor.npmRequire('cheerio')` doesnt work. What worked for me is `Npm.required('cheerio')`, but still answer by @Akshat did help me scrap html response from `http` package. – Jay Dec 04 '15 at 15:13
10

Use cheerio, as Akshat suggests, but I would recommend a different way of using it, as of now, for Meteor 0.8.0.

First, install npm for Meteor:

$ mrt add npm

Then modify packages.json to (of course you can have different version of cheerio, or other node packages as well):

{
  "cheerio": "0.15.0"
}

In server.js (or any other file, in server-side code) start:

var cheerio =  Meteor.require('cheerio');

The use cheerio in a way you like.

Upon running $ meteor it will automatically install cheerio.

Piotr Migdal
  • 11,864
  • 9
  • 64
  • 86