2013-11-26 2 views
0

Кто-нибудь использовал Node Cheerio, чтобы очистить весь сайт, а не только домашнюю страницу/первую страницу, на которую указывает скребок?Узел Cheerio, чтобы очистить весь сайт

В тот момент, когда я делаю следующее, которое только сбрасывает целевую страницу.

request('http://arandomsite.com/', function (error, response, html) { 
    if (!error && response.statusCode == 200){ 
     var $ = cheerio.load(html); 
      ... 
      ... 
      ... 
}; 

ответ

1

Я никогда не использовал Cheerio, но я бы предположить (как и с другими скребками майских), то это будет только сделать страницу, указать его. Если предположить, что cheerio.load возвращает JQuery, как API, вы, вероятно, придется сделать что-то вроде

$('a').each(function(index, a) { 
    //TODO: You may want to keep track here of which you have done, and not redo any. 
    request('http://arandomsite.com' + a.attr('href'), myPageProcessFunction); 
}); 

Очевидно, что вам нужно будет добавить такие вещи, как фреймов, а также, чтобы убедиться, что вы получите полный результат.

Для того, чтобы уточнить, вот некоторые обновленный код:

request('http://arandomsite.com/', function responseFunction(error, response, html) { 
if (!error && response.statusCode == 200){ 
    var $ = cheerio.load(html); 
    $('a').each(function(index, a) { 
     request('http://arandomsite.com' + a.attr('href'), responseFunction); 
    }); 
}; 
}); 
+0

Единственная проблема состоит в том, что функция запроса непосредственно ниже моих переменных зависимостей узла и поэтому одна проблема, которую я вижу в том, что упаковка запрос в '$ ('a'). each (function (index, a) {};' будет собираться вызывать $ undefined. – leaksterrr

+1

Я не имею в виду обертывание запроса. Этот код должен быть внутри запроса после $ Когда я говорю запрос на вызов по каждой ссылке, я имею в виду сделать новый запрос вызова и передать текущую функцию в качестве результата обратного вызова. –

+0

Я вижу вашу логику и спасибо за обновленный код, это имеет смысл. что у меня нет, это он говорит, что у него нет метода «attr»? Вот ссылка на пасти с полным кодом, чтобы дать вам лучшее представление о том, что я делаю. Http://pastie.org/private/snykxn92q23ga8srnpak3a#1,7 – leaksterrr

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