Javascript Node.js应用程序冻结
我将node.js与Javascript Node.js应用程序冻结,javascript,node.js,Javascript,Node.js,我将node.js与cheerio和request模块一起用于抓取。 我想抓取超过200000的内容。我写了一个脚本,请求内容列表,然后请求每个内容并将其保存到数据库中 到目前为止一切正常。我已经测试了保存1000个内容的脚本,并没有看到任何错误或bug发生 然后,我决定运行脚本来删除所有内容。 运行后,在抓取10000个内容后出现问题。我的应用程序开始冻结!它只是停止了,没有显示任何错误。我已经检查了cpu和内存的使用情况——它们都正常,mongodb很好,一切正常。脚本停止工作 以下是我用于
cheerio
和request
模块一起用于抓取。
我想抓取超过200000的内容。我写了一个脚本,请求内容列表,然后请求每个内容并将其保存到数据库中
到目前为止一切正常。我已经测试了保存1000个内容的脚本,并没有看到任何错误或bug发生
然后,我决定运行脚本来删除所有内容。
运行后,在抓取10000个内容后出现问题。我的应用程序开始冻结!它只是停止了,没有显示任何错误。我已经检查了cpu和内存的使用情况——它们都正常,mongodb很好,一切正常。脚本停止工作
以下是我用于刮取的代码:
var count = 1;
async.whilst(
function () {
return count < 2412;
},
function (callback) {
request({
url:"http://www.domain.com/limit/100/page/"+count,
method:"GET"
},
function(error,response,body){
if (!error && response.statusCode == 200) {
if(body){
$ = cheerio.load(body);
$('.linear_news a').each(function(item){
console.log($(this).attr('href'))
if($(this).attr('href')){
request({
url:encodeURI("http://www.domain.com"+$(this).attr('href')),
method:"GET"
},
function(error,response,body1){
if (!error && response.statusCode == 200) {
if(body){
$ = cheerio.load(body1);
var title = $('.title a').text();
if($('head > base').attr('href')){
var postId =$('head > base').attr('href').match(/\/fa\/news\/(\d+)/);
}
var postContent = $('.body').html();
var post = {
title:title,
postId:postId[1],
content:postContent,
created:new Date()
}
savePost(post,function(err,msg){
if(err){
console.log(err);
}else{
console.log(msg);
}
})
// save tags
$('.tags_item').each(function(item){
var myData = {
tagName:$(this).text(),
created:new Date()
}
saveTags(myData,function(err,msg){
if(err){
console.log(err)
}else{
console.log(msg)
}
})
})//end save tags
// save images
$('.body img').each(function(item){
var image = $(this).attr('src');
var myImages = {
image:image,
alt:title,
imageID:imageID,
created:new Date()
}
saveImages(myImages,function(err,msg){
if(err){
console.log(err)
}else{
console.log(msg)
}
})
})// end of save images
}
}
}) // end of request for tags
}// end of ($(this).attr('href'))
})
}
callback();
}
})// emd of requset for news list
count++;
},
function (err) {
console.log("shit is done")
}
);
var计数=1;
异步的(
函数(){
返回计数<2412;
},
函数(回调){
请求({
url:“http://www.domain.com/limit/100/page/“+伯爵,
方法:“获取”
},
功能(错误、响应、正文){
如果(!error&&response.statusCode==200){
如果(正文){
$=cheerio.load(车身);
$('.linear_news a')。每个(函数(项){
console.log($(this.attr('href'))
if($(this.attr('href')){
请求({
url:encodeURI(“http://www.domain.com“+$(this.attr('href')),
方法:“获取”
},
功能(错误、响应、正文1){
如果(!error&&response.statusCode==200){
如果(正文){
$=cheerio.load(车身1);
var title=$('.title a').text();
if($('head>base').attr('href')){
var postId=$('head>base').attr('href').match(/\/fa\/news\/(\d+)/);
}
var postContent=$('.body').html();
var post={
标题:标题,,
postId:postId[1],
内容:后内容,
创建日期:新日期()
}
savePost(post,函数(err,msg){
如果(错误){
控制台日志(err);
}否则{
控制台日志(msg);
}
})
//保存标签
$('.tags_item')。每个(函数(项){
var myData={
标记名:$(this).text(),
创建日期:新日期()
}
saveTags(myData,函数(err,msg){
如果(错误){
console.log(错误)
}否则{
控制台日志(msg)
}
})
})//结束保存标记
//保存图像
$('.body img')。每个(功能(项){
var image=$(this.attr('src');
var myImages={
图像:图像,
备选:标题,
imageID:imageID,
创建日期:新日期()
}
保存图像(myImages,函数(err,msg){
如果(错误){
console.log(错误)
}否则{
控制台日志(msg)
}
})
})//保存图像结束
}
}
})//标记请求结束
}//结束($(this.attr('href'))
})
}
回调();
}
})//新闻列表需求的emd
计数++;
},
功能(err){
console.log(“大便结束了”)
}
);