Node.js App冻结了

时间:2015-09-25 12:12:20

标签: javascript node.js

我正在使用带有cheeriorequest模块的node.js进行抓取。 我想刮掉超过200,000个内容。我写了一个请求内容列表的脚本,然后请求每个内容并将其保存到数据库。

到目前为止一切正常。我已经测试了脚本以保存1000个内容,但没有看到任何错误或错误发生。

然后,我决定运行我的脚本来删除所有内容。 运行后,抓取10,000内容后出现问题。我的应用程序开始冻结!它刚刚停止并且没有显示任何错误。我检查了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")
    }
); 

0 个答案:

没有答案