我正在尝试抓取一个网页,将所有URL放在一个数组中,然后刮掉数组中的下一页。但它只是循环第一个URL而不是跟随数组中的下一个URL。如何更改它以便刮擦每一页?
感谢您的帮助。
var request = require('request');
var cheerio = require('cheerio');
var async = require('async');
var fs = require('fs');
var i = 0;
var array = [];
var q = async.queue(function (task, done) {
request(task.url, function(err, res, body) {
if (err) return done(err);
if (res.statusCode != 200) return done(res.statusCode);
var $ = cheerio.load(body);
links = $('a');
$(links).each(function(i, link){
var href = $(link).attr('href');
array.push(href);
console.log(array);
});
done();
i++
q.push({ url: array[i] });
});
}, 5);
q.push({ url: 'http://www.hobo-web.co.uk/' });
答案 0 :(得分:0)
看来done()返回函数,这意味着i ++永远不会发生。移动i ++和q.push({url:array [i]});到下一个代码块。这应该可以解决你的问题。