【发布时间】:2016-12-27 18:21:20
【问题描述】:
我正在构建一个示例测试爬虫来了解 Cheerio 和 jQuery。
在收到一组 URL 并存储它们后,我正在对第二个请求摸不着头脑,即执行另一个请求以加载这些 URL 并从该页面的标题中提取标题。
我的代码如下所示。
var request = require('request'),
cheerio = require('cheerio');
urls = [];
titles = [];
request('http://reddit.com', function(err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('a.title', '#siteTable').each(function(){
var url = $(this).attr('href');
urls.push(url);
});
//issue is here
for(var i = 0; i < urls.length; i++){
request(urls[i], function(err, resp, body){
var $ = cheerio.load(body);
var title = $("title").text();
console.log(title);
});
}
}
});
似乎在从页面归属标题时,我在某处获得了未定义的属性。
我必须提到我是 jQuery 新手,所以这段代码可能看起来很荒谬(我假设)。
我从控制台收到的错误是,
TypeError: Cannot read property 'parent' of undefined
at Function.exports.update (/home/pi/node_modules/cheerio/lib/parse.js:55:25)
at module.exports (/home/pi/node_modules/cheerio/lib/parse.js:17:11)
at Function.exports.load (/home/pi/node_modules/cheerio/lib/static.js:19:14)
at Request._callback (/home/pi/scraper.js:16:22)
at self.callback (/home/pi/node_modules/request/request.js:187:22)
at Request.emit (events.js:95:17)
at Request.init (/home/pi/node_modules/request/request.js:275:17)
at new Request (/home/pi/node_modules/request/request.js:129:8)
at request (/home/pi/node_modules/request/index.js:55:10)
at Request._callback (/home/pi/scraper.js:15:6)
我知道这个错误意味着我有一个未定义的变量,我正在尝试创建一个像 .someThing 这样的辅助属性,但错误指向第二个请求中的回调函数。
关于如何解决此问题的任何建议?
【问题讨论】:
-
请注意,您的许多变量都是全局变量,因为您在第二个变量定义之后使用了分号而不是逗号。
标签: javascript jquery node.js web-scraping request