在Request + Cheerio(NODEJS)中遇到循环

时间:2017-06-21 19:48:14

标签: node.js web-scraping

我正在尝试抓取一个网页,将所有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/' });

1 个答案:

答案 0 :(得分:0)

看来done()返回函数,这意味着i ++永远不会发生。移动i ++和q.push({url:array [i]});到下一个代码块。这应该可以解决你的问题。