这是在Crawler上运行的网页抓取工具的快捷代码,但效果很好。问题是爬虫返回20个字符串半秒钟,并且它们在MySQL中的存储速度比新的慢得多。如何正确同步这两个过程。
function crawler(done) {
for (i=0, ...) {
crawler.queue([{
"uri": link,
"callback": function (error, result, $) {
var arr = $('.someclass');
done(arr);
}
}])
};
};
crawler (function (arr) {
savetosql(s, arr);
});
function savetosql (s, arr) {
var query = connection.query('UPDATE ...');
};
答案 0 :(得分:1)
不确定这是否是您正在寻找的,我从未使用过爬虫,但这是您在node.js中序列化内容的方式。
function crawl_step(step,limit) {
//for (i=0, ...) { no more for
crawler.queue([{
"uri": link,
"callback": function (error, result, $) {
var arr = $('.someclass');
//done(arr);
var query = connection.query('UPDATE ...',calbback(...){
//this runs when the sql query is over
if(step<limit) crawl_step(step+1,limit);
else {....do something when all crawls are over ...}
});
}
}])
//};
};
crawl_step(0,100);
为了更容易理解序列化过程,让我们使用一些基本的api: 我们只想存在100个文件(我们使用异步调用,但是以同步方式)。
function step(step_nr){
fs.exists( step_nr+'.txt' , function (exists) {
fs.readFile( step_nr+'.txt' , function (err, data) {
if (err) throw err;
console.log(data);
if(step_nr<100) step(step_nr+1);
});
});
}
step(0);