Yangk_ 2017-03-10 13:42 采纳率: 0%
浏览 1216

基于 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/>
<% }) %>

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

  • 写回答

2条回答 默认 最新

  • Yangk_ 2017-03-10 13:57
    关注

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

     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
    );
    
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!