无法读取未定义 - 节点.js的属性“父级”
Cannot read property 'parent' of undefined - Node.js
我试图使用超级代理和cheerio从kijiji抓取数据进行学习,同时我收到错误"无法读取未定义的属性'父'"。(我尝试了craigslist,这很好)。它发生在我得到正确的结果"对象"之后。啦似乎有些不对劲。有人对此有任何想法吗?提前感谢您的帮助。
[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
}
我有相同的错误消息
$ = cheerio.load(response.Body);
应该是
$ = cheerio.load(response.body);
所以Cheerio没有什么可以加载的。
相关文章:
- jQuery最近父级的数据属性选择器
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 来自文档或下一个静态父级的事件委派
- 从中关闭子窗口'的父级
- JavaScript:单击时相对于父级增加变量值
- 通过从节点父级获取所有子级对节点进行排序(获取子级数组)
- 阻止对父级的相同域Iframe访问
- 从子函数执行父函数;t更新父级'的属性
- 淘汰赛:can't从嵌套foreach访问父级范围的属性
- 获取子 ID 并作为 ARIA 属性添加到父级
- 未捕获的类型错误:当存在父级时,无法读取未定义的属性“长度”
- 无法读取未定义 - 节点.js的属性“父级”
- 使用 Angular JS 1.3 将元素属性从父级传递到子级
- Javascript:原型属性在父级上不可见
- 当使用window.open将数据从父级传递到子级时,为什么我会得到'无法读取属性'元素'的未定
- 查找包含特定CSS属性的父级
- AngularJS:为什么当父级有ngIf指令时,我不能向祖父元素添加属性
- Ember.js从父级获取嵌套的资源属性
- 如何将transcluded元素的scope属性绑定到父级
- 获取具有指定属性的最近父级