抓取页面上的链接,然后访问并检查与node和zombie.js的每个链接

我试图在Node中使用zombie.js构build一个简单的实用程序来访问页面,查找并打开页面上的所有链接,并确保每个子页面都成功返回200。

下面是这个代码(用CoffeeScript编写)的例子,爬行stackoverflow.com的主页

Browser = require('zombie') browserOpts = runScripts: false site: 'http://www.stackoverflow.com' home = new Browser browserOpts home.visit '/', (e, browser) -> questions = browser.queryAll '#question-mini-list .summary h3 a' for q in questions qUrl = q.getAttribute 'href' page = new Browser browserOpts page.visit qUrl, (e, browser, statusCode, errors) -> console.log "Arrived at page #{browser.window.location} and found " + browser.html().length + " bytes" console.log statusCode browser.dump() return return 

如果您尝试运行此代码,您会注意到第一批链接正确加载,并显示页面中的字节数。

但是,在第一批成功的页面加载(其大小似乎是随机的)之后,所有后续页面加载似乎执行callback以提前visit 。 该文档是空的(它只是<html><head></head><body></body></html> ),并且callback的statusCode参数是undefined

我无法解释或弄清楚为什么会发生这种情况。 任何提示将非常感谢。

请原谅我的一个咖啡问题

 var async = require('async'); var Browser = require('zombie'); var browserOpts = { runScripts: false, site: 'http://www.stackoverflow.com' }; var home = new Browser(browserOpts); home.visit('/', function(e, browser) { var questions = browser.queryAll('#question-mini-list .summary h3 a'); async.eachLimit(questions, 3, function (question, cb) { var qUrl = question.getAttribute('href'); var page = new Browser(browserOpts); page.visit(qUrl, function(e, browser, statusCode, errors) { console.log(("Arrived at page " + browser.window.location + " and found ") + browser.html().length + " bytes"); console.log(statusCode); browser.dump(); cb(e); }); }, function (err) { console.error('OOPS', err); }); }); 

试试这里: http : //runnable.com/UWh05t96qlJ8AAAC

你一次提出太多的请求,而且计算器正在closures你。 据我所知,截止值是4。

如果你真的需要从stackoverflow的数据使用api: https : //api.stackexchange.com/docs