2013-02-09 15 views
12

Czy mogę skrobać za pomocą meteor.js? Właśnie odkryto cheerio, który działa doskonale w połączeniu z request. Czy mogę ich używać z meteorytem, ​​czy jest coś podobnego?Skrobanie za pomocą Meteor.js

Czy masz działający przykład?

+0

podobne, jeśli nie duplikat: http://stackoverflow.com/questions/15034453/how-can-one-parse-html-server-side-with-meteor –

+0

To pytanie zainspirowało mnie do nagrywania powiązany screencast: https://www.youtube.com/watch?v=QA0_0SPd3P8 thanks! – DeBraid

Odpowiedz

20

Oczywiście! Trudno sobie wyobrazić, co meteor nie może zrobić! Najpierw potrzebujesz czegoś do obsługi zdalnych żądań http. W swoim katalogu meteorów w perspektywie terminala meteor add http dodać pakiet Meteor.http również npm install cheerio (spojrzeć na another SO question on how to install npm modules aby zobaczyć dokładnie, gdzie do instalacji zewnętrznych modułów NPM.

Oto przykład, który może pomóc trochę, to zeskrobuje current time

Server js

require = __meteor_bootstrap__.require; //to use npm require must be exposed. 
var cheerio = require('cheerio'); 

Meteor.methods({ 
    getTime: function() { 
     result = Meteor.http.get("http://www.timeanddate.com/worldclock/city.html?n=136"); 
     $ = cheerio.load(result.content); 
     CurrentTime = $('#ct').html(); 
     return CurrentTime; 
    } 
}); 

Client stronie skryptu.

Meteor.call("getTime", function(error, result) { 
    alert("The current time is " + result); 
}); 

Mam nadzieję, że to będzie pomocne. wśród z Cheerio są także inne struktury węzłowe, takie jak node.io

+0

czy masz jakieś zalecenia dotyczące symulacji JS do skrobania? Twój przykład wygląda tak, jakby to było tylko HTML – FullStack

+0

@FullStack Jeśli potrzebujesz bardziej zaawansowanego skrobania, skorzystaj z phantomjs. – Akshat

1

następujący kod jest stosowany w this project zeskrobać z tweetstorm:

if (Meteor.isClient) { 

    Meteor.call('getTweets', function (error, result) { 
    if (error) { 
     console.log("error", error); 
    }; 

    Session.set("tweets", result); 
    }); 

    Template.tweets.helpers({ 
    rant: function() { 
     return Session.get("tweets"); 
    } 
    }); 

} 

stronie serwera

if (Meteor.isServer) { 
     Meteor.startup(function() { 
     var cheerio = Meteor.npmRequire('cheerio'); 

    Meteor.methods({ 
     getTweets: function() { 
     result = Meteor.http.get("https://twitter.com/Royal_Arse/status/538330380273979393"); 
     $ = cheerio.load(result.content); 
     var body = $('#stream-items-id > li:nth-child(n) > div > div > p').text(); 
     return body; 
     }, 

    }) 

    }); 
}