求助:lesson 5,根据您写的async案例我写了一个小爬虫针对cnode的,我怎么才能证明他确实是限制在5个请求上?
Author: xuelingzhizunCreated Aug 27, 2016Updated Apr 24, 2019
求助:lesson 5,根据您写的async案例我写了一个小爬虫针对cnode的,我怎么才能证明他确实是限制在5个请求上?
# 爬虫代码
var cheerio = require('cheerio');
var superagent = require('superagent');
var url = require('url');
var async = require('async');
var cnodeUrl = 'https://cnodejs.org/';
var topicUrls = [];
superagent.get(cnodeUrl)
.end(function(err,res){
if(err){
return console.error(err);
}
// var topicUrls = [];
var $ = cheerio.load(res.text);
$('#topic_list .topic_title').each(function(idx,element){
var $element = $(element);
var href = url.resolve(cnodeUrl,$element.attr('href'));
topicUrls.push(href);
});
async.mapLimit(topicUrls,5,function(url,callback){
console.time("耗时");
superagent.get(url)
.end(function(err,res){
if(err){
return console.error(err);
}
console.log(url + "1");
var $ = cheerio.load(res.text);
var content = [];
// var element;
// var $element = $(element);
content.push({
title: $('.topic_full_title').text().trim(),
href: url,
comment: $('.reply_content').eq(0).text().trim(),
});
// console.log(idx + "1111");
callback(null,content);
});
console.timeEnd("耗时");
},function(err,result){
console.log(err);
console.log(result);
});
});# 爬虫结果
xuefeng@ubuntu:~/bjbh/lesson5$ node app2.js
耗时: 3.569ms
耗时: 1.411ms
耗时: 6.515ms
耗时: 4.208ms
耗时: 7.601ms
https://cnodejs.org/topic/57c1537f100afbbc0dcc54241
耗时: 1.819ms
https://cnodejs.org/topic/57c19772c21cf0657feecbef1
耗时: 1.347ms
https://cnodejs.org/topic/57bc01eeb32043f532d40e8f1
耗时: 1.110ms
https://cnodejs.org/topic/57c03e81bf0ed4f07ef2e7711
耗时: 2.194ms
https://cnodejs.org/topic/575e70ef4a43c1cb159ffe251
耗时: 1.113ms
https://cnodejs.org/topic/55efc6caee70a7cb60cdb4391
耗时: 0.940ms
https://cnodejs.org/topic/57c14793bf0ed4f07ef2e7a41
耗时: 1.322ms
https://cnodejs.org/topic/57c13284bf0ed4f07ef2e7a31
耗时: 1.298ms
https://cnodejs.org/topic/57c0136a100afbbc0dcc53f41
耗时: 1.999ms
https://cnodejs.org/topic/57c034151e600faf7ffc88f91
耗时: 5.378ms
https://cnodejs.org/topic/571435ea434cfcfa52684b2b1
耗时: 1.076ms
https://cnodejs.org/topic/57c045581e600faf7ffc88fd1
耗时: 1.236ms
https://cnodejs.org/topic/57bbd2dadcaeb5d932db22a31
耗时: 1.514ms
https://cnodejs.org/topic/57c02335c21cf0657feecbbf1
耗时: 1.237ms
https://cnodejs.org/topic/54ddef8ea6cdb34a1c8430241
耗时: 3.191ms
https://cnodejs.org/topic/52d4d6e8e20b7c8214887df21
耗时: 0.912ms
https://cnodejs.org/topic/57c02b24bf0ed4f07ef2e7681
耗时: 1.270ms
https://cnodejs.org/topic/57a0a7e8632442d2436f79a41
耗时: 2.140ms
https://cnodejs.org/topic/57c07c42100afbbc0dcc54091
耗时: 1.733ms
https://cnodejs.org/topic/578aee8843fb9f04148cfbc31
耗时: 1.139ms
https://cnodejs.org/topic/57aac1b69c26ea7c722609d41
耗时: 6.002ms
https://cnodejs.org/topic/57b062ed144011da12ff41831
耗时: 0.906ms
https://cnodejs.org/topic/57b423e8e8db280a7c86513d1
耗时: 0.937ms
https://cnodejs.org/topic/572d68b1afd3b34a17ff40f01
耗时: 3.163ms
https://cnodejs.org/topic/57bb0650dcaeb5d932db22671
耗时: 1.524ms
https://cnodejs.org/topic/57bf2387100afbbc0dcc53ba1
耗时: 1.250ms
https://cnodejs.org/topic/57bff3c7c21cf0657feecbad1
耗时: 1.813ms
https://cnodejs.org/topic/5784b5c3ee5f048d54f908d01
耗时: 0.976ms
https://cnodejs.org/topic/57be9b5ac21cf0657feecb581
耗时: 1.921ms
https://cnodejs.org/topic/57bfc912bf0ed4f07ef2e7321
耗时: 1.090ms
https://cnodejs.org/topic/57c00a81100afbbc0dcc53eb1
耗时: 1.919ms
https://cnodejs.org/topic/57bfff32bf0ed4f07ef2e74f1
耗时: 0.861ms
https://cnodejs.org/topic/5649fd7b6fc3f5ae7e0b7e4c1
耗时: 1.567ms
https://cnodejs.org/topic/578052ee69d72f545483ca461
耗时: 1.399ms
https://cnodejs.org/topic/57bff69ac21cf0657feecbb11
耗时: 1.282ms
https://cnodejs.org/topic/57bff68ac21cf0657feecbb01
https://cnodejs.org/topic/57bc458c1d27b9113348a5191
https://cnodejs.org/topic/57bd6c781e600faf7ffc88291
https://cnodejs.org/topic/54032efa9769c2e93797cd061
https://cnodejs.org/topic/57b305add6124db37b1d13181
null
[ [ { title: '置顶\n\n\n\n 中国最大的JavaScript开发者大会JSConf China 2016即宁JS 售票啦!',
href: 'https://cnodejs.org/topic/575e70ef4a43c1cb159ffe25',
comment: '具体演讲的安排能透露吗?' } ],
[ { title: '置顶\n\n\n\n 【杭州】 Node Party Github 资料库现已建立,欢迎 watch/star 并持续关注活动信息',
href: 'https://cnodejs.org/topic/57bc01eeb32043f532d40e8f',
comment: '前排占位小伙伴踊跃撸起来' } ],
[ { title: '整合Express + Mysql + mocha,自动生成代码~~~~~',
href: 'https://cnodejs.org/topic/57bbd2dadcaeb5d932db22a3',
comment: '一边自己用一边改,大家也来试试,还挺好玩的。' } ],
[ { title: 'JSON.parse在Node和Chrome表现不一致是什么鬼?',
href: 'https://cnodejs.org/topic/57c19772c21cf0657feecbef',
comment: '' } ],
[ { title: 'nodejs如何加密源代码?',
href: 'https://cnodejs.org/topic/57c1537f100afbbc0dcc5424',
comment: 'Uglify\nFrom NeoReader' } ],
[ { title: '新手求助:很简单的问题让我很疑惑,这个问题是因为异步执行的原因吗',
href: 'https://cnodejs.org/topic/57c03e81bf0ed4f07ef2e771',
comment: '@xuelingzhizun 代码肯定不能获取到数据啊,因为你前面那个请求是异步的你把循环放到end外面去了这个时候是不会等end返回再执行后面的,而你后面那个是放在end函数里面的也即请求回来后才做的操作当然有数据了' } ],
[ { title: '精华\n\n\n\n Coding CTO 孙宇聪:《人,技术与流程》',
href: 'https://cnodejs.org/topic/55efc6caee70a7cb60cdb439',
comment: '终于看完了,不过学到很多~' } ],
[ { title: '【文章分享】《为什么你该上网直播coding? 因为这将是你进步,求职和赚钱的最好管道》',
href: 'https://cnodejs.org/topic/57c14793bf0ed4f07ef2e7a4',
comment: '先解决一下网络问题,网站都打不开,直播啥\n来自酷炫的 CNodeMD' } ],
[ { title: 'gulp-refresh插件不管用',
href: 'https://cnodejs.org/topic/57c13284bf0ed4f07ef2e7a3',
comment: '' } ],
[ { title: '这几天配的项目 全部静态资源都加载不了,删除koa-less 后可以,但是为什么,求指导',
href: 'https://cnodejs.org/topic/57c0136a100afbbc0dcc53f4',
comment: '是不是最后的…/…/public 应该是public?' } ],
[ { title: 'app上传文件时,服务端如何接收文件?',
href: 'https://cnodejs.org/topic/57c034151e600faf7ffc88f9',
comment: '都是走http协议,具体实现我也不知道,百度可以找到\n来自酷炫的 CNodeMD' } ],
[ { title: '这次玩大了, nodeclub被我抄袭了',
href: 'https://cnodejs.org/topic/571435ea434cfcfa52684b2b',
comment: '看到标题进来的~~' } ],
[ { title: '不解为何这段代码里有exports,module.exports同时存在?',
href: 'https://cnodejs.org/topic/57c045581e600faf7ffc88fd',
comment: '@Web-Kevin 你还是对module.exports 与 exports 理解的不彻底, 建议再看看去' } ],
[ { title: '收集关于Nodejs的系列文章索引',
href: 'https://cnodejs.org/topic/57c02335c21cf0657feecbbf',
comment: '@ncuzp lz 有心,支持一下,《Nodejs开发加密货币》系列文章,地址: https://github.com/imfly/bitcoin-on-nodejs 永远免费提供。\n文章内容涉及前端、后台和PC客户端,对目前大红大紫的区块链技术相关概念进行了技术层面的解读,对P2P网络编程、加密解密技术、分布式算法、函数式编程等技术或理论进行了由浅入深的论述,采取无代码不文章的方式,全过程以实际项目代码为例证,适合Node.js入门和进阶使用。\n目前区块链技术,刚刚兴起,但是国内这方面的资料很少,可能又要落后于美国。为此,本系列文章,目的是传播区块链技术,在新的技术领域培养和积累优秀的人才(围绕区块链,建立了 中国区块链技术专家俱乐部 等社区,文章里有链接)。本人水平有限,也请小伙伴们多批评指教。' } ],
[ { title: 'ubuntu使用nvm管理node后用sudo安装全局包报错。',
href: 'https://cnodejs.org/topic/54ddef8ea6cdb34a1c843024',
comment: '按照node.js包教不包会上的教程1,安装的nvm' } ],
[ { title: '求助,用node.js对公钥进行"RSA/ECB/PKCS1Padding"算法加密,我该用哪个模块。',
href: 'https://cnodejs.org/topic/52d4d6e8e20b7c8214887df2',
comment: 'nodejs的标准加密模块是crytpo,支持的算法列表只包括aes/des等对称算法,不支持非对称算法rsa,具体可运行下面代码查看。\nvar crypto=require(\'crypto\');\nconsole.log(crypto.getCiphers());\n由已知私密钥匙生成公开钥匙这第一步crypto模块就被判了死刑,因此需要寻找第三方的nodejs模块,例如ursa。' } ],
[ { title: 'nodejs压缩问题求解',
href: 'https://cnodejs.org/topic/57c02b24bf0ed4f07ef2e768',
comment: 'let child = require(\'child_process\');\nchild.exec(\'tar -czvf xx.tar.gz [目录名]\', {}, function(err, stdout, stderr){\n // do sth\n});' } ],
[ { title: '精华\n\n\n\n 印刷品般的 Hexo',
href: 'https://cnodejs.org/topic/57a0a7e8632442d2436f79a4',
comment: '赞一个,我也一直觉得中文排版是被忽视了很久的问题。' } ],
[ { title: '精华\n\n\n\n JSer装逼手册',
href: 'https://cnodejs.org/topic/578aee8843fb9f04148cfbc3',
comment: 'mark\nFrom Noder' } ],
[ { title: 'JS实现闭包的困惑请教',
href: 'https://cnodejs.org/topic/57c07c42100afbbc0dcc5409',
comment: '怎么凌乱成这个样子了,我放另外一个地方。\nhttp://www.cnblogs.com/chen110xi/p/5811492.html' } ],
[ { title: 'node.js在实际生产中的作用是什么呢?',
href: 'https://cnodejs.org/topic/57aac1b69c26ea7c722609d4',
comment: '其实已经有很多公司开始采用node跑全套的系统了,不只是分担后端一部分功能而已。具体能有什么作用,还取决与整个项目的架构。' } ],
[ { title: '趣店前端团队基于koajs的前后端分离实践',
href: 'https://cnodejs.org/topic/57b062ed144011da12ff4183',
comment: 'mark来自react-cnode手机版' } ],
[ { title: '请教一个请求慢的问题',
href: 'https://cnodejs.org/topic/57b423e8e8db280a7c86513d',
comment: '第一次请求需要建立tcp链接,握手-延迟确认,后面建立长链接后省去了这些' } ],
[ { title: '精华\n\n\n\n 如何用 Node.js 编写一个 API 客户端',
href: 'https://cnodejs.org/topic/572d68b1afd3b34a17ff40f0',
comment: '支持楼主\nnodejs像Java那样搞出SSH框架是有必要的,这样会减轻开发负担。但这样一来,也会让nodejs失掉开源精神。\n就像现在大学一样,所有学Java的都学SSH框架,但没有几个人真能理解SSH都解决了什么问题。\n我希望阿里或其它大公司搞出像SSH的东西,但又害怕这样的东西。真是矛盾。' } ],
[ { title: '屏蔽词非法词检测以及转换npm上线',
href: 'https://cnodejs.org/topic/57bb0650dcaeb5d932db2267',
comment: '赞!' } ],
[ { title: 'fs模块 为何不能在异步读取文件中使用return?',
href: 'https://cnodejs.org/topic/57bf2387100afbbc0dcc53ba',
comment: '这个时候是恶补异步编程的最好的时候,别人给你一语道破,你的思维还是很难扭转。我写过几篇入门文章(Nodejs入门部分),https://github.com/imfly/bitcoin-on-nodejs 其中,我建议使用nodejs要养成异步调用的习惯(几个编码习惯之一),看看是否有帮助' } ],
[ { title: 'mongodb 更新数据问题',
href: 'https://cnodejs.org/topic/57bff3c7c21cf0657feecbad',
comment: 'db.test.update(\n { students.userId:ObjectId(“55546f25a668fa781d00000a”) },\n { $set: { "students.$.userName" : "xxxxxxxxx" } }\n)\nhttps://docs.mongodb.com/manual/reference/operator/update/positional/#up.S' } ],
[ { title: 'redispvpranking[redis实现的游戏内pvp活动排行榜] npm',
href: 'https://cnodejs.org/topic/5784b5c3ee5f048d54f908d0',
comment: 'key改了一个名字不傻眼了啊' } ],
[ { title: '有没有用过passportjs的大神',
href: 'https://cnodejs.org/topic/57be9b5ac21cf0657feecb58',
comment: 'github上面多~~~~~~~~~~' } ],
[ { title: 'express设置cookie没有被添加到浏览器',
href: 'https://cnodejs.org/topic/57bfc912bf0ed4f07ef2e732',
comment: '看了下文档,会不会是类型的问题:' } ],
[ { title: 'React 与 Domcom 面对面 -- 评论框教程',
href: 'https://cnodejs.org/topic/57c00a81100afbbc0dcc53eb',
comment: '' } ],
[ { title: 'sailsjs怎样不使用waterline',
href: 'https://cnodejs.org/topic/57bfff32bf0ed4f07ef2e74f',
comment: '自己写, sails-hook-xxx' } ],
[ { title: '拿到<NodeJs实战第二季>, 激动了 => 失落了.',
href: 'https://cnodejs.org/topic/5649fd7b6fc3f5ae7e0b7e4c',
comment: '我表示,很多东西很多接口。。。如果不是经常用,看了又忘了' } ],
[ { title: 'gm图片处理模块儿无法正常使用',
href: 'https://cnodejs.org/topic/578052ee69d72f545483ca46',
comment: '不要用win7\n来自酷炫的 CNodeMD' } ],
[ { title: 'thinkjs获取到客户端ip本地测试没问题,部署到服务器上获取到的都是127.0.0.1',
href: 'https://cnodejs.org/topic/57bff69ac21cf0657feecbb1',
comment: '' } ],
[ { title: '这样的产品你会想用么?',
href: 'https://cnodejs.org/topic/57bff68ac21cf0657feecbb0',
comment: '' } ],
[ { title: '再来一波,成都求职js',
href: 'https://cnodejs.org/topic/57bc458c1d27b9113348a519',
comment: '你这,开价,是不是,盲目乐观了点?' } ],
[ { title: '利用redis将log4js产生的日志送到logstash',
href: 'https://cnodejs.org/topic/57bd6c781e600faf7ffc8829',
comment: 'http://udn.yyuap.com/doc/logstash-best-practice-cn/contrib_plugins/kafka.html\n也可以用这个吧' } ],
[ { title: '树莓派上的Node.js',
href: 'https://cnodejs.org/topic/54032efa9769c2e93797cd06',
comment: '好玩,顶上。' } ],
[ { title: '第一篇技术博客:不要滥用this绑定',
href: 'https://cnodejs.org/topic/57b305add6124db37b1d1318',
comment: '后台管理系统的页面,正在逐渐使用vue来代替jq来自react-cnode手机版' } ] ]
我应该怎么组织代码才能才打印的结果中明确的显示出现在是限制每次并发数据不能超过5个,而且打印的结果该怎么理解——前五个是时间 后五个是URL。
希望师傅能在闲暇之余指教一下,学生不胜感激。
Source: alsotang/node-lessons