写了两个函数: exports.getTopicList = function(url, callback) //获取文章列表 exports.getTopic = function(url, callback) //获取文章的内容 使用request模块发送的请求 使用以下方式调用正常: readTopic.getTopicList(“https://cnodejs.org/?tab=good”, function(err, topicList){ console.log("get topic list, size: ", topicList.length); async.eachSeries(topicList, function(item, next){ readTopic.getTopic(item.url, function(err, topic){ //todo } } 就是获取到文章列表之后,一条接着一条请求每个文章的内容。 如果async.eachSeries 换成async.each 请求回来的,就是空的?
没看懂
这两个函数的区别在 一个serial,一个parallel。也许你爬的网站不允许同一个ip同时打开多个连接。
控制一下并发试试吧。
如果你这个逻辑嵌套太深了,并发就有点难控制了。
使用 async.queue
或者 https://github.com/Automattic/kue,把相关的逻辑都抽成队列,这样并发容易控制一点。
目前 cnode 的访问控制是,一秒不得超过10次。(2015年9月6日)