CNode

爬虫请求问题 [ 使用async 请求]

问答
Bbingqingwu发布于11 年前最后回复11 年前3 回复4454 浏览0 收藏

写了两个函数: 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)

1
1340641314#1·11 年前

没看懂

L
leapon#2·11 年前

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

A
alsotang#3·11 年前

控制一下并发试试吧。

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

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

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

参与回复
登录后即可参与回复。登录