基于 Nodejs + superagent + cheerio +eventproxy 做的爬虫

这个是后端处理

 var express = require('express');
var cheerio = require('cheerio');
var superagnet = require('superagent');
var ejs = require('ejs');
var eventproxy = require('eventproxy');

var app = express();

app.set('view engine', 'ejs');
app.set('views',__dirname+"/view");

app.get(
    '/',
    function(req,res){
        if(req){
            console.log('coming in ');
            var href_list = [];
            var page_data = [];
            var ep = new eventproxy();   //事件的对象。
            superagnet.get('https://cnodejs.org/')
                .end(function(err,getHtmlData){
                    if(err){
                        console.log("err:"+err);
                    }else{
                        var $ = cheerio.load(getHtmlData.text);
                        $('#topic_list .topic_title').each(function(id ,element){
                            var title_href = $(element).attr('href');
                            href_list.push({
                                href:title_href
                            });
                        });
                        //以上就获取到了每条帖子的链接。
                        //接下来的工作就是处理各条帖子了。
                        //事件
                        ep.after('haha' , href_list.length-20,function(tit_html_list){
                            tit_html_list.forEach(function(tit_html){
                                var $ = cheerio.load(tit_html);
                                var title_name = ($('title').text()).trim();
                                var title_replay = ($('.reply_area  .reply_content  .markdown-text p').first().text()).trim();
                                page_data.push({
                                    ttname:title_name,
                                    ttreplay:title_replay
                                });
                            });
                            res.render('lesson_5',{page_data:page_data});
                        });
                        //遍历
                        href_list.forEach(function(tit_url){
                            superagnet.get('https://cnodejs.org'+tit_url.href+'/')
                                .end(function(err,tit_html_data){
                                    if(err){
                                        console.log("err:"+err);
                                    }else{
                                        ep.emit('haha',[tit_html_data.text]);
                                    }
                                });
                        });
                    }
                });
        }
    }
);

app.listen(
    8080
);

这个是页面展示:

 <% page_data.forEach(function(element){ %>
    <h3>链接标题:<%=element.ttname%></h3>
    <h3>第一条评论:<%=element.ttreplay%></h3>
    <hr/>
<% }) %>

但是页面上一直没有数据。。大神。。快点来。

额。。想不明白。。。后端处理改了一下。。。虽然现在页面上出来数据了,,达到效果了。。但是不明白原因。。大神解释解释。。

 var express = require('express');
var cheerio = require('cheerio');
var superagnet = require('superagent');
var ejs = require('ejs');
var eventproxy = require('eventproxy');

var app = express();

app.set('view engine', 'ejs');
app.set('views',__dirname+"/view");

app.get(
    '/',
    function(req,res){
        if(req){
            console.log('coming in ');
            var href_list = [];
            var page_data = [];
            var ep = new eventproxy();   //事件的对象。
            superagnet.get('https://cnodejs.org/')
                .end(function(err,getHtmlData){
                    if(err){
                        console.log("err:"+err);
                    }else{
                        var $ = cheerio.load(getHtmlData.text);
                        $('#topic_list .topic_title').each(function(id ,element){
                            var title_href = $(element).attr('href');
                            href_list.push({
                                href:title_href
                            });
                        });
                        //以上就获取到了每条帖子的链接。
                        //接下来的工作就是处理各条帖子了。
                        //事件
                        ep.after('haha' , href_list.length-20,function(tit_html_list){
                            //tit_html_list.forEach(function(tit_html){
                            //    var $ = cheerio.load(tit_html);
                            //
                            //    page_data.push({
                            //        ttname:title_name,
                            //        ttreplay:title_replay
                            //    });
                            //});
                            tit_html_list.forEach(function(element){
                                var name = element[0];
                                var replay = element[1];
                                console.log(name);
                                console.log(replay);
                                page_data.push({
                                    ttname:name,
                                    ttreplay:replay
                                });
                            });
                            res.render('lesson_5',{page_data:page_data});
                        });
                        //遍历
                        href_list.forEach(function(tit_url){
                            superagnet.get('https://cnodejs.org'+tit_url.href+'/')
                                .end(function(err,tit_html_data){
                                    if(err){
                                        console.log("err:"+err);
                                    }else{
                                        var $ = cheerio.load(tit_html_data.text);
                                        var title_name = ($('title').text()).trim();
                                        var title_replay = ($('.reply_area  .reply_content  .markdown-text p').first().text()).trim();

                                        ep.emit('haha',[title_name,title_replay]);
                                    }
                                });
                        });
                    }
                });
        }
    }
);

app.listen(
    8080
);

大神出来看看啊。。。。。