2015-03-26 2 views
0

Я пытаюсь залезть на страницы веб-сайта. здесь мой пример кода, я использовал stackoverflow только для теста, я не хочу обхода stackoverflow.Node.js Многостраничный гусеничный погрузчик

я этот код я хочу получить все ссылки на странице и толчке в массиве после этого перейти к каждой ссылке и поиск Node (это просто тест.)

запрос вара = требуется («запрос»); var cheerio = require ('cheerio');

var pages = 20; 
var counter = 1; 
while(counter<=pages){ 

    var siteUrl = "http://stackoverflow.com/unanswered/tagged/?page="+counter+"&tab=votes"; 
    var queue = []; 
    request(siteUrl, function(error, response, html){ 
      if(!error){ 
       var $ = cheerio.load(html); 
       // Extract All links in page 
       links = $('a'); 
       $(links).each(function(i, link){ 
        queue.push("http://stackoverflow.com"+$(link).attr('href')); 
        }); 


      } 
       // Search For Node.js on every question. 
       queue.each(function(i,linkItem){ 

        request(linkItem, function(error, response, html){ 
         var page = cheerio.load(html); 
         var ser = page.match(/node/i); 
         if (ser & ser.lenght > 0){ 
          console.log(page); 
         } 
        }); 
       }) 

     }) 

    counter ++; 
} 

, когда я запускаю этот код его просто показать FRIST ссылку страницы и показать мне ошибку each has no method

Я буду рад, если сказать, где я не прав, или даже мой код ее правильное решение.

ответ

1

Прежде всего, вы смешиваете асинхронный и синхронизирующий код не очень хорошо. Основная проблема заключается в том, что переменная queue, которую вы пытаетесь перебрать, не имеет метода each. Вы можете использовать lodash для этого или просто заменить вызов функции простым циклом.

var i, 
 
    item; 
 

 
for(i = 0; i < queue.length; i++) { 
 
    item = queue[i]; 
 
    
 
    request(item, function(error, response, html){ 
 
    var page = cheerio.load(html); 
 
    var ser = page.match(/node/i); 
 
    if (ser & ser.lenght > 0){ 
 
     console.log(page); 
 
    } 
 
    }); 
 
}

Кроме того, я написал tutorial для точно делать то, что вы собираетесь попробовать.

+0

Я использовал для цикла, его дать эту ошибку: 'can not read property 'parent' undefined' – alireza

+0

Можете ли вы опубликовать stacktrace, пожалуйста? –

Смежные вопросы