有几个教程介绍如何使用request
和cheerio
抓取网站。在这些教程中,他们将输出发送到控制台或使用fs
将DOM流式传输到文件中,如下例所示。
request(link, function (err, resp, html) {
if (err) return console.error(err)
var $ = cheerio.load(html),
img = $('#img_wrapper').data('src');
console.log(img);
}).pipe(fs.createWriteStream('img_link.txt'));
但是如果我想在脚本执行期间处理输出怎么办?如何访问输出或将其发送回调用函数?当然,我可以加载img_link.txt
并从那里获取信息,但这将是昂贵的,并没有任何意义。
答案 0 :(得分:1)
一起移除管道。
request(link, function (err, resp, html) {
if (err) return console.error(err)
var $ = cheerio.load(html);
var img = $('#img_wrapper').data('src'); // the var img now has the src attr of some image
return img; // Will return the src attr
});
<强>更新强>
根据您的意见,您的请求函数似乎正在按预期工作,但问题是从另一个模块访问数据。
我建议你阅读Purpose of Node.js module.exports and how you use it。
这也是描述需要和导出的工作方式的good resource article。
module.exports
答案 1 :(得分:1)
您可以将请求包装在将使用html
function(link, callback){
request(link, function(err, im, body){
callback(err, body);
});
});
然后将其分配给exports
并在任何其他模块中使用。