到本书结束时,我们需要
修改程序以
连续获得40页的内容,也就是说,我们需要输出每篇文章的标题、链接、第一条评论、对
用户的评论和论坛的要点。
如图所示,$('。reply_author)。情商(0)。
文本()。修剪();得到的值是
正确的第一个评论的用户。
{ }
eventproxy得到评论和
用户名的内容后,我们需要对用户
界面和继续捕捉用户的积分。
复制代码代码如下所示:
var $ = cheerio.load(topichtml);
这是URL
目标。
无功userhref = 'https: / / cnodejs。org+ $('。reply_author)。情商(0),Attr('href);
userhref = url.resolve(特尔,userhref);
var title= $('。topic_full_title)。文本()。修剪()代替( / 。;
VaR href = topicurl;
无功comment1 = $('。reply_content)。情商(0)。文本()饰();
作者1 = $(var。reply_author)。情商(0)。文本()饰();
将
参数传递给下一个并发抓取
Ep.emit('user_html,{ userhref,标题,链接,comment1,作者1 });
在eventproxy这个时间,我们要找出得分(class=大)。
{ }
发现是很好,我们想得到的结果。
复制代码代码如下所示:
VaR结果= superagent.get(userurl)
结束(
函数(
错误,RES){
如果(错误){
返回console.error(ERR);
}
var $ = cheerio.load(res.text);
var得分= $(大);
console.log(用户{ 1 });
console.log(用户{ 2 });
Console.log (user{3});
console.log(用户{ 4 });
console.log($('大')。文本()。修剪()));
返回({
标题:用户{ 1 },
链接:用户{ 2 },
comment1:用户{ 3 },
作者1:用户{ 4 },
1:得分
});
});
});
运行程序,这个代码的结果。
{ }
但问题是,我们能输出正确的结果的。端()的回调函数,但不正确的输出结果,仔细一看,需要输出的结果是一个请求的对象。这是因为粗心,错误的。端()函数不及格返回值为请求对象,需要将结果返回给上层(用户)。
复制代码代码如下所示:
/ /找到userdetails
Ep.after('user_html ',topicurls.length,
功能(用户){)
用户users.map(功能(用户){
无功userurl =用户{ 0 };
风险评分;
superagent.get(userurl)
结束(函数(错误,RES){
如果(错误){
返回console.error(ERR);
}
/ / console.log(res.text);
var $ = cheerio.load(res.text);
得分= $(大);
});
返回({
标题:用户{ 1 },
链接:用户{ 2 },
comment1:用户{ 3 },
作者1:用户{ 4 },
1:得分
});
});
给用户一个良好的输出和发现的1休息是正确的值。精心调试表明,程序是console.log()首先,然后。地图()。在更准确。地图()函数,回调函数,得到()不
执行赋值评分,和返回的返回值进行。这是回调函数的不
同步,且外层同步不
等待做回调函数。
{ }
我的做法是eventproxy发出
消息,然后将所需的数据接收的消息的
操作后()的消息。只有在接收到消息时,才能
打印传递的参数(结果)。
复制代码代码如下所示:
分数= $(大)文本();
添加
Ep.emit('t_score { 1 },{用户,用户用户{ 2 },{ 3 },用户{ 4 },得分});
的…
Ep.after('t_score ',10、功能(用户){
console.log(用户);
});
{ }
问题是
解决了,但算总账的价值似乎太大了。再次,原来有两类=‘大',而用户的主题集合属于这一类。我们把第一个元素通过再见s.slice(开始,{结束}),和比分改为得分=('大')。片(0)。情商(0)。文本()。修剪();正确的结果如下。
{ }