Open xuelingzhizun opened 8 years ago
写个 demo 验证,count++ count-- 之类的
2016-08-27 22:12 GMT+08:00 xuefeng notifications@github.com:
求助: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.601mshttps://cnodejs.org/topic/57c1537f100afbbc0dcc54241 耗时: 1.819mshttps://cnodejs.org/topic/57c19772c21cf0657feecbef1 耗时: 1.347mshttps://cnodejs.org/topic/57bc01eeb32043f532d40e8f1 耗时: 1.110mshttps://cnodejs.org/topic/57c03e81bf0ed4f07ef2e7711 耗时: 2.194mshttps://cnodejs.org/topic/575e70ef4a43c1cb159ffe251 耗时: 1.113mshttps://cnodejs.org/topic/55efc6caee70a7cb60cdb4391 耗时: 0.940mshttps://cnodejs.org/topic/57c14793bf0ed4f07ef2e7a41 耗时: 1.322mshttps://cnodejs.org/topic/57c13284bf0ed4f07ef2e7a31 耗时: 1.298mshttps://cnodejs.org/topic/57c0136a100afbbc0dcc53f41 耗时: 1.999mshttps://cnodejs.org/topic/57c034151e600faf7ffc88f91 耗时: 5.378mshttps://cnodejs.org/topic/571435ea434cfcfa52684b2b1 耗时: 1.076mshttps://cnodejs.org/topic/57c045581e600faf7ffc88fd1 耗时: 1.236mshttps://cnodejs.org/topic/57bbd2dadcaeb5d932db22a31 耗时: 1.514mshttps://cnodejs.org/topic/57c02335c21cf0657feecbbf1 耗时: 1.237mshttps://cnodejs.org/topic/54ddef8ea6cdb34a1c8430241 耗时: 3.191mshttps://cnodejs.org/topic/52d4d6e8e20b7c8214887df21 耗时: 0.912mshttps://cnodejs.org/topic/57c02b24bf0ed4f07ef2e7681 耗时: 1.270mshttps://cnodejs.org/topic/57a0a7e8632442d2436f79a41 耗时: 2.140mshttps://cnodejs.org/topic/57c07c42100afbbc0dcc54091 耗时: 1.733mshttps://cnodejs.org/topic/578aee8843fb9f04148cfbc31 耗时: 1.139mshttps://cnodejs.org/topic/57aac1b69c26ea7c722609d41 耗时: 6.002mshttps://cnodejs.org/topic/57b062ed144011da12ff41831 耗时: 0.906mshttps://cnodejs.org/topic/57b423e8e8db280a7c86513d1 耗时: 0.937mshttps://cnodejs.org/topic/572d68b1afd3b34a17ff40f01 耗时: 3.163mshttps://cnodejs.org/topic/57bb0650dcaeb5d932db22671 耗时: 1.524mshttps://cnodejs.org/topic/57bf2387100afbbc0dcc53ba1 耗时: 1.250mshttps://cnodejs.org/topic/57bff3c7c21cf0657feecbad1 耗时: 1.813mshttps://cnodejs.org/topic/5784b5c3ee5f048d54f908d01 耗时: 0.976mshttps://cnodejs.org/topic/57be9b5ac21cf0657feecb581 耗时: 1.921mshttps://cnodejs.org/topic/57bfc912bf0ed4f07ef2e7321 耗时: 1.090mshttps://cnodejs.org/topic/57c00a81100afbbc0dcc53eb1 耗时: 1.919mshttps://cnodejs.org/topic/57bfff32bf0ed4f07ef2e74f1 耗时: 0.861mshttps://cnodejs.org/topic/5649fd7b6fc3f5ae7e0b7e4c1 耗时: 1.567mshttps://cnodejs.org/topic/578052ee69d72f545483ca461 耗时: 1.399mshttps://cnodejs.org/topic/57bff69ac21cf0657feecbb11 耗时: 1.282mshttps://cnodejs.org/topic/57bff68ac21cf0657feecbb01https://cnodejs.org/topic/57bc458c1d27b9113348a5191https://cnodejs.org/topic/57bd6c781e600faf7ffc88291https://cnodejs.org/topic/54032efa9769c2e93797cd061https://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。
希望师傅能在闲暇之余指教一下,学生不胜感激。
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/alsotang/node-lessons/issues/110, or mute the thread https://github.com/notifications/unsubscribe-auth/ABGB7w8ShudjbTD67lmblWJRItUOzyzoks5qkEXWgaJpZM4JutBU .
var concurrencyCount = 0;
async.mapLimit(topicUrls, 5, function(url, callback) {
console.time('耗时');
concurrencyCount++;
console.log('现在的并发数是:' + concurrencyCount);
superagent.get(url)
.end(function(err, res) {
if (err) {
return console.error(err);
}
console.log(url);
var $ = cheerio.load(res.text);
var content = {
title: $('.topic_full_title').text().trim(),
href: url,
comment1: $('.reply_content').eq(0).text().trim()
};
concurrencyCount--;
callback(null, content);
});
console.timeEnd("耗时");
}, function(err, result) {
console.log(err);
console.log(result);
});
这样可以吧?
@cody1991 谢谢指教,显示的并发和耗时是可以的,或许还需要调整一下,url和显示的并发数和耗时数相匹配,我继续研究一下。
# 按照你指导的代码出现的结果
现在的并发数是:1
耗时: 12.906ms
现在的并发数是:2
耗时: 1.324ms
现在的并发数是:3
耗时: 2.254ms
现在的并发数是:4
耗时: 4.032ms
现在的并发数是:5
耗时: 0.565ms
https://cnodejs.org/topic/57c9a5856f7069ce262d0547
现在的并发数是:5
耗时: 3.019ms
https://cnodejs.org/topic/57c39145100afbbc0dcc544d
现在的并发数是:5
耗时: 1.480ms
https://cnodejs.org/topic/57c7f8006f7069ce262d04cd
现在的并发数是:5
耗时: 1.021ms
https://cnodejs.org/topic/57cbd6035f7f910c27696d7c
现在的并发数是:5
耗时: 0.976ms
https://cnodejs.org/topic/57cad7c95f7f910c27696d60
现在的并发数是:5
耗时: 1.448ms
https://cnodejs.org/topic/57c93dbf5f7f910c27696d27
现在的并发数是:5
耗时: 0.998ms
https://cnodejs.org/topic/57cbbf126f7069ce262d0588
现在的并发数是:5
耗时: 1.201ms
https://cnodejs.org/topic/57c95bb86f7069ce262d0531
现在的并发数是:5
耗时: 1.904ms
https://cnodejs.org/topic/57cad6325f7f910c27696d5e
现在的并发数是:5
耗时: 9.815ms
https://cnodejs.org/topic/57ca564f6f7069ce262d055a
现在的并发数是:5
耗时: 1.464ms
https://cnodejs.org/topic/57cb738ea843659126f98c7a
现在的并发数是:5
耗时: 1.984ms
https://cnodejs.org/topic/57ca4cb12adfc63a26784460
现在的并发数是:5
耗时: 1.033ms
https://cnodejs.org/topic/57bd6c781e600faf7ffc8829
现在的并发数是:5
耗时: 8.546ms
https://cnodejs.org/topic/57cacb112adfc63a26784472
现在的并发数是:5
耗时: 1.109ms
https://cnodejs.org/topic/57cacd2c2adfc63a26784473
现在的并发数是:5
耗时: 1.494ms
https://cnodejs.org/topic/57c94ce0a843659126f98c3a
现在的并发数是:5
耗时: 1.649ms
https://cnodejs.org/topic/57bd2d48dcaeb5d932db22ff
现在的并发数是:5
耗时: 1.242ms
https://cnodejs.org/topic/57c6365a9b447b634391c85b
现在的并发数是:5
耗时: 8.174ms
https://cnodejs.org/topic/57c8c03c6f7069ce262d04e6
现在的并发数是:5
耗时: 6.757ms
https://cnodejs.org/topic/57c92b2c2adfc63a2678442c
现在的并发数是:5
耗时: 1.234ms
https://cnodejs.org/topic/57c7d8765f7f910c27696cb3
现在的并发数是:5
耗时: 6.855ms
https://cnodejs.org/topic/57c965db6f7069ce262d0539
现在的并发数是:5
耗时: 3.040ms
https://cnodejs.org/topic/57ca6359a843659126f98c5c
现在的并发数是:5
耗时: 1.680ms
https://cnodejs.org/topic/51b78b9ef78196a85c767863
现在的并发数是:5
耗时: 2.053ms
https://cnodejs.org/topic/57c94bf12adfc63a2678443b
现在的并发数是:5
耗时: 1.613ms
https://cnodejs.org/topic/57ca5a295f7f910c27696d49
现在的并发数是:5
耗时: 1.175ms
https://cnodejs.org/topic/57c70d87f6919aac3a29a2fd
现在的并发数是:5
耗时: 4.872ms
https://cnodejs.org/topic/561fe37af232828110a077a2
现在的并发数是:5
耗时: 4.031ms
https://cnodejs.org/topic/57ca3c2a5f7f910c27696d45
现在的并发数是:5
耗时: 3.508ms
https://cnodejs.org/topic/567cd9a15451a28007f82ef0
现在的并发数是:5
耗时: 2.075ms
https://cnodejs.org/topic/57c7a292463a40f53a95c607
现在的并发数是:5
耗时: 2.945ms
https://cnodejs.org/topic/57c9995e5f7f910c27696d35
现在的并发数是:5
耗时: 1.235ms
https://cnodejs.org/topic/57c897b56f7069ce262d04e5
现在的并发数是:5
耗时: 13.308ms
https://cnodejs.org/topic/57c9a4e7a843659126f98c51
现在的并发数是:5
耗时: 2.320ms
https://cnodejs.org/topic/55c97a997a5d91fa63fe9ce7
现在的并发数是:5
耗时: 1.073ms
https://cnodejs.org/topic/57c8672fa843659126f98bf3
https://cnodejs.org/topic/57c908046f7069ce262d0515
https://cnodejs.org/topic/57b2aee4e8db280a7c8650a2
https://cnodejs.org/topic/57c9675c6f7069ce262d053a
确实可以!
求助:lesson 5,根据您写的async案例我写了一个小爬虫针对cnode的,我怎么才能证明他确实是限制在5个请求上?
我应该怎么组织代码才能才打印的结果中明确的显示出现在是限制每次并发数据不能超过5个,而且打印的结果该怎么理解——前五个是时间 后五个是URL。
希望师傅能在闲暇之余指教一下,学生不胜感激。