2015-01-02 6 views
1

Я пытался использовать суперагент и cheerio для сканирования данных из kijiji для обучения, в то время как я получил ошибку «Не могу прочитать свойство« родительский »неопределенного». (Я пробовал Craigslist, который был прекрасен). Это произошло после того, как я получил правильный результат «объект». Кажется, что-то не так с cheerio. Кто-нибудь об этом знает? Цените за вашу помощь заранее.Не могу прочитать свойство «parent» undefined - Node.js

[ERROR] 17:30:24 TypeError 
TypeError: Cannot read property 'parent' of undefined 
    at Function.exports.update (C:\Users\zhi_xie\nodejs\neomovie\node_modules\ch 
eerio\lib\parse.js:55:25) 
    at module.exports (C:\Users\zhi_xie\nodejs\neomovie\node_modules\cheerio\lib 
\parse.js:17:11) 
    at Function.exports.load (C:\Users\zhi_xie\nodejs\neomovie\node_modules\chee 
rio\lib\static.js:19:14) 
    at C:\Users\zhi_xie\nodejs\neomovie\routes\crawlerusers.js:35:27 
    at Request.callback (C:\Users\zhi_xie\nodejs\neomovie\node_modules\superagen 
t\lib\node\index.js:746:30) 
    at Request.<anonymous> (C:\Users\zhi_xie\nodejs\neomovie\node_modules\supera 
gent\lib\node\index.js:135:10) 
    at Request.emit (events.js:95:17) 
    at ClientRequest.<anonymous> (C:\Users\zhi_xie\nodejs\neomovie\node_modules\ 
superagent\lib\node\index.js:921:12) 
    at ClientRequest.emit (events.js:95:17) 
    at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1692:21) 

Вот коды:

var superagent = require('superagent'); 
    var cheerio = require('cheerio'); 
    var url = require('url'); 
    var kijijiUrl = 'http://www.kijiji.ca/b-immobilier/ville-de-montreal/c34l1700281?ad=wanted'; 

    superagent.get(kijijiUrl).end(function (err, res) { 
    if (err) { 
     return console.error(err); 
    } 
    var topicUrls = []; 
    var $ = cheerio.load(res.text); 
    // get all links in that page 
    $('div.container-results').children('table').each(function (idx, element) { 
     var $element = $(element); 
     var href = url.resolve(kijijiUrl, $element.attr('data-vip-url')); 
     topicUrls.push(href); 
    }); 

    for(i = 0; i<topicUrls.length; i++){ 
     superagent.get(topicUrls[i]) 
     .end(function (err, sres) { 
      //normal err handler 
      if (err) { 
      return next(err); 
      } 
      var $ = cheerio.load(sres.text); 
      var object = {}; 
      $('table.ad-attributes').find('tr').not('.divider').each(function(i, element){ 
      var titles = $(element).children('th').text().trim(); 
      var values = $(element).children('td').text().trim();   
      object[titles] = values; 
      }); 
      console.log(object);    
     });   
    } 
    }) 
+2

Я искал это сообщение об ошибке, моя ошибка заключалась в использовании 'cheerio.load()' без параметров. В вашем случае 'res.text', вероятно, не определено, это не очень очевидно из сообщения об ошибке. – chrki

ответ

4

Как chrki уже сказал, cheerio.load() вызывается с пустым значением, как нуль или пустая строка. Проверьте, содержит ли значение то, прежде чем позвонить .load():

if (res.text) { 
    var $ = cheerio.load(res.text); 
} else { 
    // do something else 
} 
1

У меня было то же самое сообщение об ошибке, как

$ = cheerio.load(response.Body); 

должны были

$ = cheerio.load(response.body); 

так что не было ничего для здор`ово загрузки ,

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