我正在使用带有Request和Cheerio库的NodeJS实现Web scraper。 我正在尝试将已删除的URL链接保存到数组中,但是,由于某种原因,当我尝试导出它时,我的数组最终变为未定义。
最后的console.log(url_dict)将数据打印到终端,但如果我将模块导出到另一个.js文件并将其打印到终端(使用console.log),我会收到一个未定义的错误。
有什么想法?非常感谢你的时间! :)
var request = require('request');
var cheerio = require('cheerio');
var senatorlist = 'http://en.wikipedia.org/wiki/Seniority_in_the_United_States_Senate';
var url_dict = [];
function lister() {
request(senatorlist, function(err, resp, body) {
if (err)
throw err;
var $ = cheerio.load(body);
$('table.wikitable tr a').each(function(i, link){
url_dict.push($(link).attr('href'));
});
console.log(url_dict);
});
}
答案 0 :(得分:1)
如果您的其他应用只有一个需求和一个日志,那么它显然不会等待lister()
功能中的数据,甚至无法调用它。发送回调给你的利斯特函数:
function lister(callback) {
request(senatorlist, function(err, resp, body) {
if (err)
throw err;
var $ = cheerio.load(body);
$('table.wikitable tr a').each(function(i, link){
url_dict.push($(link).attr('href'));
});
console.log(url_dict);
callback(url_dict);
});
}
在你的其他js文件中:
lister(function(url_dict) {
console.log('other js url_dict:', url_dict);
});
答案 1 :(得分:0)
API CALL
app.get("/someurl",req,res){
request(senatorlist, function(err, resp, body) {
if (err)
throw err;
var $ = cheerio.load(body);
$('table.wikitable tr a').each(function(i, link){
url_dict.push($(link).attr('href'));
});
console.log(url_dict);
res.json(url_dict);
});
}
客户端
$http.get("/someurl").success(function(data,status,headers,config){
console.log("success",data);
$scope.items=data;
}).error(function(data,status,headers,config){
console.log("error",data);
});
};
尝试在服务器上执行此操作并传递此json以显示数据。希望这能解决您的疑问。 :)