javascript - 无法读取未定义的属性 'parent' - Node.js

标签 javascript node.js cheerio superagent

我试图使用 superagent 和 cheerio 从 kijiji 抓取数据进行学习,但出现“无法读取未定义的属性‘parent’”的错误。 (我试过 craigslist 很好)。它发生在我得到正确的结果“对象”之后。 cheerio 似乎有问题。有人对此有任何想法吗?提前感谢您的帮助。

[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);               
      });        
    }
  })  

最佳答案

正如 chrki 所说,cheerio.load()使用空值(如 null 或空字符串)调用。在调用 .load() 之前检查该值是否包含某些内容:

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

关于javascript - 无法读取未定义的属性 'parent' - Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749515/

相关文章:

javascript - Cheeriojs 出现错误 : exports. load.initialize

javascript - 结束游览一次后通过按钮启动 Bootstrap 游览

node.js - 如何安装 numjs

javascript - 正则表达式 : Do not split if previous character is in capitals?

javascript - 将 cheerio 对象转换为字符串

javascript - Node.js Cheerio 模块 ge

javascript - 所有 JavaScript "Uncaught SyntaxError: Invalid regular expression"消息的列表

javascript - “状态”未定义 no-undef

javascript - .prev(选择器)不工作

mysql - 如何使用sequelize在nodejs中更新