爬虫请求问题 [ 使用async 请求]
发布于 9 年前 作者 bingqingwu 3897 次浏览 最后一次编辑是 8 年前 来自 问答

写了两个函数: 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 请求回来的,就是空的?

3 回复

这两个函数的区别在 一个serial,一个parallel。也许你爬的网站不允许同一个ip同时打开多个连接。

控制一下并发试试吧。

如果你这个逻辑嵌套太深了,并发就有点难控制了。

使用 async.queue 或者 https://github.com/Automattic/kue,把相关的逻辑都抽成队列,这样并发容易控制一点。

目前 cnode 的访问控制是,一秒不得超过10次。(2015年9月6日)

回到顶部